From e0d766611b20588a1dbf7ec8527af4b5fb5d86f4 Mon Sep 17 00:00:00 2001 From: Maple127667 <98679702+Maple127667@users.noreply.github.com> Date: Wed, 19 Mar 2025 21:21:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=90=88=E5=B9=B6=E8=BD=AC=E5=8F=91?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加了合并转发消息的处理,目前可以处理简单的合并转发,暂不支持嵌套转发,不支持转发内图片识别(我觉得转发内图片不该识别 --- src/plugins/chat/__init__.py | 7 ++-- src/plugins/chat/bot.py | 63 ++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/plugins/chat/__init__.py b/src/plugins/chat/__init__.py index 7a4f4c6f6..a54f781a0 100644 --- a/src/plugins/chat/__init__.py +++ b/src/plugins/chat/__init__.py @@ -92,8 +92,11 @@ async def _(bot: Bot): @msg_in.handle() async def _(bot: Bot, event: MessageEvent, state: T_State): - await chat_bot.handle_message(event, bot) - + #处理合并转发消息 + if "forward" in event.message: + await chat_bot.handle_forward_message(event , bot) + else : + await chat_bot.handle_message(event, bot) @notice_matcher.handle() async def _(bot: Bot, event: NoticeEvent, state: T_State): diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py index 04d0dd27f..0e4553c5f 100644 --- a/src/plugins/chat/bot.py +++ b/src/plugins/chat/bot.py @@ -411,6 +411,69 @@ class ChatBot: await self.message_process(message_cq) + async def handle_forward_message(self, event: MessageEvent, bot: Bot) -> None: + """专用于处理合并转发的消息处理器""" + # 获取合并转发消息的详细信息 + forward_info = await bot.get_forward_msg(message_id=event.message_id) + messages = forward_info["messages"] + + # 构建合并转发消息的文本表示 + processed_messages = [] + for node in messages: + # 提取发送者昵称 + 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']}]") + + # 拼接为【昵称】+ 内容 + processed_messages.append(f"【{nickname}】{''.join(message_content)}") + + # 组合所有消息 + combined_message = "\n".join(processed_messages) + combined_message = f"合并转发消息内容:\n{combined_message}" + + # 构建用户信息(使用转发消息的发送者) + user_info = UserInfo( + user_id=event.user_id, + user_nickname=event.sender.nickname, + user_cardname=event.sender.card if hasattr(event.sender, "card") else None, + platform="qq", + ) + + # 构建群聊信息(如果是群聊) + group_info = None + if isinstance(event, GroupMessageEvent): + group_info = GroupInfo( + group_id=event.group_id, + group_name= None, + platform="qq" + ) + + # 创建消息对象 + message_cq = MessageRecvCQ( + message_id=event.message_id, + user_info=user_info, + raw_message=combined_message, + group_info=group_info, + reply_message=event.reply, + platform="qq", + ) + + # 进入标准消息处理流程 + await self.message_process(message_cq) + # 创建全局ChatBot实例 chat_bot = ChatBot() From 0b0bfdb48dacd36d56844756af6f89595b79a325 Mon Sep 17 00:00:00 2001 From: Maple127667 <98679702+Maple127667@users.noreply.github.com> Date: Wed, 19 Mar 2025 21:25:53 +0800 Subject: [PATCH 2/2] bug-fix --- src/plugins/chat/bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py index 0e4553c5f..e39d29f42 100644 --- a/src/plugins/chat/bot.py +++ b/src/plugins/chat/bot.py @@ -5,6 +5,7 @@ from nonebot.adapters.onebot.v11 import ( Bot, MessageEvent, PrivateMessageEvent, + GroupMessageEvent, NoticeEvent, PokeNotifyEvent, GroupRecallNoticeEvent, @@ -474,6 +475,6 @@ class ChatBot: # 进入标准消息处理流程 await self.message_process(message_cq) - + # 创建全局ChatBot实例 chat_bot = ChatBot()