feat(跨平台): 优化消息处理并添加纯文本提取功能
添加 extract_text_only 函数过滤非文本标记 修改翻译逻辑仅处理纯文本内容 完善附件处理和消息内容拼接 修复仅包含表情时的消息处理问题
This commit is contained in:
@@ -171,10 +171,12 @@ async def handle_discord_message_event(event: Any):
|
||||
logger.debug(f"[CrossPlatform] 开始处理 Discord 事件消息: channel_id={discord_channel_id}")
|
||||
|
||||
if hasattr(event, 'message') and isinstance(event.message, list):
|
||||
has_text_content = False
|
||||
for segment in event.message:
|
||||
if isinstance(segment, MessageSegment):
|
||||
if segment.type == "text":
|
||||
content += segment.data.get("text", "")
|
||||
has_text_content = True
|
||||
elif segment.type == "image":
|
||||
file_url = segment.data.get("url") or segment.data.get("file")
|
||||
file_name = segment.data.get("filename")
|
||||
@@ -183,6 +185,7 @@ async def handle_discord_message_event(event: Any):
|
||||
attachment_item = {"type": "image", "url": str(file_url), "filename": file_name}
|
||||
if attachment_item not in attachments:
|
||||
attachments.append(attachment_item)
|
||||
content += f"\n[图片: {file_name}]\n"
|
||||
elif segment.type == "video":
|
||||
file_url = segment.data.get("url") or segment.data.get("file")
|
||||
file_name = segment.data.get("filename")
|
||||
@@ -191,6 +194,7 @@ async def handle_discord_message_event(event: Any):
|
||||
attachment_item = {"type": "video", "url": str(file_url), "filename": file_name}
|
||||
if attachment_item not in attachments:
|
||||
attachments.append(attachment_item)
|
||||
content += f"\n[视频: {file_name}]\n"
|
||||
elif segment.type == "record":
|
||||
file_url = segment.data.get("url") or segment.data.get("file")
|
||||
file_name = segment.data.get("filename")
|
||||
@@ -199,6 +203,7 @@ async def handle_discord_message_event(event: Any):
|
||||
attachment_item = {"type": "record", "url": str(file_url), "filename": file_name}
|
||||
if attachment_item not in attachments:
|
||||
attachments.append(attachment_item)
|
||||
content += f"\n[语音: {file_name}]\n"
|
||||
elif segment.type == "file":
|
||||
file_url = segment.data.get("url") or segment.data.get("file")
|
||||
file_name = segment.data.get("filename")
|
||||
@@ -207,12 +212,17 @@ async def handle_discord_message_event(event: Any):
|
||||
attachment_item = {"type": "file", "url": str(file_url), "filename": file_name}
|
||||
if attachment_item not in attachments:
|
||||
attachments.append(attachment_item)
|
||||
content += f"\n[文件: {file_name}]\n"
|
||||
logger.debug(f"[CrossPlatform] Discord 消息识别到文件: {file_name}, URL: {file_url}")
|
||||
else:
|
||||
content = event.raw_message or ""
|
||||
|
||||
content = content.strip()
|
||||
|
||||
# 如果 content 为空但有附件(如只有表情),使用 raw_message 作为 content
|
||||
if not content and attachments:
|
||||
content = event.raw_message or ""
|
||||
|
||||
logger.debug(f"[CrossPlatform] Discord 消息内容: '{content}', 附件数量: {len(attachments)}")
|
||||
|
||||
discord_username = getattr(event, 'discord_username', 'Unknown')
|
||||
|
||||
Reference in New Issue
Block a user