From 6b41e61d7e1c48ef8a83707673fcb062e23068a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A5=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BE=D0=B2?= Date: Sun, 19 Oct 2025 13:16:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D0=BA=D1=83=D1=80?= =?UTF-8?q?=D0=B5=D0=BD=D1=86=D0=B8=D0=B8=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.py | 39 ++++++++++++++++++++++++++++++++++----- src/modules/auto_mute.py | 13 +++++++------ 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/main.py b/src/main.py index dd5c741..3273084 100644 --- a/src/main.py +++ b/src/main.py @@ -53,14 +53,16 @@ init_action_reporter(bot, int(os.getenv("ADMIN_CHAT_ID")), int(os.getenv("LOG_TH logger = logging.getLogger(__name__) # Middleware для автоматического обновления информации о пользователях в базе данных +# И проверки на нецензурную лексику (выполняется ДО всех обработчиков) class UserUpdateMiddleware(BaseMiddleware): - def __init__(self, db): + def __init__(self, db, bot): super().__init__() # message - все обычные сообщения # chat_member - события изменения статуса участников чата self.update_types = ['message', 'chat_member'] self.db = db - + self.bot = bot + # Обработчик, вызываемый ДО обработки сообщения основными хэндлерами async def pre_process(self, message, data): # Логируем ВСЕ входящие сообщения для отладки @@ -73,7 +75,11 @@ class UserUpdateMiddleware(BaseMiddleware): nickname=message.from_user.first_name, tag=message.from_user.username ) - + + # ВАЖНО: Проверяем на мат ДО передачи другим обработчикам + # Это позволяет auto_mute работать независимо от karma_tracker + await self._check_profanity(message) + # Обработка новых участников группы elif message.content_type == 'new_chat_members': for new_member in message.new_chat_members: @@ -83,13 +89,36 @@ class UserUpdateMiddleware(BaseMiddleware): tag=new_member.username ) return data - + + # Проверка на нецензурную лексику (вызывается в middleware) + async def _check_profanity(self, message): + """Проверяет сообщение на мат и применяет мут если нужно""" + from bad_words import contains_bad_word + + # Только для групповых чатов и не команды + if message.chat.type not in ['group', 'supergroup']: + return + + if not message.text or message.text.startswith('/'): + return + + # Проверяем наличие мата + if not contains_bad_word(message.text): + return + + # Импортируем функцию проверки из auto_mute (если модуль загружен) + try: + from modules.auto_mute import check_message_for_profanity + await check_message_for_profanity(self.bot, message) + except ImportError: + logger.warning("Модуль auto_mute не загружен, пропускаем проверку мата") + # Обработчик, вызываемый ПОСЛЕ обработки сообщения основными хэндлерами async def post_process(self, message, data, exception): pass # Регистрируем middleware -bot.setup_middleware(UserUpdateMiddleware(db)) +bot.setup_middleware(UserUpdateMiddleware(db, bot)) # Загружает все модули из директории /modules async def load_modules(): diff --git a/src/modules/auto_mute.py b/src/modules/auto_mute.py index 4fda437..ce71a02 100644 --- a/src/modules/auto_mute.py +++ b/src/modules/auto_mute.py @@ -202,11 +202,12 @@ async def check_message_for_profanity(bot: AsyncTeleBot, message: Message): def register_handlers(bot: AsyncTeleBot): """ Регистрирует обработчики для автоматического мута. + + ПРИМЕЧАНИЕ: Фактическая проверка мата происходит в middleware (main.py), + а не в обработчике. Это позволяет проверять все сообщения ДО того, как + они попадут к другим обработчикам (например, karma_tracker). + + Этот метод оставлен для совместимости с архитектурой модулей. """ - # Обработчик всех текстовых сообщений (кроме команд) - @bot.message_handler(func=lambda message: message.text and not message.text.startswith('/') and message.chat.type in ['group', 'supergroup']) - async def handle_text_message(message: Message): - await check_message_for_profanity(bot, message) - - logger.info("Модуль автоматического мута успешно загружен") \ No newline at end of file + logger.info("Модуль автоматического мута успешно загружен (проверка в middleware)") \ No newline at end of file