C:\Users\work\Desktop\Running Bots\Alerts_bot
This commit is contained in:
parent
5ac5ca176a
commit
5a4fe0ae94
39
main.py
39
main.py
@ -11,7 +11,6 @@ import asyncio
|
||||
from datetime import datetime, timedelta
|
||||
from dotenv import find_dotenv, load_dotenv
|
||||
from typing import Optional
|
||||
from telethon.tl.patched import Dialog
|
||||
|
||||
# ==== Настройка логирования ====
|
||||
log = logging.getLogger(__name__)
|
||||
@ -29,6 +28,9 @@ load_dotenv(env)
|
||||
api_id=os.getenv('api_id')
|
||||
api_hash=os.getenv('api_hash')
|
||||
session_name=os.getenv('session_name') or 'userbot'
|
||||
if not all([api_id, api_hash, session_name]):
|
||||
log.error('Не получены api_id, api_hash или session_name. Они должны быть в переменных окружения или в файле .evg')
|
||||
exit(1)
|
||||
|
||||
# === Настройки ===
|
||||
source_channel_username=os.getenv('source_channel_username') # Канал, который слушаем
|
||||
@ -36,8 +38,8 @@ target_groups=os.getenv('target_groups').split(',') # Группы, куда п
|
||||
for i, s in enumerate(target_groups):
|
||||
if s.isdigit() or s.startswith('-') and s[1:].isdigit():
|
||||
target_groups[i] = int(s)
|
||||
target_entities: list[Dialog] = list()
|
||||
target_entities_dict: dict[int: Dialog] = dict()
|
||||
target_entities: list[PeerUser|PeerChat|PeerChannel] = list()
|
||||
target_entities_dict: dict[int: PeerUser|PeerChat|PeerChannel] = dict()
|
||||
groups_clean_srv_msgs=os.getenv('groups_clean_srv_msgs') # Группы, где удаляем сообщения о присоединившихся
|
||||
if groups_clean_srv_msgs:
|
||||
groups_clean_srv_msgs = groups_clean_srv_msgs.split(',')
|
||||
@ -47,14 +49,29 @@ if groups_clean_srv_msgs:
|
||||
else:
|
||||
groups_clean_srv_msgs = list(target_groups)
|
||||
filter_keywords=os.getenv('filter_keywords') # Строки или регулярное выражение для поиска
|
||||
filter_keywords=filter_keywords.split(',')
|
||||
filter_keywords=filter_keywords.split(',') if filter_keywords else []
|
||||
filter_negative_keywords=os.getenv('filter_negative_keywords') # Строки или регулярное выражение для поиска
|
||||
filter_negative_keywords=filter_negative_keywords.split(',')
|
||||
DATA_FILE=os.getenv('DATA_FILE') # Файл для сохранения сообщений
|
||||
if not DATA_FILE:
|
||||
DATA_FILE='messages.json'
|
||||
filter_negative_keywords=filter_negative_keywords.split(',') if filter_negative_keywords else []
|
||||
DATA_FILE=os.getenv('DATA_FILE') or 'messages.json' # Файл для сохранения сообщений
|
||||
MAX_MESSAGES = os.getenv('MAX_MESSAGES') # Количество хранящихся сообщений
|
||||
MAX_MESSAGES=int(MAX_MESSAGES) if MAX_MESSAGES else 50
|
||||
MAX_MESSAGES=int(MAX_MESSAGES) if MAX_MESSAGES and MAX_MESSAGES.isdigit() else 50
|
||||
USER_DATA_DIR = os.getenv('USER_DATA_DIR') or 'userdata' # директория для Volume
|
||||
|
||||
session_name = os.path.join(USER_DATA_DIR, session_name)
|
||||
DATA_FILE = os.path.join(USER_DATA_DIR, DATA_FILE)
|
||||
if not os.path.exists(USER_DATA_DIR):
|
||||
os.mkdir(USER_DATA_DIR, mode=666)
|
||||
required_fields = {
|
||||
'source_channel_username':source_channel_username,
|
||||
'target_groups':target_groups,
|
||||
'filter_keywords':filter_keywords,
|
||||
}
|
||||
missing_fields = [field_name for field_name, field_val in required_fields.items() if not field_val]
|
||||
if missing_fields:
|
||||
missing_fields = ', '.join(missing_fields)
|
||||
log.info('api_id, api_hash и session_name успешно загружены.')
|
||||
log.error(f'Не получены обязательные {missing_fields}. Они должны быть в переменных окружения или в файле .env')
|
||||
exit(1)
|
||||
|
||||
# =======================
|
||||
|
||||
@ -154,7 +171,7 @@ async def forward_to_targets(
|
||||
entity = target_entities_dict[int(entity)]
|
||||
if source_reply_to_msg_id and (forwarded_info:=source_messages.get(str(source_reply_to_msg_id))):
|
||||
for str_chat_id, target_msg_id in forwarded_info['forwarded_msg_id'].items():
|
||||
if str_chat_id == entity.chat.id:
|
||||
if str_chat_id == str(entity.id):
|
||||
link = await client.get_message_link(message)
|
||||
text = f'Переслано из [{message.chat.title}]({link})\n{message.text}'
|
||||
new_msg = await client.send_message(str_chat_id, text, reply_to=target_msg_id, parse_mode='markdown')
|
||||
@ -233,7 +250,7 @@ async def handler_edited(event: events.MessageEdited.Event):
|
||||
# Проверяем, является ли наше пересланное сообщение последним
|
||||
if msg_id == last_msg_id:
|
||||
# Это последнее сообщение — можно удалить и переслать заново
|
||||
forward_to_targets(event.message, targets=[chat_id])
|
||||
await forward_to_targets(event.message, targets=[chat_id])
|
||||
await client.delete_messages(chat_id, msg_id)
|
||||
log.info(f"🔁 {chat_id} Сообщение было последним → Заменено")
|
||||
else:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user