更准确地判断回复对象

pull/588/head
Bakadax 2025-03-27 09:49:11 +08:00
parent d07d09f558
commit 97fbf640a2
2 changed files with 15 additions and 7 deletions

View File

@ -26,7 +26,7 @@ from .chat_stream import chat_manager
from .message_sender import message_manager # 导入新的消息管理器
from .relationship_manager import relationship_manager
from .storage import MessageStorage
from .utils import is_mentioned_bot_in_message, get_recent_group_detailed_plain_text
from .utils import is_mentioned_bot_in_message, get_recent_group_detailed_plain_text, is_reply_bot_in_message
from .utils_image import image_path_to_base64
from .utils_user import get_user_nickname, get_user_cardname
from ..willing.willing_manager import willing_manager # 导入意愿管理器
@ -135,11 +135,16 @@ class ChatBot:
await self.storage.store_message(message, chat, topic[0] if topic else None)
# 处理提及
if (f"[CQ:at,qq={global_config.BOT_QQ}" in message_cq.raw_message) and global_config.at_bot_inevitable_reply:
reply_probability = 1
logger.info("被@回复概率设置为100%")
else:
is_mentioned = is_mentioned_bot_in_message(message)
is_reply = is_reply_bot_in_message(message_cq.reply_message)
if is_reply:
is_mentioned = True
else:
is_mentioned = is_mentioned_bot_in_message(message)
if is_mentioned and global_config.metioned_bot_inevitable_reply:
reply_probability = 1
logger.info("被提及回复概率设置为100%")

View File

@ -49,14 +49,9 @@ def is_mentioned_bot_in_message(message: MessageRecv) -> bool:
at_qq_list = re.findall(r"\[CQ:at,qq=([0-9]*),name", message.raw_message)
if int(at_qq_list[0] if len(at_qq_list) != 0 else "0") == global_config.BOT_QQ:
return True
message_id_list = re.findall(r"\[CQ:reply,id=([0-9]*)\]", message.raw_message)
message_id = int(message_id_list[0] if len(message_id_list) != 0 else "0")
result = db.messages.find_one({"message_id": message_id})
message_content = re.sub(r'\[CQ:reply,[\s\S]*?\]','', message.raw_message)
message_content = re.sub(r'\[CQ:cq,[\s\S]*?\]','', message_content)
for keyword in keywords:
if (f"[回复 {keyword} 的消息: " in message.processed_plain_text) and result == None:
return True
if keyword in message_content:
return True
for nickname in nicknames:
@ -549,3 +544,11 @@ def is_western_paragraph(paragraph):
"""检测是否为西文字符段落"""
return all(is_western_char(char) for char in paragraph if char.isalnum())
def is_reply_bot_in_message(reply_message) -> bool:
"""判断回复对象是否为bot"""
if reply_message != None:
reply_user_id = reply_message.sender.user_id
if reply_user_id == global_config.BOT_QQ:
logger.exception(f"is reply: True")
return True
return False