Update bot.py

parent 33cb0040
......@@ -16,6 +16,7 @@ from aiogram.filters import Command
import logging
from aiogram import types
# Список слов фраз - указателей спама
SPAM_KEYWORDS = [
......@@ -83,21 +84,18 @@ SPAM_KEYWORDS = [
"🎁", "🔥", "💸", "💰", "💲", "💎", "🤑", "🤩", "⚡", "⭐", "💥", "✅", "🏆", "✋", "💖", "💝", "⚔️", "🥇", "💯", "💳", "🔞", "🥳", "😱"
]
# Настройка логирования
log_level = os.getenv('LOG_LEVEL', 'DEBUG').upper() # Считываем уровень логирования из .env (по умолчанию DEBUG)
logging.basicConfig(level=log_level, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def preprocess_spam_keywords(keywords):
"""Приводит ключевые слова к нормализованной форме."""
logger.debug("preprocess_spam_keywords: keyword conversion")
return set(' '.join(normalize_text_to_infinitive(keyword)) for keyword in keywords)
# Загрузка переменных из файла .env
load_dotenv()
# Получение значения токена
bot_token = os.getenv("BOT_TOKEN")
log_chat_id = os.getenv("LOG_CHAT_ID")
# Инициализация бота и диспетчера
bot = Bot(token=bot_token)
......@@ -109,6 +107,40 @@ dp.include_router(router)
# Для хранения информации о новых участниках
active_users = {}
class TelegramLogHandler(logging.Handler):
def __init__(self, bot, chat_id, *args, **kwargs):
super().__init__(*args, **kwargs)
self.bot = bot
self.chat_id = chat_id
async def send_log(self, message):
await self.bot.send_message(self.chat_id, message)
def emit(self, record):
log_message = self.format(record)
loop = asyncio.get_event_loop()
loop.create_task(self.send_log(log_message))
#asyncio.create_task(self.send_log(log_message)) # создаем асинхронную задачу
# Настройка логирования
log_level = os.getenv('LOG_LEVEL', 'DEBUG').upper() # Считываем уровень логирования из .env (по умолчанию DEBUG)
logging.basicConfig(level=log_level, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# Формат логов
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# Добавляем обработчик для Telegram
tg_log_handler = TelegramLogHandler(bot, chat_id=log_chat_id)
tg_log_handler.setLevel(log_level)
tg_log_handler.setFormatter(formatter)
# Добавляем обработчик в логгер
logger.addHandler(tg_log_handler)
morph = MorphAnalyzer()
def has_mixed_layout(text):
"""
......@@ -129,7 +161,6 @@ def has_mixed_layout(text):
logger.info("Word with mixed layout: %s", word)
return True # Найдено слово со смешанной раскладкой
logger.info("No word with mixed layout.")
return False
except Exception as e:
......@@ -230,7 +261,8 @@ def is_spam(text):
spam_count += 1
matched_keywords.append(keyword) # Добавляем совпавшее слово в список
logger.debug(f"Spam-words found in text: {', '.join(matched_keywords)}")
if matched_keywords:
logger.debug(f"Spam-words found in text: {', '.join(matched_keywords)}")
spam_count += emoji_count # Учитываем только спам-эмодзи
......@@ -304,6 +336,7 @@ async def cleanup_messages(user_data):
for message_id in user_data["message_ids"]:
try:
await bot.delete_message(chat_id=user_data["chat_id"], message_id=message_id)
logger.info(f"Сообщение с ID {message_id} успешно удалено из чата {user_data['chat_id']}.")
except Exception as e:
logger.error(f"Bot message deletion error. Error: {e}")
......@@ -312,6 +345,7 @@ async def cleanup_messages(user_data):
try:
if user_message:
await bot.delete_message(chat_id=user_data["chat_id"], message_id=user_message.message_id)
logger.info(f"Сообщение с ID {message_id} успешно удалено из чата {user_data['chat_id']}.")
except Exception as e:
logger.error(f"User message deletion error. Error: {e}")
except Exception as e:
......@@ -346,6 +380,7 @@ async def handle_message(message: Message):
if (message.photo or message.video or message.document) and text.strip() and is_spam(text):
try:
await message.delete()
logger.info(f"Multimedia message with ID {message.message_id} successfully deleted from group {message.chat.id}.")
return
except Exception as e:
logger.error(f"Error deleting a multimedia message. Error: {e}")
......@@ -356,6 +391,7 @@ async def handle_message(message: Message):
if button.url and any(spam_word in button.url.lower() for spam_word in SPAM_KEYWORDS):
try:
await message.delete()
logger.info(f"Message with links/buttons with ID {message.message_id} successfully deleted from group {message.chat.id}.")
return
except Exception as e:
logger.error(f"Error when deleting a message with a button. Error: {e}")
......@@ -364,6 +400,7 @@ async def handle_message(message: Message):
if is_spam(message.text):
try:
await message.delete()
logger.info(f"Message wiht spam {message.message_id} successfully deleted from group {message.chat.id}.")
return
except Exception as e:
logger.error(f"Error when trying to delete spam messages. Error: {e}")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment