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..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, @@ -411,6 +412,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()