Улучшена логика активации диалога с ИИ.

This commit is contained in:
Kirill Kirilenko 2026-01-20 18:28:49 +03:00
parent 1672d62e47
commit 3ca84006f9
2 changed files with 49 additions and 36 deletions

View file

@ -60,24 +60,28 @@ async def any_message_handler(message: Message):
ai_message = ai_agent.Message() ai_message = ai_agent.Message()
ai_fwd_messages: list[ai_agent.Message] = [] ai_fwd_messages: list[ai_agent.Message] = []
# Ответ на сообщение бота bot_username_mention = '@' + bot_user.username
if message.reply_to_message and message.reply_to_message.from_user.id == bot_user.id: if message.content_type == ContentType.TEXT and message.text.find(bot_username_mention) != -1:
ai_message.text = message.text
else:
# Сообщение содержит @bot_username # Сообщение содержит @bot_username
bot_username_mention = '@' + bot_user.username ai_message.text = message.text.replace(bot_username_mention, bot_user.first_name)
if message.content_type == ContentType.TEXT and message.text.find(bot_username_mention) != -1:
ai_message.text = message.text.replace(bot_username_mention, bot_user.first_name) if message.reply_to_message:
# Сообщение является ответом
if message.reply_to_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
elif message.reply_to_message and message.reply_to_message.from_user.id == bot_user.id:
# Ответ на сообщение бота
if message.content_type == ContentType.TEXT:
ai_message.text = message.text
else: else:
await message.reply(MESSAGE_NOT_TEXT)
return return
else:
if message.reply_to_message and message.reply_to_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)]
if ai_message.text is None:
await message.reply(MESSAGE_NOT_TEXT)
return return
ai_message.user_name = await get_user_name_for_ai(message.from_user) ai_message.user_name = await get_user_name_for_ai(message.from_user)

View file

@ -46,36 +46,45 @@ async def any_message_handler(message: Message):
ai_message = ai_agent.Message() ai_message = ai_agent.Message()
ai_fwd_messages: list[ai_agent.Message] = [] ai_fwd_messages: list[ai_agent.Message] = []
# Ответ на сообщение бота bot_username_mention = '@' + bot_user.screen_name
if message.reply_message and message.reply_message.from_id == -bot_user.id: pattern = r"\[club" + str(bot_user.id) + r"\|(.+)]"
ai_message.text = message.text bot_mentioned = False
else: if len(message.text) > 0 and message.text.find(bot_username_mention) != -1:
# Сообщение содержит @bot_username # Сообщение содержит @bot_username
bot_username_mention = '@' + bot_user.screen_name ai_message.text = message.text.replace(bot_username_mention, bot_user.name)
if message.text is not None and message.text.find(bot_username_mention) != -1: bot_mentioned = True
ai_message.text = message.text.replace(bot_username_mention, bot_user.name) elif len(message.text) > 0 and re.search(pattern, message.text) is not None:
# Сообщение содержит [club<bot_id>|<some_name>]
ai_message.text = re.sub(pattern, r'\1', message.text)
bot_mentioned = True
elif message.reply_message and message.reply_message.from_id == -bot_user.id:
# Ответ на сообщение бота
if len(message.text) > 0:
ai_message.text = message.text
else: else:
# Сообщение содержит [club<bot_id>|<some_name>] await message.reply(MESSAGE_NOT_TEXT)
pattern = r"\[club" + str(bot_user.id) + r"\|(.+)]" return
if message.text is not None and re.search(pattern, message.text) is not None: else:
ai_message.text = re.sub(pattern, r'\1', message.text) return
else:
return
if message.reply_message and len(message.reply_message.text) > 0: if bot_mentioned:
ai_fwd_messages.append( if message.reply_message:
ai_agent.Message(user_name=await get_user_name_for_ai(message.ctx_api, message.reply_message.from_id), if len(message.reply_message.text) > 0:
text=message.reply_message.text)) ai_fwd_messages.append(
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: else:
for fwd_message in message.fwd_messages: for fwd_message in message.fwd_messages:
if len(fwd_message.text) > 0: if len(fwd_message.text) > 0:
ai_fwd_messages.append( ai_fwd_messages.append(
ai_agent.Message(user_name=await get_user_name_for_ai(message.ctx_api, fwd_message.from_id), ai_agent.Message(user_name=await get_user_name_for_ai(message.ctx_api, fwd_message.from_id),
text=fwd_message.text)) text=fwd_message.text))
else:
if len(ai_message.text) == 0: await message.reply(MESSAGE_NOT_TEXT)
await message.reply(MESSAGE_NOT_TEXT) return
return
ai_message.user_name = await get_user_name_for_ai(message.ctx_api, message.from_id) ai_message.user_name = await get_user_name_for_ai(message.ctx_api, message.from_id)
chat_prompt = chat['ai_prompt'] chat_prompt = chat['ai_prompt']