diff --git a/src/chat/message_receive/message.py b/src/chat/message_receive/message.py index 8753db41d..98b12d694 100644 --- a/src/chat/message_receive/message.py +++ b/src/chat/message_receive/message.py @@ -590,7 +590,7 @@ class MessageProcessBase(Message): 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.processed_plain_text}]" # type: ignore + 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 None else: return f"[{seg.type}:{seg.data!s}]" diff --git a/src/plugin_system/apis/send_api.py b/src/plugin_system/apis/send_api.py index feb18848b..3e52cf4c5 100644 --- a/src/plugin_system/apis/send_api.py +++ b/src/plugin_system/apis/send_api.py @@ -244,12 +244,34 @@ async def _send_to_target( message_segment = Seg(type=message_type, data=content) # type: ignore # 处理回复消息 - if reply_to_message: + if reply_to: + # 优先使用 reply_to 字符串构建 anchor_message + # 解析 "发送者(ID)" 格式 + import re + match = re.match(r"(.+)\((\d+)\)", reply_to) + if match: + sender_name, sender_id = match.groups() + temp_message_dict = { + "user_nickname": sender_name, + "user_id": sender_id, + "chat_info_platform": target_stream.platform, + "message_id": "temp_reply_id", # 临时ID + "time": time.time() + } + anchor_message = message_dict_to_message_recv(message_dict=temp_message_dict) + else: + anchor_message = None + reply_to_platform_id = f"{target_stream.platform}:{sender_id}" if anchor_message else None + + elif reply_to_message: anchor_message = message_dict_to_message_recv(message_dict=reply_to_message) - anchor_message.update_chat_stream(target_stream) - reply_to_platform_id = ( - f"{anchor_message.message_info.platform}:{anchor_message.message_info.user_info.user_id}" - ) + if anchor_message: + anchor_message.update_chat_stream(target_stream) + reply_to_platform_id = ( + f"{anchor_message.message_info.platform}:{anchor_message.message_info.user_info.user_id}" + ) + else: + reply_to_platform_id = None else: anchor_message = None reply_to_platform_id = None 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 6992dbc8b..45c5f4cf1 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 @@ -719,12 +719,16 @@ class MessageHandler: reply_message = [Seg(type="text", data="(获取发言内容失败)")] sender_info: dict = message_detail.get("sender") sender_nickname: str = sender_info.get("nickname") + sender_id = sender_info.get("user_id") seg_message: List[Seg] = [] if not sender_nickname: logger.warning("无法获取被引用的人的昵称,返回默认值") seg_message.append(Seg(type="text", data="[回复 未知用户:")) else: - seg_message.append(Seg(type="text", data=f"[回复<{sender_nickname}>:")) + if sender_id: + seg_message.append(Seg(type="text", data=f"[回复<{sender_nickname}({sender_id})>:")) + else: + seg_message.append(Seg(type="text", data=f"[回复<{sender_nickname}>:")) seg_message += reply_message seg_message.append(Seg(type="text", data="],说:")) return seg_message