forked from Muzifs/LGBot
Исправление канала с отправкой уведомления о карме в правильный канал
This commit is contained in:
@@ -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)
|
||||
|
||||
|
@@ -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}")
|
||||
|
||||
|
Reference in New Issue
Block a user