Исправление канала с отправкой уведомления о карме в правильный канал

This commit is contained in:
2025-10-19 14:32:55 +03:00
parent 0ee7cb3bd4
commit 1619e82df1
2 changed files with 15 additions and 11 deletions

View File

@@ -81,8 +81,10 @@ class UserUpdateMiddleware(BaseMiddleware):
try: try:
karma_module = importlib.import_module("modules.0_karma_tracker") karma_module = importlib.import_module("modules.0_karma_tracker")
if message.chat.type in ['group', 'supergroup']: if message.chat.type in ['group', 'supergroup']:
karma_module._cache_message(message.chat.id, message.message_id, message.from_user.id) # Передаём message_thread_id для правильной отправки уведомлений в топики
logger.info(f"[CACHE] Сообщение {message.message_id} от {message.from_user.id} добавлено в кэш, chat_id={message.chat.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: except Exception as e:
logger.error(f"Ошибка кэширования сообщения: {e}", exc_info=True) logger.error(f"Ошибка кэширования сообщения: {e}", exc_info=True)

View File

@@ -11,22 +11,22 @@ from config import THANK_COOLDOWN
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Кэш для хранения message_id -> user_id (последние 1000 сообщений) # Кэш для хранения message_id -> (user_id, message_thread_id) (последние 1000 сообщений)
# Используем OrderedDict для автоматического удаления старых записей # Используем OrderedDict для автоматического удаления старых записей
_message_cache = OrderedDict() _message_cache = OrderedDict()
_MAX_CACHE_SIZE = 1000 _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}" 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: if len(_message_cache) > _MAX_CACHE_SIZE:
_message_cache.popitem(last=False) _message_cache.popitem(last=False)
def _get_cached_user(chat_id: int, message_id: int) -> int: def _get_cached_message(chat_id: int, message_id: int):
"""Получает user_id из кэша""" """Получает (user_id, message_thread_id) из кэша"""
key = f"{chat_id}:{message_id}" key = f"{chat_id}:{message_id}"
return _message_cache.get(key) return _message_cache.get(key)
@@ -55,12 +55,14 @@ def register_handlers(bot: AsyncTeleBot):
from_user = reaction.user from_user = reaction.user
chat_id = reaction.chat.id chat_id = reaction.chat.id
# Получаем автора сообщения из кэша # Получаем автора сообщения и топик из кэша
to_user_id = _get_cached_user(chat_id, reaction.message_id) cached_data = _get_cached_message(chat_id, reaction.message_id)
if not to_user_id: if not cached_data:
logger.warning(f"[KARMA] Сообщение {reaction.message_id} не найдено в кэше") logger.warning(f"[KARMA] Сообщение {reaction.message_id} не найдено в кэше")
return return
to_user_id, message_thread_id = cached_data
# Защита от самооценки # Защита от самооценки
if from_user.id == to_user_id: if from_user.id == to_user_id:
logger.info(f"Пользователь {from_user.id} попытался поставить реакцию на своё сообщение") logger.info(f"Пользователь {from_user.id} попытался поставить реакцию на своё сообщение")
@@ -147,7 +149,7 @@ def register_handlers(bot: AsyncTeleBot):
sent_message = await bot.send_message( sent_message = await bot.send_message(
chat_id, chat_id,
response, 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}") logger.info(f"[KARMA] Уведомление отправлено успешно, message_id={sent_message.message_id}")