Улучшена логика активации диалога с ИИ.
This commit is contained in:
parent
1672d62e47
commit
3ca84006f9
2 changed files with 49 additions and 36 deletions
|
|
@ -60,25 +60,29 @@ 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] = []
|
||||||
|
|
||||||
# Ответ на сообщение бота
|
|
||||||
if message.reply_to_message and message.reply_to_message.from_user.id == bot_user.id:
|
|
||||||
ai_message.text = message.text
|
|
||||||
else:
|
|
||||||
# Сообщение содержит @bot_username
|
|
||||||
bot_username_mention = '@' + bot_user.username
|
bot_username_mention = '@' + bot_user.username
|
||||||
if message.content_type == ContentType.TEXT and message.text.find(bot_username_mention) != -1:
|
if message.content_type == ContentType.TEXT and message.text.find(bot_username_mention) != -1:
|
||||||
|
# Сообщение содержит @bot_username
|
||||||
ai_message.text = message.text.replace(bot_username_mention, bot_user.first_name)
|
ai_message.text = message.text.replace(bot_username_mention, bot_user.first_name)
|
||||||
else:
|
|
||||||
return
|
|
||||||
|
|
||||||
if message.reply_to_message and message.reply_to_message.content_type == ContentType.TEXT:
|
if message.reply_to_message:
|
||||||
|
# Сообщение является ответом
|
||||||
|
if message.reply_to_message.content_type == ContentType.TEXT:
|
||||||
ai_fwd_messages = [
|
ai_fwd_messages = [
|
||||||
ai_agent.Message(user_name=await get_user_name_for_ai(message.reply_to_message.from_user),
|
ai_agent.Message(user_name=await get_user_name_for_ai(message.reply_to_message.from_user),
|
||||||
text=message.reply_to_message.text)]
|
text=message.reply_to_message.text)]
|
||||||
|
else:
|
||||||
if ai_message.text is None:
|
|
||||||
await message.reply(MESSAGE_NOT_TEXT)
|
await message.reply(MESSAGE_NOT_TEXT)
|
||||||
return
|
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:
|
||||||
|
await message.reply(MESSAGE_NOT_TEXT)
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
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)
|
||||||
chat_prompt = chat['ai_prompt']
|
chat_prompt = chat['ai_prompt']
|
||||||
|
|
|
||||||
|
|
@ -46,34 +46,43 @@ 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
|
||||||
|
pattern = r"\[club" + str(bot_user.id) + r"\|(.+)]"
|
||||||
|
bot_mentioned = False
|
||||||
|
if len(message.text) > 0 and message.text.find(bot_username_mention) != -1:
|
||||||
|
# Сообщение содержит @bot_username
|
||||||
|
ai_message.text = message.text.replace(bot_username_mention, bot_user.name)
|
||||||
|
bot_mentioned = True
|
||||||
|
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 message.reply_message and message.reply_message.from_id == -bot_user.id:
|
if len(message.text) > 0:
|
||||||
ai_message.text = message.text
|
ai_message.text = message.text
|
||||||
else:
|
else:
|
||||||
# Сообщение содержит @bot_username
|
await message.reply(MESSAGE_NOT_TEXT)
|
||||||
bot_username_mention = '@' + bot_user.screen_name
|
return
|
||||||
if message.text is not None and message.text.find(bot_username_mention) != -1:
|
|
||||||
ai_message.text = message.text.replace(bot_username_mention, bot_user.name)
|
|
||||||
else:
|
|
||||||
# Сообщение содержит [club<bot_id>|<some_name>]
|
|
||||||
pattern = r"\[club" + str(bot_user.id) + r"\|(.+)]"
|
|
||||||
if message.text is not None and re.search(pattern, message.text) is not None:
|
|
||||||
ai_message.text = re.sub(pattern, r'\1', message.text)
|
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
if message.reply_message and len(message.reply_message.text) > 0:
|
if bot_mentioned:
|
||||||
|
if message.reply_message:
|
||||||
|
if len(message.reply_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, message.reply_message.from_id),
|
ai_agent.Message(user_name=await get_user_name_for_ai(message.ctx_api, message.reply_message.from_id),
|
||||||
text=message.reply_message.text))
|
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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue