Добавлена пересылка оригинального сообщения при ответе на сообщение бота, которое не является последним в контексте.
This commit is contained in:
parent
66fdbc3360
commit
6088606810
4 changed files with 40 additions and 12 deletions
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
26
database.py
26
database.py
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue