diff --git a/.bot.pid b/.bot.pid index df91274..22c10cc 100644 --- a/.bot.pid +++ b/.bot.pid @@ -1 +1 @@ -1014690 +1025432 diff --git a/src/core/chat_services.py b/src/core/chat_services.py index c8a74ee..6542517 100644 --- a/src/core/chat_services.py +++ b/src/core/chat_services.py @@ -1,6 +1,6 @@ """Сервисы для системы чата""" from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy import select, and_, or_, update, delete +from sqlalchemy import select, and_, or_, update, delete, text from sqlalchemy.orm import selectinload from typing import Optional, List, Dict, Any from datetime import datetime, timezone @@ -191,7 +191,11 @@ class ChatMessageService: telegram_message_id: int, user_id: Optional[int] = None ) -> Optional[ChatMessage]: - """Получить сообщение по telegram_message_id""" + """ + Получить сообщение по telegram_message_id + Ищет как по оригинальному telegram_message_id, так и в forwarded_message_ids + """ + # Сначала ищем по оригинальному telegram_message_id query = select(ChatMessage).where( ChatMessage.telegram_message_id == telegram_message_id ) @@ -199,6 +203,31 @@ class ChatMessageService: if user_id: query = query.where(ChatMessage.user_id == user_id) + result = await session.execute(query) + message = result.scalar_one_or_none() + + # Если нашли - возвращаем + if message: + return message + + # Если не нашли - ищем в forwarded_message_ids + # Загружаем все недавние сообщения и ищем в них + query = select(ChatMessage).where( + ChatMessage.forwarded_message_ids.isnot(None) + ).order_by(ChatMessage.created_at.desc()).limit(100) + + result = await session.execute(query) + messages = result.scalars().all() + + # Ищем сообщение, где telegram_message_id есть в forwarded_message_ids + for msg in messages: + if msg.forwarded_message_ids: + for user_tid, fwd_msg_id in msg.forwarded_message_ids.items(): + if fwd_msg_id == telegram_message_id: + return msg + + return None + result = await session.execute(query) return result.scalar_one_or_none()