From 1619e82df11c7f152aa97b29bd5321a8e1761f77 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 14:32:55 +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=B0=D0=BD=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=20=D1=81=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=83=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BE=20=D0=BA=D0=B0=D1=80=D0=BC=D0=B5=20=D0=B2?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.py | 6 ++++-- src/modules/0_karma_tracker.py | 20 +++++++++++--------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main.py b/src/main.py index 941e21a..8fa75ed 100644 --- a/src/main.py +++ b/src/main.py @@ -81,8 +81,10 @@ class UserUpdateMiddleware(BaseMiddleware): try: karma_module = importlib.import_module("modules.0_karma_tracker") if message.chat.type in ['group', 'supergroup']: - karma_module._cache_message(message.chat.id, message.message_id, message.from_user.id) - logger.info(f"[CACHE] Сообщение {message.message_id} от {message.from_user.id} добавлено в кэш, chat_id={message.chat.id}") + # Передаём message_thread_id для правильной отправки уведомлений в топики + thread_id = getattr(message, 'message_thread_id', None) + karma_module._cache_message(message.chat.id, message.message_id, message.from_user.id, thread_id) + logger.info(f"[CACHE] Сообщение {message.message_id} от {message.from_user.id} добавлено в кэш, chat_id={message.chat.id}, thread_id={thread_id}") except Exception as e: logger.error(f"Ошибка кэширования сообщения: {e}", exc_info=True) diff --git a/src/modules/0_karma_tracker.py b/src/modules/0_karma_tracker.py index ba33b94..c289039 100644 --- a/src/modules/0_karma_tracker.py +++ b/src/modules/0_karma_tracker.py @@ -11,22 +11,22 @@ from config import THANK_COOLDOWN logger = logging.getLogger(__name__) -# Кэш для хранения message_id -> user_id (последние 1000 сообщений) +# Кэш для хранения message_id -> (user_id, message_thread_id) (последние 1000 сообщений) # Используем OrderedDict для автоматического удаления старых записей _message_cache = OrderedDict() _MAX_CACHE_SIZE = 1000 -def _cache_message(chat_id: int, message_id: int, user_id: int): +def _cache_message(chat_id: int, message_id: int, user_id: int, message_thread_id: int = None): """Добавляет сообщение в кэш""" key = f"{chat_id}:{message_id}" - _message_cache[key] = user_id + _message_cache[key] = (user_id, message_thread_id) # Удаляем старые записи, если кэш переполнен if len(_message_cache) > _MAX_CACHE_SIZE: _message_cache.popitem(last=False) -def _get_cached_user(chat_id: int, message_id: int) -> int: - """Получает user_id из кэша""" +def _get_cached_message(chat_id: int, message_id: int): + """Получает (user_id, message_thread_id) из кэша""" key = f"{chat_id}:{message_id}" return _message_cache.get(key) @@ -55,12 +55,14 @@ def register_handlers(bot: AsyncTeleBot): from_user = reaction.user chat_id = reaction.chat.id - # Получаем автора сообщения из кэша - to_user_id = _get_cached_user(chat_id, reaction.message_id) - if not to_user_id: + # Получаем автора сообщения и топик из кэша + cached_data = _get_cached_message(chat_id, reaction.message_id) + if not cached_data: logger.warning(f"[KARMA] Сообщение {reaction.message_id} не найдено в кэше") return + to_user_id, message_thread_id = cached_data + # Защита от самооценки if from_user.id == to_user_id: logger.info(f"Пользователь {from_user.id} попытался поставить реакцию на своё сообщение") @@ -147,7 +149,7 @@ def register_handlers(bot: AsyncTeleBot): sent_message = await bot.send_message( chat_id, response, - message_thread_id=getattr(reaction, 'message_thread_id', None) + message_thread_id=message_thread_id ) logger.info(f"[KARMA] Уведомление отправлено успешно, message_id={sent_message.message_id}")