From c28b5b53d849bb8c45ee9c5d7cd452a375767a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=94=85=E9=A5=AD?= <1156544355@qq.com> Date: Wed, 21 Jan 2026 10:44:26 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=E6=8C=89=E8=AF=84=E8=AE=BA?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 +- go.sum | 4 +- plugin/music/selecter.go | 105 ++++++++++++++++++++++----------------- 3 files changed, 63 insertions(+), 48 deletions(-) diff --git a/go.mod b/go.mod index b92c05e0..1389bf90 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,7 @@ require ( github.com/fumiama/unibase2n v0.0.0-20240530074540-ec743fd5a6d6 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 github.com/google/uuid v1.6.0 - github.com/guohuiyuan/music-lib v1.0.1 + github.com/guohuiyuan/music-lib v1.0.2-0.20260121020416-53f6cb24629d github.com/jinzhu/gorm v1.9.16 github.com/jozsefsallai/gophersauce v1.0.1 github.com/kanrichan/resvg-go v0.0.2-0.20231001163256-63db194ca9f5 diff --git a/go.sum b/go.sum index 4a26f1cb..ba09249c 100644 --- a/go.sum +++ b/go.sum @@ -117,8 +117,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopxl/beep/v2 v2.1.1 h1:6FYIYMm2qPAdWkjX+7xwKrViS1x0Po5kDMdRkq8NVbU= github.com/gopxl/beep/v2 v2.1.1/go.mod h1:ZAm9TGQ9lvpoiFLd4zf5B1IuyxZhgRACMId1XJbaW0E= -github.com/guohuiyuan/music-lib v1.0.1 h1:RE1/0o7cMD+zU4vWtau3P6Czl9fW1a1G3dbjbgTA5H0= -github.com/guohuiyuan/music-lib v1.0.1/go.mod h1:0qJM2Ug7Ow7hmbX5M5jPBRnZ1UN2No9GX156LDAaJ80= +github.com/guohuiyuan/music-lib v1.0.2-0.20260121020416-53f6cb24629d h1:6Cw52c4JaYvq55yAa9ZgUQeBL6b3ZWErQqkbeMZiAYw= +github.com/guohuiyuan/music-lib v1.0.2-0.20260121020416-53f6cb24629d/go.mod h1:D/6kQDwhQFDNZEMjN8y760DQSVYpOGlQXrYzhKz0rCQ= github.com/jfreymuth/oggvorbis v1.0.5 h1:u+Ck+R0eLSRhgq8WTmffYnrVtSztJcYrl588DM4e3kQ= github.com/jfreymuth/oggvorbis v1.0.5/go.mod h1:1U4pqWmghcoVsCJJ4fRBKv9peUJMBHixthRlBeD6uII= github.com/jfreymuth/vorbis v1.0.2 h1:m1xH6+ZI4thH927pgKD8JOH4eaGRm18rEE9/0WKjvNE= diff --git a/plugin/music/selecter.go b/plugin/music/selecter.go index 2d8fc47c..8e42ed41 100644 --- a/plugin/music/selecter.go +++ b/plugin/music/selecter.go @@ -2,7 +2,6 @@ package music import ( - "errors" "fmt" ctrl "github.com/FloatTech/zbpctrl" // 别名 zbpctrl 为 ctrl @@ -13,18 +12,19 @@ import ( "github.com/guohuiyuan/music-lib/migu" "github.com/guohuiyuan/music-lib/netease" "github.com/guohuiyuan/music-lib/qq" + "github.com/pkg/errors" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" ) -// 平台映射:指令前缀 -> 平台名称 -var platformMap = map[string]string{ - "咪咕": "migu", - "酷我": "kuwo", - "酷狗": "kugou", - "网易": "netease", - "qq": "qq", - "": "kuwo", // 默认点歌指向酷我 +// 平台映射:指令前缀 -> 点歌函数 +var platformMap = map[string]func(string) (message.Segment, error){ + "咪咕": getMiguMusic, + "酷我": getKuwoMusic, + "酷狗": getKugouMusic, + "网易": getNeteaseMusic, + "qq": getQQMusic, + "": getKuwoMusic, // 默认点歌指向酷我 } func init() { @@ -44,55 +44,46 @@ func init() { platformPrefix := matches[1] keyword := matches[2] - // 获取目标平台 - targetPlatform, ok := platformMap[platformPrefix] + // 获取目标平台处理函数 + processFunc, ok := platformMap[platformPrefix] if !ok { ctx.SendChain(message.Text("不支持的点播平台:", platformPrefix)) return } // 执行点播并返回结果 - seg, err := getMusicSegment(targetPlatform, keyword) + seg, err := processFunc(keyword) if err != nil { - ctx.SendChain(message.Text("点歌失败:", err.Error())) + // 修改:直接传递 err,不需要 call .Error() + ctx.SendChain(message.Text("点歌失败:", err)) return } ctx.SendChain(seg) }) } -// getMusicSegment 根据平台和关键词获取音乐消息段 -func getMusicSegment(platform, keyword string) (message.Segment, error) { - switch platform { - case "migu": - return getMiguMusic(keyword) - case "kuwo": - return getKuwoMusic(keyword) - case "kugou": - return getKugouMusic(keyword) - case "netease": - return getNeteaseMusic(keyword) - case "qq": - return getQQMusic(keyword) - default: - return message.Segment{}, errors.New("未知的音乐平台:" + platform) - } -} +// 删除了 getMusicSegment 函数,因为已经通过 Map 直接分发 // --- 各平台适配层(基于 music-lib 实现) --- // getMiguMusic 咪咕音乐点播 func getMiguMusic(keyword string) (message.Segment, error) { songs, err := migu.Search(keyword) - if err != nil || len(songs) == 0 { + if err != nil { + return message.Segment{}, errors.Wrap(err, "咪咕音乐搜索失败") + } + if len(songs) == 0 { return message.Segment{}, errors.New("咪咕音乐未找到相关歌曲:" + keyword) } song := songs[0] // 传入 &song (指针) playURL, err := migu.GetDownloadURL(&song) - if err != nil || playURL == "" { - return message.Segment{}, errors.New("获取咪咕播放链接失败:" + err.Error()) + if err != nil { + return message.Segment{}, errors.Wrap(err, "获取咪咕播放链接失败") + } + if playURL == "" { + return message.Segment{}, errors.New("获取咪咕播放链接失败:链接为空") } return message.CustomMusic( @@ -105,15 +96,21 @@ func getMiguMusic(keyword string) (message.Segment, error) { // getKuwoMusic 酷我音乐点播 func getKuwoMusic(keyword string) (message.Segment, error) { songs, err := kuwo.Search(keyword) - if err != nil || len(songs) == 0 { + if err != nil { + return message.Segment{}, errors.Wrap(err, "酷我音乐搜索失败") + } + if len(songs) == 0 { return message.Segment{}, errors.New("酷我音乐未找到相关歌曲:" + keyword) } song := songs[0] // 传入 &song (指针) playURL, err := kuwo.GetDownloadURL(&song) - if err != nil || playURL == "" { - return message.Segment{}, errors.New("获取酷我播放链接失败:" + err.Error()) + if err != nil { + return message.Segment{}, errors.Wrap(err, "获取酷我播放链接失败") + } + if playURL == "" { + return message.Segment{}, errors.New("获取酷我播放链接失败:链接为空") } return message.CustomMusic( @@ -126,15 +123,21 @@ func getKuwoMusic(keyword string) (message.Segment, error) { // getKugouMusic 酷狗音乐点播 func getKugouMusic(keyword string) (message.Segment, error) { songs, err := kugou.Search(keyword) - if err != nil || len(songs) == 0 { + if err != nil { + return message.Segment{}, errors.Wrap(err, "酷狗音乐搜索失败") + } + if len(songs) == 0 { return message.Segment{}, errors.New("酷狗音乐未找到相关歌曲:" + keyword) } song := songs[0] // 传入 &song (指针) playURL, err := kugou.GetDownloadURL(&song) - if err != nil || playURL == "" { - return message.Segment{}, errors.New("获取酷狗播放链接失败:" + err.Error()) + if err != nil { + return message.Segment{}, errors.Wrap(err, "获取酷狗播放链接失败") + } + if playURL == "" { + return message.Segment{}, errors.New("获取酷狗播放链接失败:链接为空") } return message.CustomMusic( @@ -147,15 +150,21 @@ func getKugouMusic(keyword string) (message.Segment, error) { // getNeteaseMusic 网易云音乐点播 func getNeteaseMusic(keyword string) (message.Segment, error) { songs, err := netease.Search(keyword) - if err != nil || len(songs) == 0 { + if err != nil { + return message.Segment{}, errors.Wrap(err, "网易云音乐搜索失败") + } + if len(songs) == 0 { return message.Segment{}, errors.New("网易云音乐未找到相关歌曲:" + keyword) } song := songs[0] // 获取播放直链 playURL, err := netease.GetDownloadURL(&song) - if err != nil || playURL == "" { - return message.Segment{}, errors.New("获取网易云播放链接失败:" + err.Error()) + if err != nil { + return message.Segment{}, errors.Wrap(err, "获取网易云播放链接失败") + } + if playURL == "" { + return message.Segment{}, errors.New("获取网易云播放链接失败:链接为空") } // 构造 CustomMusic @@ -169,15 +178,21 @@ func getNeteaseMusic(keyword string) (message.Segment, error) { // getQQMusic QQ音乐点播 func getQQMusic(keyword string) (message.Segment, error) { songs, err := qq.Search(keyword) - if err != nil || len(songs) == 0 { + if err != nil { + return message.Segment{}, errors.Wrap(err, "QQ音乐搜索失败") + } + if len(songs) == 0 { return message.Segment{}, errors.New("QQ音乐未找到相关歌曲:" + keyword) } song := songs[0] // 获取播放直链 playURL, err := qq.GetDownloadURL(&song) - if err != nil || playURL == "" { - return message.Segment{}, errors.New("获取QQ音乐播放链接失败:" + err.Error()) + if err != nil { + return message.Segment{}, errors.Wrap(err, "获取QQ音乐播放链接失败") + } + if playURL == "" { + return message.Segment{}, errors.New("获取QQ音乐播放链接失败:链接为空") } // 构造 CustomMusic