Добавлена пересылка оригинального сообщения при ответе на сообщение бота, которое не является последним в контексте.

This commit is contained in:
Kirill Kirilenko 2026-01-25 00:02:15 +03:00
parent 66fdbc3360
commit 6088606810
4 changed files with 40 additions and 12 deletions

View file

@ -109,6 +109,9 @@ class AiAgent:
print(f"Ошибка выполнения запроса к ИИ: {e}")
return f"Извините, при обработке запроса произошла ошибка.", False
def get_last_assistant_message_id(self, chat_id: int):
return self.db.context_get_last_assistant_message_id(chat_id)
def set_last_response_id(self, chat_id: int, message_id: int):
self.db.context_set_last_message_id(chat_id, message_id)

View file

@ -118,25 +118,27 @@ class BasicDatabase:
self.cursor.execute("SELECT COUNT(*) FROM contexts WHERE chat_id = ?", chat_id)
return self.cursor.fetchval()
def context_get_last_assistant_message_id(self, chat_id: int) -> Optional[int]:
return self.cursor.execute("""
SELECT message_id FROM contexts
WHERE chat_id = ? AND role = 'assistant' AND message_id IS NOT NULL
ORDER BY message_id DESC
LIMIT 1
""", chat_id).fetchval()
def context_add_message(self, chat_id: int, role: str, content: str, message_id: Optional[int], max_messages: int):
self._context_trim(chat_id, max_messages)
if message_id is not None:
self.cursor.execute("""
INSERT INTO contexts (chat_id, message_id, role, content)
VALUES (?, ?, ?, ?)
""", chat_id, message_id, role, content)
self.cursor.execute("INSERT INTO contexts (chat_id, message_id, role, content) VALUES (?, ?, ?, ?)",
chat_id, message_id, role, content)
else:
self.cursor.execute("""
INSERT INTO contexts (chat_id, role, content)
VALUES (?, ?, ?)
""", chat_id, role, content)
self.cursor.execute("INSERT INTO contexts (chat_id, role, content) VALUES (?, ?, ?)",
chat_id, role, content)
def context_set_last_message_id(self, chat_id: int, message_id: int):
self.cursor.execute("""
UPDATE contexts SET message_id = ?
WHERE chat_id = ? AND message_id IS NULL
""", message_id, chat_id)
self.cursor.execute("UPDATE contexts SET message_id = ? WHERE chat_id = ? AND message_id IS NULL",
message_id, chat_id)
def _context_trim(self, chat_id: int, max_messages: int):
current_count = self.context_get_count(chat_id)

View file

@ -81,6 +81,17 @@ async def any_message_handler(message: Message):
else:
await message.reply(MESSAGE_NOT_TEXT)
return
last_id = ai_agent.agent.get_last_assistant_message_id(chat_id)
if message.reply_to_message.message_id != last_id:
# Оригинального сообщения нет в контексте, или оно не последнее
if message.content_type == ContentType.TEXT:
ai_fwd_messages = [
ai_agent.Message(user_name=await get_user_name_for_ai(message.reply_to_message.from_user),
text=message.reply_to_message.text)]
else:
await message.reply(MESSAGE_NOT_TEXT)
return
else:
return

View file

@ -64,6 +64,18 @@ async def any_message_handler(message: Message):
else:
await message.reply(MESSAGE_NOT_TEXT)
return
last_id = ai_agent.agent.get_last_assistant_message_id(chat_id)
if message.reply_message.message_id != last_id:
# Оригинального сообщения нет в контексте, или оно не последнее
if len(message.reply_message.text) > 0:
ai_fwd_messages = [
ai_agent.Message(user_name=await get_user_name_for_ai(message.ctx_api,
message.reply_message.from_id),
text=message.reply_message.text)]
else:
await message.reply(MESSAGE_NOT_TEXT)
return
else:
return