mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-04 06:21:14 +00:00
⚡️按评论修改
This commit is contained in:
parent
80d9b02664
commit
c28b5b53d8
2
go.mod
2
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
|
||||
|
||||
4
go.sum
4
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=
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user