feat(napcat): 新增对音乐分享卡片的解析支持
为 NapCat 适配器增加了对音乐分享卡片的解析能力,能够识别并提取来自 QQ 音乐和网易云音乐的分享内容。 - 支持解析标准的 `view: "music"` 类型卡片,提取歌曲、艺术家、跳转链接和封面图信息。 - 兼容处理部分网易云音乐伪装成 `view: "news"` 类型的分享卡片,确保这类消息也能被正确解析。 - 将解析后的音乐信息格式化为易于阅读的文本消息,提升了用户体验。
This commit is contained in:
@@ -828,6 +828,63 @@ class MessageHandler:
|
|||||||
data=f"这是一条小程序分享消息,可以根据来源,考虑使用对应解析工具\n{formatted_content}",
|
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
|
# 如果没有提取到关键信息,返回None
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user