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