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 datetime import datetime, timedelta
|
||||||
from dotenv import find_dotenv, load_dotenv
|
from dotenv import find_dotenv, load_dotenv
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from telethon.tl.patched import Dialog
|
|
||||||
|
|
||||||
# ==== Настройка логирования ====
|
# ==== Настройка логирования ====
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -29,6 +28,9 @@ load_dotenv(env)
|
|||||||
api_id=os.getenv('api_id')
|
api_id=os.getenv('api_id')
|
||||||
api_hash=os.getenv('api_hash')
|
api_hash=os.getenv('api_hash')
|
||||||
session_name=os.getenv('session_name') or 'userbot'
|
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') # Канал, который слушаем
|
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):
|
for i, s in enumerate(target_groups):
|
||||||
if s.isdigit() or s.startswith('-') and s[1:].isdigit():
|
if s.isdigit() or s.startswith('-') and s[1:].isdigit():
|
||||||
target_groups[i] = int(s)
|
target_groups[i] = int(s)
|
||||||
target_entities: list[Dialog] = list()
|
target_entities: list[PeerUser|PeerChat|PeerChannel] = list()
|
||||||
target_entities_dict: dict[int: Dialog] = dict()
|
target_entities_dict: dict[int: PeerUser|PeerChat|PeerChannel] = dict()
|
||||||
groups_clean_srv_msgs=os.getenv('groups_clean_srv_msgs') # Группы, где удаляем сообщения о присоединившихся
|
groups_clean_srv_msgs=os.getenv('groups_clean_srv_msgs') # Группы, где удаляем сообщения о присоединившихся
|
||||||
if groups_clean_srv_msgs:
|
if groups_clean_srv_msgs:
|
||||||
groups_clean_srv_msgs = groups_clean_srv_msgs.split(',')
|
groups_clean_srv_msgs = groups_clean_srv_msgs.split(',')
|
||||||
@ -47,14 +49,29 @@ if groups_clean_srv_msgs:
|
|||||||
else:
|
else:
|
||||||
groups_clean_srv_msgs = list(target_groups)
|
groups_clean_srv_msgs = list(target_groups)
|
||||||
filter_keywords=os.getenv('filter_keywords') # Строки или регулярное выражение для поиска
|
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=os.getenv('filter_negative_keywords') # Строки или регулярное выражение для поиска
|
||||||
filter_negative_keywords=filter_negative_keywords.split(',')
|
filter_negative_keywords=filter_negative_keywords.split(',') if filter_negative_keywords else []
|
||||||
DATA_FILE=os.getenv('DATA_FILE') # Файл для сохранения сообщений
|
DATA_FILE=os.getenv('DATA_FILE') or 'messages.json' # Файл для сохранения сообщений
|
||||||
if not DATA_FILE:
|
|
||||||
DATA_FILE='messages.json'
|
|
||||||
MAX_MESSAGES = os.getenv('MAX_MESSAGES') # Количество хранящихся сообщений
|
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)]
|
entity = target_entities_dict[int(entity)]
|
||||||
if source_reply_to_msg_id and (forwarded_info:=source_messages.get(str(source_reply_to_msg_id))):
|
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():
|
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)
|
link = await client.get_message_link(message)
|
||||||
text = f'Переслано из [{message.chat.title}]({link})\n{message.text}'
|
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')
|
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:
|
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)
|
await client.delete_messages(chat_id, msg_id)
|
||||||
log.info(f"🔁 {chat_id} Сообщение было последним → Заменено")
|
log.info(f"🔁 {chat_id} Сообщение было последним → Заменено")
|
||||||
else:
|
else:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user