多层聊天记录转发解析

支持解析多层聊天记录,不(也不应该)支持聊天记录内图片解析
This commit is contained in:
Maple127667
2025-03-20 18:17:20 +08:00
parent 8c178b80d7
commit dab0755e12

View File

@@ -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()