From a892642b7d37e3a9ebf4d21ce3820e5428430337 Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Thu, 23 Oct 2025 01:08:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=E4=BF=AE=E5=A4=8D=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=A4=84=E7=90=86=E4=B8=AD=E7=9A=84=E6=BD=9C=E5=9C=A8?= =?UTF-8?q?=E7=A9=BA=E6=8C=87=E9=92=88=E5=92=8C=E7=B1=BB=E5=9E=8B=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为多个关键步骤增加了健壮性检查,以防止在处理消息时因意外的空值或类型不匹配而导致程序崩溃。 主要修复包括: - 在记录消息日志前,检查 `user_info` 是否存在。 - 在判断事件是否中断前,检查事件处理结果 `result` 是否为 None。 - 在获取消息时间戳前,使用 `hasattr` 确认 `time` 属性的存在。 - 在检查群组静默状态时,将 `group_id` 转换为字符串以匹配配置列表。 --- src/chat/message_receive/bot.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/chat/message_receive/bot.py b/src/chat/message_receive/bot.py index afd4604fb..b91790f18 100644 --- a/src/chat/message_receive/bot.py +++ b/src/chat/message_receive/bot.py @@ -12,7 +12,7 @@ from src.chat.message_manager import message_manager from src.chat.message_receive.chat_stream import ChatStream, get_chat_manager from src.chat.message_receive.message import MessageRecv, MessageRecvS4U from src.chat.message_receive.storage import MessageStorage -from src.chat.utils.prompt import Prompt, global_prompt_manager +from src.chat.utils.prompt import Prompt, global_prompt_manager, create_prompt_async from src.chat.utils.utils import is_mentioned_bot_in_message from src.common.logger import get_logger from src.config.config import global_config @@ -465,9 +465,10 @@ class ChatBot: # 在这里打印[所见]日志,确保在所有处理和过滤之前记录 chat_name = chat.group_info.group_name if chat.group_info else "私聊" - logger.info( - f"[{chat_name}]{message.message_info.user_info.user_nickname}:{message.processed_plain_text}\u001b[0m" - ) + if message.message_info.user_info: + logger.info( + f"[{chat_name}]{message.message_info.user_info.user_nickname}:{message.processed_plain_text}\u001b[0m" + ) # 处理notice消息 notice_handled = await self.handle_notice_message(message) @@ -598,7 +599,7 @@ class ChatBot: return result = await event_manager.trigger_event(EventType.ON_MESSAGE, permission_group="SYSTEM", message=message) - if not result.all_continue_process(): + if result and not result.all_continue_process(): raise UserWarning(f"插件{result.get_summary().get('stopped_handlers', '')}于消息到达时取消了消息处理") # TODO:暂不可用 @@ -609,13 +610,14 @@ class ChatBot: async with global_prompt_manager.async_message_scope(template_group_name): if isinstance(template_items, dict): for k in template_items.keys(): - await Prompt.create_async(template_items[k], k) + await create_prompt_async(template_items[k], k) logger.debug(f"注册{template_items[k]},{k}") else: template_group_name = None async def preprocess(): from src.common.data_models.database_data_model import DatabaseMessages + import time message_info = message.message_info msg_user_info = getattr(message_info, "user_info", None) @@ -623,7 +625,7 @@ class ChatBot: group_info = getattr(message.chat_stream, "group_info", None) message_id = message_info.message_id or "" - message_time = message_info.time if message_info.time is not None else time.time() + message_time = message_info.time if hasattr(message_info, "time") and message_info.time is not None else time.time() is_mentioned = None if isinstance(message.is_mentioned, bool): is_mentioned = message.is_mentioned @@ -700,7 +702,7 @@ class ChatBot: try: # 在将消息添加到管理器之前进行最终的静默检查 should_process_in_manager = True - if group_info and group_info.group_id in global_config.message_receive.mute_group_list: + if group_info and str(group_info.group_id) in global_config.message_receive.mute_group_list: if not message.is_mentioned: logger.debug(f"群组 {group_info.group_id} 在静默列表中,且消息不是@或回复,跳过消息管理器处理") should_process_in_manager = False