feat(跨平台): 优化消息处理并添加纯文本提取功能
添加 extract_text_only 函数过滤非文本标记 修改翻译逻辑仅处理纯文本内容 完善附件处理和消息内容拼接 修复仅包含表情时的消息处理问题
This commit is contained in:
@@ -227,6 +227,9 @@ class DiscordToOneBotConverter:
|
||||
Returns:
|
||||
伪装后的 OneBot 事件对象
|
||||
"""
|
||||
# 在方法内部导入 logger,避免作用域问题
|
||||
from core.utils.logger import logger
|
||||
|
||||
# 1. 提取基础信息
|
||||
user_id = discord_message.author.id
|
||||
message_id = discord_message.id
|
||||
@@ -279,38 +282,43 @@ class DiscordToOneBotConverter:
|
||||
else:
|
||||
message_list.append(OneBotMessageSegment.text(content))
|
||||
|
||||
# 如果消息只包含表情(没有文本),更新 raw_message 以包含表情信息
|
||||
if not raw_message.strip() or raw_message.strip().startswith('<'):
|
||||
import re
|
||||
raw_message = re.sub(r'<a?:([^:]+):(\d+)>', r'[\1]', raw_message)
|
||||
|
||||
# 添加附件信息
|
||||
if discord_message.attachments:
|
||||
self.logger.debug(f"[DiscordToOneBotConverter] 检测到 {len(discord_message.attachments)} 个附件")
|
||||
logger.debug(f"[DiscordToOneBotConverter] 检测到 {len(discord_message.attachments)} 个附件")
|
||||
for attachment in discord_message.attachments:
|
||||
filename = attachment.filename.lower()
|
||||
self.logger.debug(f"[DiscordToOneBotConverter] 处理附件: {attachment.filename}, MIME: {attachment.content_type}")
|
||||
logger.debug(f"[DiscordToOneBotConverter] 处理附件: {attachment.filename}, MIME: {attachment.content_type}")
|
||||
# 检查是否是语音文件
|
||||
if filename.endswith(('.amr', '.silk', '.mp3', '.wav', '.ogg', '.m4a')):
|
||||
seg = OneBotMessageSegment.record(attachment.url)
|
||||
seg.data["filename"] = attachment.filename
|
||||
message_list.append(seg)
|
||||
raw_message += f"\n[语音: {attachment.filename}]"
|
||||
self.logger.debug(f"[DiscordToOneBotConverter] 识别为语音文件: {attachment.filename}")
|
||||
logger.debug(f"[DiscordToOneBotConverter] 识别为语音文件: {attachment.filename}")
|
||||
elif filename.endswith(('.mp4', '.avi', '.mkv', '.mov', '.flv', '.wmv')):
|
||||
seg = OneBotMessageSegment.video(attachment.url)
|
||||
seg.data["filename"] = attachment.filename
|
||||
message_list.append(seg)
|
||||
raw_message += f"\n[视频: {attachment.filename}]"
|
||||
self.logger.debug(f"[DiscordToOneBotConverter] 识别为视频文件: {attachment.filename}")
|
||||
logger.debug(f"[DiscordToOneBotConverter] 识别为视频文件: {attachment.filename}")
|
||||
elif filename.endswith(('.png', '.jpg', '.jpeg', '.gif', '.webp')):
|
||||
image_type = "gif" if filename.endswith('.gif') else None
|
||||
seg = OneBotMessageSegment.image(attachment.url, image_type=image_type)
|
||||
seg.data["filename"] = attachment.filename
|
||||
message_list.append(seg)
|
||||
raw_message += f"\n[图片: {attachment.filename}]"
|
||||
self.logger.debug(f"[DiscordToOneBotConverter] 识别为图片文件: {attachment.filename}")
|
||||
logger.debug(f"[DiscordToOneBotConverter] 识别为图片文件: {attachment.filename}")
|
||||
else:
|
||||
seg = OneBotMessageSegment.file(attachment.url)
|
||||
seg.data["filename"] = attachment.filename
|
||||
message_list.append(seg)
|
||||
raw_message += f"\n[文件: {attachment.filename}]"
|
||||
self.logger.success(f"[DiscordToOneBotConverter] 识别为普通文件: {attachment.filename}")
|
||||
logger.success(f"[DiscordToOneBotConverter] 识别为普通文件: {attachment.filename}")
|
||||
|
||||
# 添加贴纸 (Stickers) 信息
|
||||
if hasattr(discord_message, 'stickers') and discord_message.stickers:
|
||||
|
||||
Reference in New Issue
Block a user