|
5 | 5 | Bot, |
6 | 6 | MessageEvent, |
7 | 7 | PrivateMessageEvent, |
| 8 | + GroupMessageEvent, |
8 | 9 | NoticeEvent, |
9 | 10 | PokeNotifyEvent, |
10 | 11 | GroupRecallNoticeEvent, |
@@ -411,6 +412,69 @@ async def handle_message(self, event: MessageEvent, bot: Bot) -> None: |
411 | 412 |
|
412 | 413 | await self.message_process(message_cq) |
413 | 414 |
|
| 415 | + async def handle_forward_message(self, event: MessageEvent, bot: Bot) -> None: |
| 416 | + """专用于处理合并转发的消息处理器""" |
| 417 | + |
| 418 | + # 获取合并转发消息的详细信息 |
| 419 | + forward_info = await bot.get_forward_msg(message_id=event.message_id) |
| 420 | + messages = forward_info["messages"] |
| 421 | + |
| 422 | + # 构建合并转发消息的文本表示 |
| 423 | + processed_messages = [] |
| 424 | + for node in messages: |
| 425 | + # 提取发送者昵称 |
| 426 | + nickname = node["sender"].get("nickname", "未知用户") |
| 427 | + |
| 428 | + # 处理消息内容 |
| 429 | + message_content = [] |
| 430 | + for seg in node["message"]: |
| 431 | + if seg["type"] == "text": |
| 432 | + message_content.append(seg["data"]["text"]) |
| 433 | + elif seg["type"] == "image": |
| 434 | + message_content.append("[图片]") |
| 435 | + elif seg["type"] =="face": |
| 436 | + message_content.append("[表情]") |
| 437 | + elif seg["type"] == "at": |
| 438 | + message_content.append(f"@{seg['data'].get('qq', '未知用户')}") |
| 439 | + else: |
| 440 | + message_content.append(f"[{seg['type']}]") |
| 441 | + |
| 442 | + # 拼接为【昵称】+ 内容 |
| 443 | + processed_messages.append(f"【{nickname}】{''.join(message_content)}") |
| 444 | + |
| 445 | + # 组合所有消息 |
| 446 | + combined_message = "\n".join(processed_messages) |
| 447 | + combined_message = f"合并转发消息内容:\n{combined_message}" |
| 448 | + |
| 449 | + # 构建用户信息(使用转发消息的发送者) |
| 450 | + user_info = UserInfo( |
| 451 | + user_id=event.user_id, |
| 452 | + user_nickname=event.sender.nickname, |
| 453 | + user_cardname=event.sender.card if hasattr(event.sender, "card") else None, |
| 454 | + platform="qq", |
| 455 | + ) |
| 456 | + |
| 457 | + # 构建群聊信息(如果是群聊) |
| 458 | + group_info = None |
| 459 | + if isinstance(event, GroupMessageEvent): |
| 460 | + group_info = GroupInfo( |
| 461 | + group_id=event.group_id, |
| 462 | + group_name= None, |
| 463 | + platform="qq" |
| 464 | + ) |
| 465 | + |
| 466 | + # 创建消息对象 |
| 467 | + message_cq = MessageRecvCQ( |
| 468 | + message_id=event.message_id, |
| 469 | + user_info=user_info, |
| 470 | + raw_message=combined_message, |
| 471 | + group_info=group_info, |
| 472 | + reply_message=event.reply, |
| 473 | + platform="qq", |
| 474 | + ) |
| 475 | + |
| 476 | + # 进入标准消息处理流程 |
| 477 | + await self.message_process(message_cq) |
414 | 478 |
|
415 | 479 | # 创建全局ChatBot实例 |
416 | 480 | chat_bot = ChatBot() |
0 commit comments