From d53e39e85dac31877ae1f8142bb39d8bbeb6b9fc Mon Sep 17 00:00:00 2001 From: Furina-1013-create <189647097+Furina-1013-create@users.noreply.github.com> Date: Sat, 6 Sep 2025 22:58:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E5=85=B3?= =?UTF-8?q?=E4=BA=8E=E6=95=B0=E6=8D=AE=E5=BA=93=E5=9C=A8=E5=89=8D=E9=9D=A2?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=AD=A3=E7=A1=AE=E8=AF=86=E5=88=AB=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=BA=AB=E4=BB=BD=E7=9A=84=E6=97=B6=E5=80=99=E7=9A=84?= =?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=9B=9E=E9=80=80=E5=B9=B6=E6=94=B9=E8=BF=9B?= =?UTF-8?q?ada=E6=8F=92=E4=BB=B6=E7=9A=84=E5=85=B3=E4=BA=8E=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=A4=84=E7=90=86=E6=97=B6=E5=8F=AF=E8=83=BD=E4=BC=9A?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=9C=B0=E6=8A=8A@=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E4=B8=BA[=E8=A7=86=E9=A2=91]=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/person_info/person_info.py | 30 +++++++++++++++++ .../src/recv_handler/message_handler.py | 33 +++++++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/person_info/person_info.py b/src/person_info/person_info.py index dd5b60a20..2f89c43ff 100644 --- a/src/person_info/person_info.py +++ b/src/person_info/person_info.py @@ -150,6 +150,18 @@ class PersonInfoManager: # Ensure person_id is correctly set from the argument final_data["person_id"] = person_id + # 你们的英文注释是何意味? + + # 检查并修复关键字段为None的情况喵 + if final_data.get("user_id") is None: + logger.warning(f"user_id为None,使用'unknown'作为默认值 person_id={person_id}") + final_data["user_id"] = "unknown" + + if final_data.get("platform") is None: + logger.warning(f"platform为None,使用'unknown'作为默认值 person_id={person_id}") + final_data["platform"] = "unknown" + + # 这里的目的是为了防止在识别出错的情况下有一个最小回退,不只是针对@消息识别成视频后的报错问题 # Serialize JSON fields for key in JSON_SERIALIZED_FIELDS: @@ -199,6 +211,15 @@ class PersonInfoManager: # Ensure person_id is correctly set from the argument final_data["person_id"] = person_id + + # 检查并修复关键字段为None的情况 + if final_data.get("user_id") is None: + logger.warning(f"user_id为None,使用'unknown'作为默认值 person_id={person_id}") + final_data["user_id"] = "unknown" + + if final_data.get("platform") is None: + logger.warning(f"platform为None,使用'unknown'作为默认值 person_id={person_id}") + final_data["platform"] = "unknown" # Serialize JSON fields for key in JSON_SERIALIZED_FIELDS: @@ -295,6 +316,15 @@ class PersonInfoManager: creation_data["platform"] = data["platform"] if data and "user_id" in data: creation_data["user_id"] = data["user_id"] + + # 额外检查关键字段,如果为None则使用默认值 + if creation_data.get("user_id") is None: + logger.warning(f"创建用户时user_id为None,使用'unknown'作为默认值 person_id={person_id}") + creation_data["user_id"] = "unknown" + + if creation_data.get("platform") is None: + logger.warning(f"创建用户时platform为None,使用'unknown'作为默认值 person_id={person_id}") + creation_data["platform"] = "unknown" # 使用安全的创建方法,处理竞态条件 await self._safe_create_person_info(person_id, creation_data) diff --git a/src/plugins/built_in/napcat_adapter_plugin/src/recv_handler/message_handler.py b/src/plugins/built_in/napcat_adapter_plugin/src/recv_handler/message_handler.py index 7f60fe9da..5ab78a97a 100644 --- a/src/plugins/built_in/napcat_adapter_plugin/src/recv_handler/message_handler.py +++ b/src/plugins/built_in/napcat_adapter_plugin/src/recv_handler/message_handler.py @@ -156,6 +156,21 @@ class MessageHandler: Parameters: raw_message: dict: 原始消息 """ + + # 添加原始消息调试日志,特别关注message字段 + logger.debug(f"收到原始消息: message_type={raw_message.get('message_type')}, message_id={raw_message.get('message_id')}") + logger.debug(f"原始消息内容: {raw_message.get('message', [])}") + + # 检查是否包含@或video消息段 + message_segments = raw_message.get('message', []) + if message_segments: + for i, seg in enumerate(message_segments): + seg_type = seg.get('type') + if seg_type in ['at', 'video']: + logger.info(f"检测到 {seg_type.upper()} 消息段 [{i}]: {seg}") + elif seg_type not in ['text', 'face', 'image']: + logger.warning(f"检测到特殊消息段 [{i}]: type={seg_type}, data={seg.get('data', {})}") + message_type: str = raw_message.get("message_type") message_id: int = raw_message.get("message_id") # message_time: int = raw_message.get("time") @@ -354,6 +369,18 @@ class MessageHandler: for sub_message in real_message: sub_message: dict sub_message_type = sub_message.get("type") + + # 添加详细的消息类型调试信息 + logger.debug(f"处理消息段: type={sub_message_type}, data={sub_message.get('data', {})}") + + # 特别关注 at 和 video 消息的识别 + if sub_message_type == "at": + logger.debug(f"检测到@消息: {sub_message}") + elif sub_message_type == "video": + logger.debug(f"检测到VIDEO消息: {sub_message}") + elif sub_message_type not in ["text", "face", "image", "record"]: + logger.warning(f"检测到特殊消息类型: {sub_message_type}, 完整消息: {sub_message}") + match sub_message_type: case RealMessageType.text: ret_seg = await self.handle_text_message(sub_message) @@ -407,6 +434,7 @@ class MessageHandler: else: logger.warning("record处理失败或不支持") case RealMessageType.video: + logger.debug(f"开始处理VIDEO消息段: {sub_message}") ret_seg = await self.handle_video_message(sub_message) if ret_seg: await event_manager.trigger_event( @@ -414,8 +442,9 @@ class MessageHandler: ) seg_message.append(ret_seg) else: - logger.warning("video处理失败") + logger.warning(f"video处理失败,原始消息: {sub_message}") case RealMessageType.at: + logger.debug(f"开始处理AT消息段: {sub_message}") ret_seg = await self.handle_at_message( sub_message, raw_message.get("self_id"), @@ -427,7 +456,7 @@ class MessageHandler: ) seg_message.append(ret_seg) else: - logger.warning("at处理失败") + logger.warning(f"at处理失败,原始消息: {sub_message}") case RealMessageType.rps: ret_seg = await self.handle_rps_message(sub_message) if ret_seg: