From dab0755e12bf5ca5512af3aeaa7b7ee670226651 Mon Sep 17 00:00:00 2001 From: Maple127667 <98679702+Maple127667@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:17:20 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=A4=9A=E5=B1=82=E8=81=8A=E5=A4=A9?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E8=BD=AC=E5=8F=91=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持解析多层聊天记录,不(也不应该)支持聊天记录内图片解析 --- src/plugins/chat/bot.py | 56 ++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py index e39d29f42..d5c388e49 100644 --- a/src/plugins/chat/bot.py +++ b/src/plugins/chat/bot.py @@ -425,22 +425,11 @@ class ChatBot: # 提取发送者昵称 nickname = node["sender"].get("nickname", "未知用户") - # 处理消息内容 - message_content = [] - for seg in node["message"]: - if seg["type"] == "text": - message_content.append(seg["data"]["text"]) - elif seg["type"] == "image": - message_content.append("[图片]") - elif seg["type"] =="face": - message_content.append("[表情]") - elif seg["type"] == "at": - message_content.append(f"@{seg['data'].get('qq', '未知用户')}") - else: - message_content.append(f"[{seg['type']}]") + # 递归处理消息内容 + message_content = await self.process_message_segments(node["message"],layer=0) # 拼接为【昵称】+ 内容 - processed_messages.append(f"【{nickname}】{''.join(message_content)}") + processed_messages.append(f"【{nickname}】{message_content}") # 组合所有消息 combined_message = "\n".join(processed_messages) @@ -459,7 +448,7 @@ class ChatBot: if isinstance(event, GroupMessageEvent): group_info = GroupInfo( group_id=event.group_id, - group_name= None, + group_name=None, platform="qq" ) @@ -476,5 +465,42 @@ class ChatBot: # 进入标准消息处理流程 await self.message_process(message_cq) + async def process_message_segments(self, segments: list,layer:int) -> str: + """递归处理消息段""" + parts = [] + for seg in segments: + part = await self.process_segment(seg,layer+1) + parts.append(part) + return "".join(parts) + + async def process_segment(self, seg: dict , layer:int) -> str: + """处理单个消息段""" + seg_type = seg["type"] + if layer > 3 : + #防止有那种100层转发消息炸飞麦麦 + return "【转发消息】" + if seg_type == "text": + return seg["data"]["text"] + elif seg_type == "image": + return "[图片]" + elif seg_type == "face": + return "[表情]" + elif seg_type == "at": + return f"@{seg['data'].get('qq', '未知用户')}" + elif seg_type == "forward": + # 递归处理嵌套的合并转发消息 + nested_nodes = seg["data"].get("content", []) + nested_messages = [] + nested_messages.append(f"合并转发消息内容:") + for node in nested_nodes: + nickname = node["sender"].get("nickname", "未知用户") + content = await self.process_message_segments(node["message"],layer=layer) + # nested_messages.append('-' * layer) + nested_messages.append(f"{'--' * layer}【{nickname}】{content}") + # nested_messages.append(f"{'--' * layer}合并转发第【{layer}】层结束") + return "\n".join(nested_messages) + else: + return f"[{seg_type}]" + # 创建全局ChatBot实例 chat_bot = ChatBot() From e54f81cf0033692a525e57b426dd2b36333c0871 Mon Sep 17 00:00:00 2001 From: Maple127667 <98679702+Maple127667@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:26:13 +0800 Subject: [PATCH 2/3] bug-fix --- src/plugins/chat/bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py index d5c388e49..e76d7eafa 100644 --- a/src/plugins/chat/bot.py +++ b/src/plugins/chat/bot.py @@ -491,7 +491,7 @@ class ChatBot: # 递归处理嵌套的合并转发消息 nested_nodes = seg["data"].get("content", []) nested_messages = [] - nested_messages.append(f"合并转发消息内容:") + nested_messages.append("合并转发消息内容:") for node in nested_nodes: nickname = node["sender"].get("nickname", "未知用户") content = await self.process_message_segments(node["message"],layer=layer) From 255552525e3bc759e51bb21db254c6d480e4f67f Mon Sep 17 00:00:00 2001 From: Maple127667 <98679702+Maple127667@users.noreply.github.com> Date: Thu, 20 Mar 2025 22:46:21 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=B4=A7=E6=80=A5=E4=BF=AE=E5=A4=8D-?= =?UTF-8?q?=E5=AF=B9=E4=BA=8E=E8=BD=AC=E5=8F=91=E6=B6=88=E6=81=AF=E7=9A=84?= =?UTF-8?q?=E9=BB=91=E7=99=BD=E5=90=8D=E5=8D=95=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/chat/bot.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py index e76d7eafa..d30940f97 100644 --- a/src/plugins/chat/bot.py +++ b/src/plugins/chat/bot.py @@ -415,6 +415,16 @@ class ChatBot: async def handle_forward_message(self, event: MessageEvent, bot: Bot) -> None: """专用于处理合并转发的消息处理器""" + # 用户屏蔽,不区分私聊/群聊 + if event.user_id in global_config.ban_user_id: + return + + if isinstance(event, GroupMessageEvent): + if event.group_id: + if event.group_id not in global_config.talk_allowed_groups: + return + + # 获取合并转发消息的详细信息 forward_info = await bot.get_forward_msg(message_id=event.message_id) messages = forward_info["messages"]