From 368517267eb9bb91f3f568b36a52c6113d18ceb2 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Wed, 3 Sep 2025 17:51:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20at=E5=92=8C=E5=9B=9E=E5=A4=8D=E5=8F=AA?= =?UTF-8?q?=E6=98=BE=E7=A4=BAqq=E5=8F=B7=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/recv_handler/message_handler.py | 8 +++++--- src/chat/message_receive/message.py | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/plugins/napcat_adapter_plugin/src/recv_handler/message_handler.py b/plugins/napcat_adapter_plugin/src/recv_handler/message_handler.py index 8ebd17cc6..9d58828ed 100644 --- a/plugins/napcat_adapter_plugin/src/recv_handler/message_handler.py +++ b/plugins/napcat_adapter_plugin/src/recv_handler/message_handler.py @@ -536,7 +536,8 @@ class MessageHandler: logger.debug("机器人被at") self_info: dict = await get_self_info(self.get_server_connection()) if self_info: - return Seg(type="text", data=f"@<{self_info.get('nickname')}:{self_info.get('user_id')}>") + # 返回包含昵称和用户ID的at格式,便于后续处理 + return Seg(type="at", data=f"{self_info.get('nickname')}:{self_info.get('user_id')}") else: return None else: @@ -544,7 +545,8 @@ class MessageHandler: self.get_server_connection(), group_id=group_id, user_id=qq_id ) if member_info: - return Seg(type="text", data=f"@<{member_info.get('nickname')}:{member_info.get('user_id')}>") + # 返回包含昵称和用户ID的at格式,便于后续处理 + return Seg(type="at", data=f"{member_info.get('nickname')}:{member_info.get('user_id')}") else: return None @@ -688,7 +690,7 @@ class MessageHandler: logger.warning("无法获取被引用的人的昵称,返回默认值") seg_message.append(Seg(type="text", data="[回复 未知用户:")) else: - seg_message.append(Seg(type="text", data=f"[回复<{sender_nickname}:{sender_id}>:")) + seg_message.append(Seg(type="text", data=f"[回复<{sender_nickname}>:")) seg_message += reply_message seg_message.append(Seg(type="text", data="],说:")) return seg_message diff --git a/src/chat/message_receive/message.py b/src/chat/message_receive/message.py index 933457149..930d1f5ea 100644 --- a/src/chat/message_receive/message.py +++ b/src/chat/message_receive/message.py @@ -149,6 +149,15 @@ class MessageRecv(Message): self.is_emoji = False self.is_video = False return segment.data # type: ignore + elif segment.type == "at": + self.is_picid = False + self.is_emoji = False + self.is_video = False + # 处理at消息,格式为"昵称:QQ号" + if segment.data and ":" in segment.data: + nickname, qq_id = segment.data.split(":", 1) + return f"@{nickname}" + return f"@{segment.data}" if segment.data else "@未知用户" elif segment.type == "image": # 如果是base64图片数据 if isinstance(segment.data, str): @@ -503,12 +512,16 @@ class MessageProcessBase(Message): return await get_voice_text(seg.data) return "[发了一段语音,网卡了加载不出来]" elif seg.type == "at": - return f"[@{seg.data}]" + # 处理at消息,格式为"昵称:QQ号" + if seg.data and ":" in seg.data: + nickname, qq_id = seg.data.split(":", 1) + return f"@{nickname}" + return f"@{seg.data}" if seg.data else "@未知用户" elif seg.type == "reply": if self.reply and hasattr(self.reply, "processed_plain_text"): # print(f"self.reply.processed_plain_text: {self.reply.processed_plain_text}") # print(f"reply: {self.reply}") - return f"[回复<{self.reply.message_info.user_info.user_nickname}:{self.reply.message_info.user_info.user_id}> 的消息:{self.reply.processed_plain_text}]" # type: ignore + return f"[回复<{self.reply.message_info.user_info.user_nickname}> 的消息:{self.reply.processed_plain_text}]" # type: ignore return None else: return f"[{seg.type}:{str(seg.data)}]"