1- // Package music 整合多平台音乐点播能力(基于 music-lib 重构)
1+ // Package music 整合多平台音乐点播能力
22package music
33
44import (
55 "fmt"
66
7- ctrl "github.com/FloatTech/zbpctrl" // 别名 zbpctrl 为 ctrl
8- "github.com/FloatTech/zbputils/control" // 保持 control 原名
7+ ctrl "github.com/FloatTech/zbpctrl"
8+ "github.com/FloatTech/zbputils/control"
99 "github.com/FloatTech/zbputils/ctxext"
1010 "github.com/guohuiyuan/music-lib/kugou"
1111 "github.com/guohuiyuan/music-lib/kuwo"
@@ -17,7 +17,6 @@ import (
1717 "github.com/wdvxdr1123/ZeroBot/message"
1818)
1919
20- // 平台映射:指令前缀 -> 点歌函数
2120var platformMap = map [string ]func (string ) (message.Segment , error ){
2221 "咪咕" : getMiguMusic ,
2322 "酷我" : getKuwoMusic ,
@@ -28,7 +27,6 @@ var platformMap = map[string]func(string) (message.Segment, error){
2827}
2928
3029func init () {
31- // 注册指令处理器
3230 control .AutoRegister (& ctrl.Options [* zero.Ctx ]{
3331 DisableOnDefault : false ,
3432 Brief : "点歌" ,
@@ -44,29 +42,39 @@ func init() {
4442 platformPrefix := matches [1 ]
4543 keyword := matches [2 ]
4644
47- // 获取目标平台处理函数
4845 processFunc , ok := platformMap [platformPrefix ]
4946 if ! ok {
5047 ctx .SendChain (message .Text ("不支持的点播平台:" , platformPrefix ))
5148 return
5249 }
5350
54- // 执行点播并返回结果
5551 seg , err := processFunc (keyword )
5652 if err != nil {
57- // 修改:直接传递 err,不需要 call .Error()
5853 ctx .SendChain (message .Text ("点歌失败:" , err ))
5954 return
6055 }
6156 ctx .SendChain (seg )
6257 })
6358}
6459
65- // 删除了 getMusicSegment 函数,因为已经通过 Map 直接分发
66-
67- // --- 各平台适配层(基于 music-lib 实现) ---
60+ // getMusicSegment 根据平台和关键词获取音乐消息段
61+ func getMusicSegment (platform , keyword string ) (message.Segment , error ) {
62+ switch platform {
63+ case "migu" :
64+ return getMiguMusic (keyword )
65+ case "kuwo" :
66+ return getKuwoMusic (keyword )
67+ case "kugou" :
68+ return getKugouMusic (keyword )
69+ case "netease" :
70+ return getNeteaseMusic (keyword )
71+ case "qq" :
72+ return getQQMusic (keyword )
73+ default :
74+ return message.Segment {}, errors .New ("未知的音乐平台:" + platform )
75+ }
76+ }
6877
69- // getMiguMusic 咪咕音乐点播
7078func getMiguMusic (keyword string ) (message.Segment , error ) {
7179 songs , err := migu .Search (keyword )
7280 if err != nil {
@@ -77,7 +85,6 @@ func getMiguMusic(keyword string) (message.Segment, error) {
7785 }
7886 song := songs [0 ]
7987
80- // 传入 &song (指针)
8188 playURL , err := migu .GetDownloadURL (& song )
8289 if err != nil {
8390 return message.Segment {}, errors .Wrap (err , "获取咪咕播放链接失败" )
@@ -93,7 +100,6 @@ func getMiguMusic(keyword string) (message.Segment, error) {
93100 ).Add ("content" , song .Artist ).Add ("image" , song .Cover ).Add ("subtype" , "migu" ), nil
94101}
95102
96- // getKuwoMusic 酷我音乐点播
97103func getKuwoMusic (keyword string ) (message.Segment , error ) {
98104 songs , err := kuwo .Search (keyword )
99105 if err != nil {
@@ -104,7 +110,6 @@ func getKuwoMusic(keyword string) (message.Segment, error) {
104110 }
105111 song := songs [0 ]
106112
107- // 传入 &song (指针)
108113 playURL , err := kuwo .GetDownloadURL (& song )
109114 if err != nil {
110115 return message.Segment {}, errors .Wrap (err , "获取酷我播放链接失败" )
@@ -120,7 +125,6 @@ func getKuwoMusic(keyword string) (message.Segment, error) {
120125 ).Add ("content" , song .Artist ).Add ("image" , song .Cover ).Add ("subtype" , "kuwo" ), nil
121126}
122127
123- // getKugouMusic 酷狗音乐点播
124128func getKugouMusic (keyword string ) (message.Segment , error ) {
125129 songs , err := kugou .Search (keyword )
126130 if err != nil {
@@ -131,7 +135,6 @@ func getKugouMusic(keyword string) (message.Segment, error) {
131135 }
132136 song := songs [0 ]
133137
134- // 传入 &song (指针)
135138 playURL , err := kugou .GetDownloadURL (& song )
136139 if err != nil {
137140 return message.Segment {}, errors .Wrap (err , "获取酷狗播放链接失败" )
@@ -147,7 +150,6 @@ func getKugouMusic(keyword string) (message.Segment, error) {
147150 ).Add ("content" , song .Artist ).Add ("image" , song .Cover ).Add ("subtype" , "kugou" ), nil
148151}
149152
150- // getNeteaseMusic 网易云音乐点播
151153func getNeteaseMusic (keyword string ) (message.Segment , error ) {
152154 songs , err := netease .Search (keyword )
153155 if err != nil {
@@ -158,7 +160,6 @@ func getNeteaseMusic(keyword string) (message.Segment, error) {
158160 }
159161 song := songs [0 ]
160162
161- // 获取播放直链
162163 playURL , err := netease .GetDownloadURL (& song )
163164 if err != nil {
164165 return message.Segment {}, errors .Wrap (err , "获取网易云播放链接失败" )
@@ -167,15 +168,13 @@ func getNeteaseMusic(keyword string) (message.Segment, error) {
167168 return message.Segment {}, errors .New ("获取网易云播放链接失败:链接为空" )
168169 }
169170
170- // 构造 CustomMusic
171171 return message .CustomMusic (
172172 fmt .Sprintf ("https://music.163.com/#/song?id=%s" , song .ID ),
173173 playURL ,
174174 song .Name ,
175175 ).Add ("content" , song .Artist ).Add ("image" , song .Cover ).Add ("subtype" , "163" ), nil
176176}
177177
178- // getQQMusic QQ音乐点播
179178func getQQMusic (keyword string ) (message.Segment , error ) {
180179 songs , err := qq .Search (keyword )
181180 if err != nil {
@@ -186,7 +185,6 @@ func getQQMusic(keyword string) (message.Segment, error) {
186185 }
187186 song := songs [0 ]
188187
189- // 获取播放直链
190188 playURL , err := qq .GetDownloadURL (& song )
191189 if err != nil {
192190 return message.Segment {}, errors .Wrap (err , "获取QQ音乐播放链接失败" )
@@ -195,7 +193,6 @@ func getQQMusic(keyword string) (message.Segment, error) {
195193 return message.Segment {}, errors .New ("获取QQ音乐播放链接失败:链接为空" )
196194 }
197195
198- // 构造 CustomMusic
199196 return message .CustomMusic (
200197 fmt .Sprintf ("https://y.qq.com/n/ryqq/songDetail/%s" , song .ID ),
201198 playURL ,
0 commit comments