Skip to content

Commit 8c178b8

Browse files
authored
Merge pull request #497 from Maple127667/main-fix
合并转发消息处理
2 parents 262224c + 0b0bfdb commit 8c178b8

2 files changed

Lines changed: 69 additions & 2 deletions

File tree

src/plugins/chat/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,11 @@ async def _(bot: Bot):
9292

9393
@msg_in.handle()
9494
async def _(bot: Bot, event: MessageEvent, state: T_State):
95-
await chat_bot.handle_message(event, bot)
96-
95+
#处理合并转发消息
96+
if "forward" in event.message:
97+
await chat_bot.handle_forward_message(event , bot)
98+
else :
99+
await chat_bot.handle_message(event, bot)
97100

98101
@notice_matcher.handle()
99102
async def _(bot: Bot, event: NoticeEvent, state: T_State):

src/plugins/chat/bot.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Bot,
66
MessageEvent,
77
PrivateMessageEvent,
8+
GroupMessageEvent,
89
NoticeEvent,
910
PokeNotifyEvent,
1011
GroupRecallNoticeEvent,
@@ -411,6 +412,69 @@ async def handle_message(self, event: MessageEvent, bot: Bot) -> None:
411412

412413
await self.message_process(message_cq)
413414

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)
414478

415479
# 创建全局ChatBot实例
416480
chat_bot = ChatBot()

0 commit comments

Comments
 (0)