feat(napcat): 新增对音乐分享卡片的解析支持
为 NapCat 适配器增加了对音乐分享卡片的解析能力,能够识别并提取来自 QQ 音乐和网易云音乐的分享内容。 - 支持解析标准的 `view: "music"` 类型卡片,提取歌曲、艺术家、跳转链接和封面图信息。 - 兼容处理部分网易云音乐伪装成 `view: "news"` 类型的分享卡片,确保这类消息也能被正确解析。 - 将解析后的音乐信息格式化为易于阅读的文本消息,提升了用户体验。
This commit is contained in:
@@ -828,6 +828,63 @@ class MessageHandler:
|
||||
data=f"这是一条小程序分享消息,可以根据来源,考虑使用对应解析工具\n{formatted_content}",
|
||||
)
|
||||
|
||||
# 检查是否是音乐分享 (QQ音乐类型)
|
||||
if nested_data.get("view") == "music" and "com.tencent.music" in str(nested_data.get("app", "")):
|
||||
meta = nested_data.get("meta", {})
|
||||
music = meta.get("music", {})
|
||||
if music:
|
||||
tag = music.get("tag", "未知来源")
|
||||
logger.debug(f"检测到【{tag}】音乐分享消息 (music view),开始提取信息")
|
||||
|
||||
title = music.get("title", "未知歌曲")
|
||||
desc = music.get("desc", "未知艺术家")
|
||||
jump_url = music.get("jumpUrl", "")
|
||||
preview_url = music.get("preview", "")
|
||||
|
||||
artist = "未知艺术家"
|
||||
song_title = title
|
||||
|
||||
if "网易云音乐" in tag:
|
||||
artist = desc
|
||||
elif "QQ音乐" in tag:
|
||||
if " - " in title:
|
||||
parts = title.split(" - ", 1)
|
||||
song_title = parts[0]
|
||||
artist = parts[1]
|
||||
else:
|
||||
artist = desc
|
||||
|
||||
formatted_content = (
|
||||
f"这是一张来自【{tag}】的音乐分享卡片:\n"
|
||||
f"歌曲: {song_title}\n"
|
||||
f"艺术家: {artist}\n"
|
||||
f"跳转链接: {jump_url}\n"
|
||||
f"封面图: {preview_url}"
|
||||
)
|
||||
return Seg(type="text", data=formatted_content)
|
||||
|
||||
# 检查是否是新闻/图文分享 (网易云音乐可能伪装成这种)
|
||||
elif nested_data.get("view") == "news" and "com.tencent.tuwen" in str(nested_data.get("app", "")):
|
||||
meta = nested_data.get("meta", {})
|
||||
news = meta.get("news", {})
|
||||
if news and "网易云音乐" in news.get("tag", ""):
|
||||
tag = news.get("tag")
|
||||
logger.debug(f"检测到【{tag}】音乐分享消息 (news view),开始提取信息")
|
||||
|
||||
title = news.get("title", "未知歌曲")
|
||||
desc = news.get("desc", "未知艺术家")
|
||||
jump_url = news.get("jumpUrl", "")
|
||||
preview_url = news.get("preview", "")
|
||||
|
||||
formatted_content = (
|
||||
f"这是一张来自【{tag}】的音乐分享卡片:\n"
|
||||
f"标题: {title}\n"
|
||||
f"描述: {desc}\n"
|
||||
f"跳转链接: {jump_url}\n"
|
||||
f"封面图: {preview_url}"
|
||||
)
|
||||
return Seg(type="text", data=formatted_content)
|
||||
|
||||
# 如果没有提取到关键信息,返回None
|
||||
return None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user