From 9cb54a34da2a379d9a438983be2da6be5dd37f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Fri, 7 Oct 2022 12:21:20 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20=F0=9F=8E=A8=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96bilibili?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 +- go.sum | 4 +- plugin/bilibili/api.go | 144 -------- plugin/bilibili/bilibili.go | 34 +- plugin/bilibili/bilibili_parse.go | 9 +- plugin/bilibili/bilibilimodel.go | 32 -- plugin/bilibili/bilibilipush.go | 24 +- plugin/bilibili/bilibilipushmodel.go | 2 +- plugin/bilibili/card2msg.go | 223 ++++++++---- plugin/bilibili/card2msg_test.go | 16 +- plugin/bilibili/types.go | 331 ------------------ plugin/bilibili/util.go | 25 -- plugin/epidemic/epidemic.go | 4 +- plugin/guessmusic/struct.go | 498 +++++++++++++-------------- plugin/score/model.go | 4 +- plugin/sleep_manage/model.go | 4 +- plugin/vtb_quotation/model/model.go | 6 +- plugin/ymgal/model.go | 2 +- 18 files changed, 467 insertions(+), 897 deletions(-) delete mode 100644 plugin/bilibili/api.go delete mode 100644 plugin/bilibili/types.go delete mode 100644 plugin/bilibili/util.go diff --git a/go.mod b/go.mod index b1772072..f6c8a01c 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/Coloured-glaze/gg v1.3.4 - github.com/FloatTech/AnimeAPI v1.5.1-0.20221006135705-daf77c4dedea + github.com/FloatTech/AnimeAPI v1.5.2-0.20221007041953-504c6d0e683b github.com/FloatTech/floatbox v0.0.0-20221004092550-1ebf9b4e6198 github.com/FloatTech/sqlite v0.4.0 github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b diff --git a/go.sum b/go.sum index 6798c5ca..2d0192d8 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/Coloured-glaze/gg v1.3.4 h1:l31zIF/HaVwkzjrj+A56RGQoSKyKuR1IWtIrqXGFStI= github.com/Coloured-glaze/gg v1.3.4/go.mod h1:Ih5NLNNDHOy3RJbB0EPqGTreIzq/H02TGThIagh8HJg= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/FloatTech/AnimeAPI v1.5.1-0.20221006135705-daf77c4dedea h1:1kZDanLMBknJa2Z+O9t17TNmOENnIYGaPZaGeSw9V5w= -github.com/FloatTech/AnimeAPI v1.5.1-0.20221006135705-daf77c4dedea/go.mod h1:HFQWi7BT966CxSGx6Et/weLaCApsY8FFSbbMPHqEGl0= +github.com/FloatTech/AnimeAPI v1.5.2-0.20221007041953-504c6d0e683b h1:HMNvCoycUJc/+2RdmwuLHyW1KbsuGrF0RQRivVZ2Qzc= +github.com/FloatTech/AnimeAPI v1.5.2-0.20221007041953-504c6d0e683b/go.mod h1:HFQWi7BT966CxSGx6Et/weLaCApsY8FFSbbMPHqEGl0= github.com/FloatTech/floatbox v0.0.0-20221004092550-1ebf9b4e6198 h1:AkwB7LKMK74yS5rIERhOQbJosDgOefJBSkhEiMbyr+A= github.com/FloatTech/floatbox v0.0.0-20221004092550-1ebf9b4e6198/go.mod h1:4UDl6E/I2HqAqRnKdsxxfO28fkqGo3CzFOP2BhyI6ag= github.com/FloatTech/sqlite v0.4.0 h1:fvQ1vc7fw99jYXccs5KItMluy7QL1t6NxbkH7aN1F4g= diff --git a/plugin/bilibili/api.go b/plugin/bilibili/api.go deleted file mode 100644 index 371a743e..00000000 --- a/plugin/bilibili/api.go +++ /dev/null @@ -1,144 +0,0 @@ -package bilibili - -import ( - "encoding/json" - "errors" - "fmt" - "net/http" - "strconv" - - "github.com/FloatTech/floatbox/binary" - "github.com/FloatTech/floatbox/web" - "github.com/tidwall/gjson" -) - -var ( - errNeedCookie = errors.New("该api需要设置b站cookie,请发送命令设置cookie,例如\"设置b站cookie SESSDATA=82da790d,1663822823,06ecf*31\"") -) - -// searchUser 查找b站用户 -func searchUser(keyword string) (r []searchResult, err error) { - client := &http.Client{} - req, err := http.NewRequest("GET", fmt.Sprintf(searchUserURL, keyword), nil) - if err != nil { - return - } - err = reflushBilibiliCookie() - if err != nil { - return - } - req.Header.Add("cookie", cfg.BilibiliCookie) - res, err := client.Do(req) - if err != nil { - return - } - defer res.Body.Close() - if res.StatusCode != http.StatusOK { - s := fmt.Sprintf("status code: %d", res.StatusCode) - err = errors.New(s) - return - } - var sd searchData - err = json.NewDecoder(res.Body).Decode(&sd) - if err != nil { - return - } - r = sd.Data.Result - return -} - -// getVtbDetail 查找vtb信息 -func getVtbDetail(uid string) (result vtbDetail, err error) { - data, err := web.GetData(fmt.Sprintf(vtbDetailURL, uid)) - if err != nil { - return - } - if err = json.Unmarshal(data, &result); err != nil { - return - } - return -} - -// getMemberCard 获取b站个人详情 -func getMemberCard(uid interface{}) (result memberCard, err error) { - data, err := web.GetData(fmt.Sprintf(memberCardURL, uid)) - if err != nil { - return - } - err = json.Unmarshal(binary.StringToBytes(gjson.ParseBytes(data).Get("card").Raw), &result) - if err != nil { - return - } - return -} - -// getMedalwall 用b站uid获得牌子 -func getMedalwall(uid string) (result []medal, err error) { - client := &http.Client{} - req, err := http.NewRequest("GET", fmt.Sprintf(medalwallURL, uid), nil) - if err != nil { - return - } - err = reflushBilibiliCookie() - if err != nil { - return - } - req.Header.Add("cookie", cfg.BilibiliCookie) - res, err := client.Do(req) - if err != nil { - return - } - defer res.Body.Close() - var md medalData - err = json.NewDecoder(res.Body).Decode(&md) - if err != nil { - return - } - if md.Code == -101 { - err = errNeedCookie - return - } - if md.Code != 0 { - err = errors.New(md.Message) - } - result = md.Data.List - return -} - -// getArticleInfo 用id查专栏信息 -func getArticleInfo(id string) (card Card, err error) { - var data []byte - data, err = web.GetData(fmt.Sprintf(articleInfoURL, id)) - if err != nil { - return - } - err = json.Unmarshal(binary.StringToBytes(gjson.ParseBytes(data).Get("data").Raw), &card) - return -} - -// getLiveRoomInfo 用直播间id查直播间信息 -func getLiveRoomInfo(roomID string) (card roomCard, err error) { - var data []byte - data, err = web.GetData(fmt.Sprintf(liveRoomInfoURL, roomID)) - if err != nil { - return - } - err = json.Unmarshal(binary.StringToBytes(gjson.ParseBytes(data).Get("data").Raw), &card) - return -} - -// getVideoInfo 用av或bv查视频信息 -func getVideoInfo(id string) (card Card, err error) { - var data []byte - _, err = strconv.Atoi(id) - if err == nil { - data, err = web.GetData(fmt.Sprintf(videoInfoURL, id, "")) - } else { - data, err = web.GetData(fmt.Sprintf(videoInfoURL, "", id)) - } - if err != nil { - return - } - err = json.Unmarshal(binary.StringToBytes(gjson.ParseBytes(data).Get("data").Raw), &card) - return -} diff --git a/plugin/bilibili/bilibili.go b/plugin/bilibili/bilibili.go index 788619c4..bd46803f 100644 --- a/plugin/bilibili/bilibili.go +++ b/plugin/bilibili/bilibili.go @@ -17,6 +17,7 @@ import ( "time" "github.com/Coloured-glaze/gg" + bz "github.com/FloatTech/AnimeAPI/bilibili" fcext "github.com/FloatTech/floatbox/ctxext" "github.com/FloatTech/floatbox/file" "github.com/FloatTech/floatbox/img/writer" @@ -40,8 +41,7 @@ var ( 4: "进入直播间", 5: "标题变动", } - cfgFile = "data/Bilibili/config.json" - cfg config + cfg = bz.NewCookieConfig("data/Bilibili/config.json") ) // 查成分的 @@ -73,7 +73,7 @@ func init() { engine.OnRegex(`^>user info\s?(.{1,25})$`, getPara).SetBlock(true). Handle(func(ctx *zero.Ctx) { id := ctx.State["uid"].(string) - card, err := getMemberCard(id) + card, err := bz.GetMemberCard(id) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -92,7 +92,7 @@ func init() { Handle(func(ctx *zero.Ctx) { id := ctx.State["uid"].(string) // 获取详情 - fo, err := getVtbDetail(id) + fo, err := bz.GetVtbDetail(id) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -120,7 +120,7 @@ func init() { ctx.SendChain(message.Image("file:///" + file.BOTPATH + "/" + drawedFile)) return } - u, err := getMemberCard(id) + u, err := bz.GetMemberCard(id) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -131,13 +131,13 @@ func init() { return } vupLen := len(vups) - medals, err := getMedalwall(id) - sort.Sort(medalSlice(medals)) + medals, err := bz.GetMedalWall(cfg, id) + sort.Sort(bz.MedalSorter(medals)) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) } frontVups := make([]vup, 0) - medalMap := make(map[int64]medal) + medalMap := make(map[int64]bz.Medal) for _, v := range medals { up := vup{ Mid: v.Mid, @@ -173,7 +173,7 @@ func init() { back = img.Size(back, backX, backY).Im } if len(vups) > 50 { - ctx.SendChain(message.Text(u.Name + "关注的up主太多了,只展示前50个up")) + ctx.SendChain(message.Text(u.Name + "关注的up主太多了, 只展示前50个up")) vups = vups[:50] } canvas := gg.NewContext(1500, int(500*(1.1+float64(len(vups))/3))) @@ -275,19 +275,19 @@ func init() { if pagenum == "" { pagenum = "0" } - u, err := getMemberCard(id) + u, err := bz.GetMemberCard(id) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return } - var danmaku danmakusuki + var danmaku bz.Danmakusuki tr := &http.Transport{ DisableKeepAlives: true, TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{Transport: tr} - data, err := web.RequestDataWith(client, fmt.Sprintf(danmakuAPI, id, pagenum), "GET", "", web.RandUA()) + data, err := web.RequestDataWith(client, fmt.Sprintf(bz.DanmakuAPI, id, pagenum), "GET", "", web.RandUA()) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -363,7 +363,7 @@ func init() { canvas.DrawString(u.Mid, 900+n, 122.5) canvas.DrawString(fmt.Sprintf("粉丝:%d 关注:%d", u.Fans, u.Attention), startWidth, 222.5) canvas.DrawString(fmt.Sprintf("页码:[%d/%d]", danmaku.Data.PageNum, (danmaku.Data.Total-1)/5), startWidth, 322.5) - canvas.DrawString("网页链接: "+fmt.Sprintf(danmakuURL, u.Mid), startWidth, 422.5) + canvas.DrawString("网页链接: "+fmt.Sprintf(bz.DanmakuURL, u.Mid), startWidth, 422.5) var channelStart float64 channelStart = float64(550) for i := 0; i < len(danmaku.Data.Data); i++ { @@ -527,7 +527,7 @@ func init() { engine.OnRegex(`^设置b站cookie?\s+(.*)$`, zero.SuperUserPermission).SetBlock(true). Handle(func(ctx *zero.Ctx) { cookie := ctx.State["regex_matched"].([]string)[1] - err := setBilibiliCookie(cookie) + err := cfg.Set(cookie) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -571,7 +571,7 @@ func int2rbg(t int64) (int64, int64, int64) { func getPara(ctx *zero.Ctx) bool { keyword := ctx.State["regex_matched"].([]string)[1] if !re.MatchString(keyword) { - searchRes, err := searchUser(keyword) + searchRes, err := bz.SearchUser(cfg, keyword) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return false @@ -582,7 +582,7 @@ func getPara(ctx *zero.Ctx) bool { next := zero.NewFutureEvent("message", 999, false, ctx.CheckSession()) recv, cancel := next.Repeat() defer cancel() - ctx.SendChain(message.Text("输入为纯数字,请选择查询uid还是用户名,输入对应序号:\n0. 查询uid\n1. 查询用户名")) + ctx.SendChain(message.Text("输入为纯数字, 请选择查询uid还是用户名, 输入对应序号:\n0. 查询uid\n1. 查询用户名")) for { select { case <-time.After(time.Second * 10): @@ -604,7 +604,7 @@ func getPara(ctx *zero.Ctx) bool { ctx.State["uid"] = keyword return true } else if num == 1 { - searchRes, err := searchUser(keyword) + searchRes, err := bz.SearchUser(cfg, keyword) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return false diff --git a/plugin/bilibili/bilibili_parse.go b/plugin/bilibili/bilibili_parse.go index 886eecc0..98b2dde1 100644 --- a/plugin/bilibili/bilibili_parse.go +++ b/plugin/bilibili/bilibili_parse.go @@ -5,6 +5,7 @@ import ( "regexp" "time" + bz "github.com/FloatTech/AnimeAPI/bilibili" ctrl "github.com/FloatTech/zbpctrl" "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" @@ -34,7 +35,7 @@ func init() { en.OnRegex(`((b23|acg).tv|bili2233.cn)/[0-9a-zA-Z]+`).SetBlock(true).Limit(limit.LimitByGroup). Handle(func(ctx *zero.Ctx) { url := ctx.State["regex_matched"].([]string)[0] - realurl, err := getrealurl("https://" + url) + realurl, err := bz.GetRealUrl("https://" + url) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -65,7 +66,7 @@ func handleVideo(ctx *zero.Ctx) { if id == "" { id = ctx.State["regex_matched"].([]string)[2] } - card, err := getVideoInfo(id) + card, err := bz.GetVideoInfo(id) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -88,7 +89,7 @@ func handleDynamic(ctx *zero.Ctx) { } func handleArticle(ctx *zero.Ctx) { - card, err := getArticleInfo(ctx.State["regex_matched"].([]string)[1]) + card, err := bz.GetArticleInfo(ctx.State["regex_matched"].([]string)[1]) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -97,7 +98,7 @@ func handleArticle(ctx *zero.Ctx) { } func handleLive(ctx *zero.Ctx) { - card, err := getLiveRoomInfo(ctx.State["regex_matched"].([]string)[1]) + card, err := bz.GetLiveRoomInfo(ctx.State["regex_matched"].([]string)[1]) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return diff --git a/plugin/bilibili/bilibilimodel.go b/plugin/bilibili/bilibilimodel.go index 54f7517e..b0138771 100644 --- a/plugin/bilibili/bilibilimodel.go +++ b/plugin/bilibili/bilibilimodel.go @@ -1,12 +1,9 @@ package bilibili import ( - "encoding/json" - "errors" "os" "github.com/FloatTech/floatbox/binary" - "github.com/FloatTech/floatbox/file" "github.com/FloatTech/floatbox/web" _ "github.com/fumiama/sqlite3" // use sql "github.com/jinzhu/gorm" @@ -92,32 +89,3 @@ func updateVup() error { } return nil } - -func setBilibiliCookie(cookie string) (err error) { - cfg = config{ - BilibiliCookie: cookie, - } - return saveConfig(cfg) -} - -func reflushBilibiliCookie() (err error) { - if file.IsNotExist(cfgFile) { - err = errors.New("未初始化配置") - return - } - reader, err := os.Open(cfgFile) - if err != nil { - return - } - defer reader.Close() - return json.NewDecoder(reader).Decode(&cfg) -} - -func saveConfig(cfg config) (err error) { - reader, err := os.Create(cfgFile) - if err != nil { - return err - } - defer reader.Close() - return json.NewEncoder(reader).Encode(&cfg) -} diff --git a/plugin/bilibili/bilibilipush.go b/plugin/bilibili/bilibilipush.go index eeadecf1..65526f55 100644 --- a/plugin/bilibili/bilibilipush.go +++ b/plugin/bilibili/bilibilipush.go @@ -13,6 +13,7 @@ import ( zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" + bz "github.com/FloatTech/AnimeAPI/bilibili" "github.com/FloatTech/floatbox/binary" "github.com/FloatTech/floatbox/web" ctrl "github.com/FloatTech/zbpctrl" @@ -191,7 +192,7 @@ func getName(buid int64) (name string, err error) { // subscribe 订阅 func subscribe(buid, groupid int64) (err error) { - bpMap := map[string]interface{}{ + bpMap := map[string]any{ "bilibili_uid": buid, "group_id": groupid, "live_disable": 0, @@ -202,7 +203,7 @@ func subscribe(buid, groupid int64) (err error) { // unsubscribe 取消订阅 func unsubscribe(buid, groupid int64) (err error) { - bpMap := map[string]interface{}{ + bpMap := map[string]any{ "bilibili_uid": buid, "group_id": groupid, "live_disable": 1, @@ -212,7 +213,7 @@ func unsubscribe(buid, groupid int64) (err error) { } func unsubscribeDynamic(buid, groupid int64) (err error) { - bpMap := map[string]interface{}{ + bpMap := map[string]any{ "bilibili_uid": buid, "group_id": groupid, "dynamic_disable": 1, @@ -221,7 +222,7 @@ func unsubscribeDynamic(buid, groupid int64) (err error) { } func unsubscribeLive(buid, groupid int64) (err error) { - bpMap := map[string]interface{}{ + bpMap := map[string]any{ "bilibili_uid": buid, "group_id": groupid, "live_disable": 1, @@ -230,7 +231,7 @@ func unsubscribeLive(buid, groupid int64) (err error) { } func getUserDynamicCard(buid int64) (cardList []gjson.Result, err error) { - data, err := web.RequestDataWith(web.NewDefaultClient(), fmt.Sprintf(spaceHistoryURL, buid, 0), "GET", referer, ua) + data, err := web.RequestDataWith(web.NewDefaultClient(), fmt.Sprintf(bz.SpaceHistoryURL, buid, 0), "GET", referer, ua) if err != nil { return } @@ -239,13 +240,13 @@ func getUserDynamicCard(buid int64) (cardList []gjson.Result, err error) { } func getLiveList(uids ...int64) (string, error) { - m := make(map[string]interface{}) + m := make(map[string]any) m["uids"] = uids b, err := json.Marshal(m) if err != nil { return "", err } - data, err := web.PostData(liveListURL, "application/json", bytes.NewReader(b)) + data, err := web.PostData(bz.LiveListURL, "application/json", bytes.NewReader(b)) if err != nil { return "", err } @@ -276,7 +277,12 @@ func sendDynamic(ctx *zero.Ctx) error { m, ok := control.Lookup(serviceName) if ok { groupList := bdb.getAllGroupByBuidAndDynamic(buid) - msg, err := dynamicCard2msg(cardList[i].Raw, 0) + dc, err := bz.LoadDynamicDetail(cardList[i].Raw) + if err != nil { + err = errors.Errorf("动态%v的解析有问题,%v", cardList[i].Get("desc.dynamic_id_str"), err) + return err + } + msg, err := dynamicCard2msg(&dc) if err != nil { err = errors.Errorf("动态%v的解析有问题,%v", cardList[i].Get("desc.dynamic_id_str"), err) return err @@ -324,7 +330,7 @@ func sendLive(ctx *zero.Ctx) error { if roomID == 0 { roomID = value.Get("room_id").Int() } - lURL := liveURL + strconv.FormatInt(roomID, 10) + lURL := bz.LiveURL + strconv.FormatInt(roomID, 10) lName := value.Get("uname").String() lTitle := value.Get("title").String() lCover := value.Get("cover_from_user").String() diff --git a/plugin/bilibili/bilibilipushmodel.go b/plugin/bilibili/bilibilipushmodel.go index fbacdbaa..067422bc 100644 --- a/plugin/bilibili/bilibilipushmodel.go +++ b/plugin/bilibili/bilibilipushmodel.go @@ -54,7 +54,7 @@ func initializePush(dbpath string) *bilibilipushdb { } // insertOrUpdateLiveAndDynamic 插入或更新数据库 -func (bdb *bilibilipushdb) insertOrUpdateLiveAndDynamic(bpMap map[string]interface{}) (err error) { +func (bdb *bilibilipushdb) insertOrUpdateLiveAndDynamic(bpMap map[string]any) (err error) { db := (*gorm.DB)(bdb) bp := bilibilipush{} data, err := json.Marshal(&bpMap) diff --git a/plugin/bilibili/card2msg.go b/plugin/bilibili/card2msg.go index d0fdc3f7..c4d17d20 100644 --- a/plugin/bilibili/card2msg.go +++ b/plugin/bilibili/card2msg.go @@ -2,18 +2,15 @@ package bilibili import ( "encoding/json" - "errors" - "fmt" "time" + bz "github.com/FloatTech/AnimeAPI/bilibili" "github.com/FloatTech/floatbox/binary" - "github.com/FloatTech/floatbox/web" - "github.com/tidwall/gjson" "github.com/wdvxdr1123/ZeroBot/message" ) var ( - typeMsg = map[int]string{ + MsgType = map[int]string{ 1: "转发了动态", 2: "有图营业", 4: "无图营业", @@ -27,66 +24,56 @@ var ( } ) -// dynamicCard2msg cType=0时,处理DynCard字符串,cType=1, 2, 4, 8, 16, 64, 256, 2048, 4200, 4308时,处理Card字符串,cType为card类型 -func dynamicCard2msg(str string, cType int) (msg []message.MessageSegment, err error) { +// dynamicCard2msg 处理DynCard +func dynamicCard2msg(dynamicCard *bz.DynamicCard) (msg []message.MessageSegment, err error) { var ( - dynamicCard dynamicCard - card Card - vote Vote + card bz.Card + vote bz.Vote + cType int ) msg = make([]message.MessageSegment, 0, 16) // 初始化结构体 - switch cType { - case 0: - err = json.Unmarshal(binary.StringToBytes(str), &dynamicCard) - if err != nil { - return - } - err = json.Unmarshal(binary.StringToBytes(dynamicCard.Card), &card) - if err != nil { - return - } - if dynamicCard.Extension.Vote != "" { - err = json.Unmarshal(binary.StringToBytes(dynamicCard.Extension.Vote), &vote) - if err != nil { - return - } - } - cType = dynamicCard.Desc.Type - case 1, 2, 4, 8, 16, 64, 256, 2048, 4200, 4308: - err = json.Unmarshal(binary.StringToBytes(str), &card) - if err != nil { - return - } - default: - err = errors.New("只有0, 1, 2, 4, 8, 16, 64, 256, 2048, 4200, 4308模式") + err = json.Unmarshal(binary.StringToBytes(dynamicCard.Card), &card) + if err != nil { return } + if dynamicCard.Extension.Vote != "" { + err = json.Unmarshal(binary.StringToBytes(dynamicCard.Extension.Vote), &vote) + if err != nil { + return + } + } + cType = dynamicCard.Desc.Type // 生成消息 switch cType { case 1: - msg = append(msg, message.Text(card.User.Uname, typeMsg[cType], "\n", + msg = append(msg, message.Text(card.User.Uname, MsgType[cType], "\n", card.Item.Content, "\n", "转发的内容: \n")) var originMsg []message.MessageSegment - originMsg, err = dynamicCard2msg(card.Origin, card.Item.OrigType) + var co bz.Card + co, err = bz.LoadCardDetail(card.Origin) + if err != nil { + return + } + originMsg, err = card2msg(dynamicCard, &co, card.Item.OrigType) if err != nil { return } msg = append(msg, originMsg...) case 2: - msg = append(msg, message.Text(card.User.Name, "在", time.Unix(int64(card.Item.UploadTime), 0).Format("2006-01-02 15:04:05"), typeMsg[cType], "\n", + msg = append(msg, message.Text(card.User.Name, "在", time.Unix(int64(card.Item.UploadTime), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", card.Item.Description)) for i := 0; i < len(card.Item.Pictures); i++ { msg = append(msg, message.Image(card.Item.Pictures[i].ImgSrc)) } case 4: - msg = append(msg, message.Text(card.User.Uname, "在", time.Unix(int64(card.Item.Timestamp), 0).Format("2006-01-02 15:04:05"), typeMsg[cType], "\n", + msg = append(msg, message.Text(card.User.Uname, "在", time.Unix(int64(card.Item.Timestamp), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", card.Item.Content, "\n")) if dynamicCard.Extension.Vote != "" { msg = append(msg, message.Text("【投票】", vote.Desc, "\n", "截止日期: ", time.Unix(int64(vote.Endtime), 0).Format("2006-01-02 15:04:05"), "\n", - "参与人数: ", humanNum(vote.JoinNum), "\n", + "参与人数: ", bz.HumanNum(vote.JoinNum), "\n", "投票选项( 最多选择", vote.ChoiceCnt, "项 )\n")) for i := 0; i < len(vote.Options); i++ { msg = append(msg, message.Text("- ", vote.Options[i].Idx, ". ", vote.Options[i].Desc, "\n")) @@ -96,18 +83,18 @@ func dynamicCard2msg(str string, cType int) (msg []message.MessageSegment, err e } } case 8: - msg = append(msg, message.Text(card.Owner.Name, "在", time.Unix(int64(card.Pubdate), 0).Format("2006-01-02 15:04:05"), typeMsg[cType], "\n", + msg = append(msg, message.Text(card.Owner.Name, "在", time.Unix(int64(card.Pubdate), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", card.Title)) msg = append(msg, message.Image(card.Pic)) msg = append(msg, message.Text(card.Desc, "\n", card.ShareSubtitle, "\n", "视频链接: ", card.ShortLink, "\n")) case 16: - msg = append(msg, message.Text(card.User.Name, "在", time.Unix(int64(card.Item.UploadTime), 0).Format("2006-01-02 15:04:05"), typeMsg[cType], "\n", + msg = append(msg, message.Text(card.User.Name, "在", time.Unix(int64(card.Item.UploadTime), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", card.Item.Description)) msg = append(msg, message.Image(card.Item.Cover.Default)) case 64: - msg = append(msg, message.Text(card.Author.(map[string]interface{})["name"], "在", time.Unix(int64(card.PublishTime), 0).Format("2006-01-02 15:04:05"), typeMsg[cType], "\n", + msg = append(msg, message.Text(card.Author.(map[string]any)["name"], "在", time.Unix(int64(card.PublishTime), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", card.Title, "\n", card.Summary)) for i := 0; i < len(card.ImageUrls); i++ { @@ -117,7 +104,7 @@ func dynamicCard2msg(str string, cType int) (msg []message.MessageSegment, err e msg = append(msg, message.Text("文章链接: https://www.bilibili.com/read/cv", card.ID, "\n")) } case 256: - msg = append(msg, message.Text(card.Upper, "在", time.Unix(int64(card.Ctime), 0).Format("2006-01-02 15:04:05"), typeMsg[cType], "\n", + msg = append(msg, message.Text(card.Upper, "在", time.Unix(int64(card.Ctime), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", card.Title)) msg = append(msg, message.Image(card.Cover)) msg = append(msg, message.Text(card.Intro, "\n")) @@ -126,7 +113,7 @@ func dynamicCard2msg(str string, cType int) (msg []message.MessageSegment, err e } case 2048: - msg = append(msg, message.Text(card.User.Uname, typeMsg[cType], "\n", + msg = append(msg, message.Text(card.User.Uname, MsgType[cType], "\n", card.Vest.Content, "\n", card.Sketch.Title, "\n", card.Sketch.DescText, "\n")) @@ -134,7 +121,7 @@ func dynamicCard2msg(str string, cType int) (msg []message.MessageSegment, err e msg = append(msg, message.Text("分享链接: ", card.Sketch.TargetURL, "\n")) case 4308: if dynamicCard.Desc.UserProfile.Info.Uname != "" { - msg = append(msg, message.Text(dynamicCard.Desc.UserProfile.Info.Uname, typeMsg[cType], "\n")) + msg = append(msg, message.Text(dynamicCard.Desc.UserProfile.Info.Uname, MsgType[cType], "\n")) } msg = append(msg, message.Image(card.LivePlayInfo.Cover)) msg = append(msg, message.Text("\n", card.LivePlayInfo.Title, "\n", @@ -153,35 +140,141 @@ func dynamicCard2msg(str string, cType int) (msg []message.MessageSegment, err e msg = append(msg, message.Text("动态id: ", dynamicCard.Desc.DynamicIDStr, "未知动态类型: ", cType, "\n")) } if dynamicCard.Desc.DynamicIDStr != "" { - msg = append(msg, message.Text("动态链接: ", tURL, dynamicCard.Desc.DynamicIDStr)) + msg = append(msg, message.Text("动态链接: ", bz.TURL, dynamicCard.Desc.DynamicIDStr)) + } + return +} + +// card2msg cType=1, 2, 4, 8, 16, 64, 256, 2048, 4200, 4308时,处理Card字符串,cType为card类型 +func card2msg(dynamicCard *bz.DynamicCard, card *bz.Card, cType int) (msg []message.MessageSegment, err error) { + var ( + vote bz.Vote + ) + msg = make([]message.MessageSegment, 0, 16) + // 生成消息 + switch cType { + case 1: + msg = append(msg, message.Text(card.User.Uname, MsgType[cType], "\n", + card.Item.Content, "\n", + "转发的内容: \n")) + var originMsg []message.MessageSegment + var co bz.Card + co, err = bz.LoadCardDetail(card.Origin) + if err != nil { + return + } + originMsg, err = card2msg(dynamicCard, &co, card.Item.OrigType) + if err != nil { + return + } + msg = append(msg, originMsg...) + case 2: + msg = append(msg, message.Text(card.User.Name, "在", time.Unix(int64(card.Item.UploadTime), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", + card.Item.Description)) + for i := 0; i < len(card.Item.Pictures); i++ { + msg = append(msg, message.Image(card.Item.Pictures[i].ImgSrc)) + } + case 4: + msg = append(msg, message.Text(card.User.Uname, "在", time.Unix(int64(card.Item.Timestamp), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", + card.Item.Content, "\n")) + if dynamicCard.Extension.Vote != "" { + msg = append(msg, message.Text("【投票】", vote.Desc, "\n", + "截止日期: ", time.Unix(int64(vote.Endtime), 0).Format("2006-01-02 15:04:05"), "\n", + "参与人数: ", bz.HumanNum(vote.JoinNum), "\n", + "投票选项( 最多选择", vote.ChoiceCnt, "项 )\n")) + for i := 0; i < len(vote.Options); i++ { + msg = append(msg, message.Text("- ", vote.Options[i].Idx, ". ", vote.Options[i].Desc, "\n")) + if vote.Options[i].ImgURL != "" { + msg = append(msg, message.Image(vote.Options[i].ImgURL)) + } + } + } + case 8: + msg = append(msg, message.Text(card.Owner.Name, "在", time.Unix(int64(card.Pubdate), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", + card.Title)) + msg = append(msg, message.Image(card.Pic)) + msg = append(msg, message.Text(card.Desc, "\n", + card.ShareSubtitle, "\n", + "视频链接: ", card.ShortLink, "\n")) + case 16: + msg = append(msg, message.Text(card.User.Name, "在", time.Unix(int64(card.Item.UploadTime), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", + card.Item.Description)) + msg = append(msg, message.Image(card.Item.Cover.Default)) + case 64: + msg = append(msg, message.Text(card.Author.(map[string]any)["name"], "在", time.Unix(int64(card.PublishTime), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", + card.Title, "\n", + card.Summary)) + for i := 0; i < len(card.ImageUrls); i++ { + msg = append(msg, message.Image(card.ImageUrls[i])) + } + if card.ID != 0 { + msg = append(msg, message.Text("文章链接: https://www.bilibili.com/read/cv", card.ID, "\n")) + } + case 256: + msg = append(msg, message.Text(card.Upper, "在", time.Unix(int64(card.Ctime), 0).Format("2006-01-02 15:04:05"), MsgType[cType], "\n", + card.Title)) + msg = append(msg, message.Image(card.Cover)) + msg = append(msg, message.Text(card.Intro, "\n")) + if card.ID != 0 { + msg = append(msg, message.Text("音频链接: https://www.bilibili.com/audio/au", card.ID, "\n")) + } + + case 2048: + msg = append(msg, message.Text(card.User.Uname, MsgType[cType], "\n", + card.Vest.Content, "\n", + card.Sketch.Title, "\n", + card.Sketch.DescText, "\n")) + msg = append(msg, message.Image(card.Sketch.CoverURL)) + msg = append(msg, message.Text("分享链接: ", card.Sketch.TargetURL, "\n")) + case 4308: + if dynamicCard.Desc.UserProfile.Info.Uname != "" { + msg = append(msg, message.Text(dynamicCard.Desc.UserProfile.Info.Uname, MsgType[cType], "\n")) + } + msg = append(msg, message.Image(card.LivePlayInfo.Cover)) + msg = append(msg, message.Text("\n", card.LivePlayInfo.Title, "\n", + "房间号: ", card.LivePlayInfo.RoomID, "\n", + "分区: ", card.LivePlayInfo.ParentAreaName)) + if card.LivePlayInfo.ParentAreaName != card.LivePlayInfo.AreaName { + msg = append(msg, message.Text("-", card.LivePlayInfo.AreaName)) + } + if card.LivePlayInfo.LiveStatus == 0 { + msg = append(msg, message.Text("未开播 \n")) + } else { + msg = append(msg, message.Text("直播中 ", card.LivePlayInfo.WatchedShow, "\n")) + } + msg = append(msg, message.Text("直播链接: ", card.LivePlayInfo.Link)) + default: + msg = append(msg, message.Text("动态id: ", dynamicCard.Desc.DynamicIDStr, "未知动态类型: ", cType, "\n")) + } + if dynamicCard.Desc.DynamicIDStr != "" { + msg = append(msg, message.Text("动态链接: ", bz.TURL, dynamicCard.Desc.DynamicIDStr)) } return } // dynamicDetail 用动态id查动态信息 func dynamicDetail(dynamicIDStr string) (msg []message.MessageSegment, err error) { - var data []byte - data, err = web.GetData(fmt.Sprintf(dynamicDetailURL, dynamicIDStr)) + dyc, err := bz.GetDynamicDetail(dynamicIDStr) if err != nil { return } - return dynamicCard2msg(gjson.ParseBytes(data).Get("data.card").Raw, 0) + return dynamicCard2msg(&dyc) } // articleCard2msg 专栏转消息 -func articleCard2msg(card Card, defaultID string) (msg []message.MessageSegment) { +func articleCard2msg(card bz.Card, defaultID string) (msg []message.MessageSegment) { msg = make([]message.MessageSegment, 0, 16) for i := 0; i < len(card.OriginImageUrls); i++ { msg = append(msg, message.Image(card.OriginImageUrls[i])) } msg = append(msg, message.Text("\n", card.Title, "\n", "UP主: ", card.AuthorName, "\n", - "阅读: ", humanNum(card.Stats.View), " 评论: ", humanNum(card.Stats.Reply), "\n", - cvURL, defaultID)) + "阅读: ", bz.HumanNum(card.Stats.View), " 评论: ", bz.HumanNum(card.Stats.Reply), "\n", + bz.CVURL, defaultID)) return } // liveCard2msg 直播卡片转消息 -func liveCard2msg(card roomCard) (msg []message.MessageSegment) { +func liveCard2msg(card bz.RoomCard) (msg []message.MessageSegment) { msg = make([]message.MessageSegment, 0, 16) msg = append(msg, message.Image(card.RoomInfo.Keyframe)) msg = append(msg, message.Text("\n", card.RoomInfo.Title, "\n", @@ -197,37 +290,37 @@ func liveCard2msg(card roomCard) (msg []message.MessageSegment) { if card.RoomInfo.LiveStatus == 0 { msg = append(msg, message.Text("未开播 \n")) } else { - msg = append(msg, message.Text("直播中 ", humanNum(card.RoomInfo.Online), "人气\n")) + msg = append(msg, message.Text("直播中 ", bz.HumanNum(card.RoomInfo.Online), "人气\n")) } if card.RoomInfo.ShortID != 0 { - msg = append(msg, message.Text("直播间链接: ", lURL, card.RoomInfo.ShortID)) + msg = append(msg, message.Text("直播间链接: ", bz.LURL, card.RoomInfo.ShortID)) } else { - msg = append(msg, message.Text("直播间链接: ", lURL, card.RoomInfo.RoomID)) + msg = append(msg, message.Text("直播间链接: ", bz.LURL, card.RoomInfo.RoomID)) } return } // videoCard2msg 视频卡片转消息 -func videoCard2msg(card Card) (msg []message.MessageSegment, err error) { - var mCard memberCard +func videoCard2msg(card bz.Card) (msg []message.MessageSegment, err error) { + var mCard bz.MemberCard msg = make([]message.MessageSegment, 0, 16) - mCard, err = getMemberCard(card.Owner.Mid) + mCard, err = bz.GetMemberCard(card.Owner.Mid) if err != nil { return } msg = append(msg, message.Text("标题: ", card.Title, "\n")) if card.Rights.IsCooperation == 1 { for i := 0; i < len(card.Staff); i++ { - msg = append(msg, message.Text(card.Staff[i].Title, ": ", card.Staff[i].Name, " 粉丝: ", humanNum(card.Staff[i].Follower), "\n")) + msg = append(msg, message.Text(card.Staff[i].Title, ": ", card.Staff[i].Name, " 粉丝: ", bz.HumanNum(card.Staff[i].Follower), "\n")) } } else { - msg = append(msg, message.Text("UP主: ", card.Owner.Name, " 粉丝: ", humanNum(mCard.Fans), "\n")) + msg = append(msg, message.Text("UP主: ", card.Owner.Name, " 粉丝: ", bz.HumanNum(mCard.Fans), "\n")) } - msg = append(msg, message.Text("播放: ", humanNum(card.Stat.View), " 弹幕: ", humanNum(card.Stat.Danmaku))) + msg = append(msg, message.Text("播放: ", bz.HumanNum(card.Stat.View), " 弹幕: ", bz.HumanNum(card.Stat.Danmaku))) msg = append(msg, message.Image(card.Pic)) - msg = append(msg, message.Text("\n点赞: ", humanNum(card.Stat.Like), " 投币: ", humanNum(card.Stat.Coin), "\n", - "收藏: ", humanNum(card.Stat.Favorite), " 分享: ", humanNum(card.Stat.Share), "\n", - vURL, card.BvID)) + msg = append(msg, message.Text("\n点赞: ", bz.HumanNum(card.Stat.Like), " 投币: ", bz.HumanNum(card.Stat.Coin), "\n", + "收藏: ", bz.HumanNum(card.Stat.Favorite), " 分享: ", bz.HumanNum(card.Stat.Share), "\n", + bz.VURL, card.BvID)) return } diff --git a/plugin/bilibili/card2msg_test.go b/plugin/bilibili/card2msg_test.go index 272fed5b..96e7ae01 100644 --- a/plugin/bilibili/card2msg_test.go +++ b/plugin/bilibili/card2msg_test.go @@ -2,10 +2,12 @@ package bilibili import ( "testing" + + bz "github.com/FloatTech/AnimeAPI/bilibili" ) func TestArticleInfo(t *testing.T) { - card, err := getArticleInfo("17279244") + card, err := bz.GetArticleInfo("17279244") if err != nil { t.Fatal(err) } @@ -43,7 +45,7 @@ func TestDynamicDetail(t *testing.T) { } func TestMemberCard(t *testing.T) { - card, err := getMemberCard(2) + card, err := bz.GetMemberCard(2) if err != nil { t.Fatal(err) } @@ -51,22 +53,22 @@ func TestMemberCard(t *testing.T) { } func TestVideoInfo(t *testing.T) { - card, err := getVideoInfo("10007") + card, err := bz.GetVideoInfo("10007") if err != nil { t.Fatal(err) } t.Log(videoCard2msg(card)) - card, err = getVideoInfo("BV1xx411c7mD") + card, err = bz.GetVideoInfo("BV1xx411c7mD") if err != nil { t.Fatal(err) } t.Log(videoCard2msg(card)) - card, err = getVideoInfo("bv1xx411c7mD") + card, err = bz.GetVideoInfo("bv1xx411c7mD") if err != nil { t.Fatal(err) } t.Log(videoCard2msg(card)) - card, err = getVideoInfo("BV1mF411j7iU") + card, err = bz.GetVideoInfo("BV1mF411j7iU") if err != nil { t.Fatal(err) } @@ -74,7 +76,7 @@ func TestVideoInfo(t *testing.T) { } func TestLiveRoomInfo(t *testing.T) { - card, err := getLiveRoomInfo("83171") + card, err := bz.GetLiveRoomInfo("83171") if err != nil { t.Fatal(err) } diff --git a/plugin/bilibili/types.go b/plugin/bilibili/types.go deleted file mode 100644 index c104cad5..00000000 --- a/plugin/bilibili/types.go +++ /dev/null @@ -1,331 +0,0 @@ -package bilibili - -const ( - // tURL bilibili动态前缀 - tURL = "https://t.bilibili.com/" - // liveURL bilibili直播前缀 - liveURL = "https://live.bilibili.com/" - // dynamicDetailURL 当前动态信息,一个card - dynamicDetailURL = "https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail?dynamic_id=%v" - // memberCardURL 个人信息 - memberCardURL = "https://account.bilibili.com/api/member/getCardByMid?mid=%v" - // articleInfoURL 查看专栏信息 - articleInfoURL = "https://api.bilibili.com/x/article/viewinfo?id=%v" - // cvURL b站专栏前缀 - cvURL = "https://www.bilibili.com/read/cv" - // liveRoomInfoURL 查看直播间信息 - liveRoomInfoURL = "https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom?room_id=%v" - // lURL b站直播间前缀 - lURL = "https://live.bilibili.com/" - // videoInfoURL 查看视频信息 - videoInfoURL = "https://api.bilibili.com/x/web-interface/view?aid=%v&bvid=%v" - // vURL 视频网址前缀 - vURL = "https://www.bilibili.com/video/" - // searchUserURL 查找b站用户 - searchUserURL = "http://api.bilibili.com/x/web-interface/search/type?search_type=bili_user&keyword=%v" - // vtbDetailURL 查找vtb信息 - vtbDetailURL = "https://api.vtbs.moe/v1/detail/%v" - // medalwallURL 查找牌子 - medalwallURL = "https://api.live.bilibili.com/xlive/web-ucenter/user/MedalWall?target_id=%v" - // spaceHistoryURL 历史动态信息,一共12个card - spaceHistoryURL = "https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?host_uid=%v&offset_dynamic_id=%v&need_top=0" - // liveListURL 获得直播状态 - liveListURL = "https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids" - // danmakuAPI 弹幕网获得用户弹幕api - danmakuAPI = "https://danmaku.suki.club/api/search/user/detail?uid=%v&pagenum=%v&pagesize=5" - // danmakuURL 弹幕网链接 - danmakuURL = "https://danmaku.suki.club/user/%v" -) - -// dynamicCard 总动态结构体,包括desc,card -type dynamicCard struct { - Desc Desc `json:"desc"` - Card string `json:"card"` - Extension struct { - VoteCfg struct { - VoteID int `json:"vote_id"` - Desc string `json:"desc"` - JoinNum int `json:"join_num"` - } `json:"vote_cfg"` - Vote string `json:"vote"` - } `json:"extension"` -} - -// Card 卡片结构体 -type Card struct { - Item struct { - Content string `json:"content"` - UploadTime int `json:"upload_time"` - Description string `json:"description"` - Pictures []struct { - ImgSrc string `json:"img_src"` - } `json:"pictures"` - Timestamp int `json:"timestamp"` - Cover struct { - Default string `json:"default"` - } `json:"cover"` - OrigType int `json:"orig_type"` - } `json:"item"` - AID interface{} `json:"aid"` - BvID interface{} `json:"bvid"` - Dynamic interface{} `json:"dynamic"` - Pic string `json:"pic"` - Title string `json:"title"` - ID int `json:"id"` - Summary string `json:"summary"` - ImageUrls []string `json:"image_urls"` - OriginImageUrls []string `json:"origin_image_urls"` - Sketch struct { - Title string `json:"title"` - DescText string `json:"desc_text"` - CoverURL string `json:"cover_url"` - TargetURL string `json:"target_url"` - } `json:"sketch"` - Stat struct { - Aid int `json:"aid"` - View int `json:"view"` - Danmaku int `json:"danmaku"` - Reply int `json:"reply"` - Favorite int `json:"favorite"` - Coin int `json:"coin"` - Share int `json:"share"` - Like int `json:"like"` - } `json:"stat"` - Stats struct { - Aid int `json:"aid"` - View int `json:"view"` - Danmaku int `json:"danmaku"` - Reply int `json:"reply"` - Favorite int `json:"favorite"` - Coin int `json:"coin"` - Share int `json:"share"` - Like int `json:"like"` - } `json:"stats"` - Owner struct { - Name string `json:"name"` - Pubdate int `json:"pubdate"` - Mid int `json:"mid"` - } `json:"owner"` - Cover string `json:"cover"` - ShortID interface{} `json:"short_id"` - LivePlayInfo struct { - ParentAreaName string `json:"parent_area_name"` - AreaName string `json:"area_name"` - Cover string `json:"cover"` - Link string `json:"link"` - Online int `json:"online"` - RoomID int `json:"room_id"` - LiveStatus int `json:"live_status"` - WatchedShow string `json:"watched_show"` - Title string `json:"title"` - } `json:"live_play_info"` - Intro string `json:"intro"` - Schema string `json:"schema"` - Author interface{} `json:"author"` - AuthorName string `json:"author_name"` - PlayCnt int `json:"play_cnt"` - ReplyCnt int `json:"reply_cnt"` - TypeInfo string `json:"type_info"` - User struct { - Name string `json:"name"` - Uname string `json:"uname"` - } `json:"user"` - Desc string `json:"desc"` - ShareSubtitle string `json:"share_subtitle"` - ShortLink string `json:"short_link"` - PublishTime int `json:"publish_time"` - BannerURL string `json:"banner_url"` - Ctime int `json:"ctime"` - Vest struct { - Content string `json:"content"` - } `json:"vest"` - Upper string `json:"upper"` - Origin string `json:"origin"` - Pubdate int `json:"pubdate"` - Rights struct { - IsCooperation int `json:"is_cooperation"` - } `json:"rights"` - Staff []struct { - Title string `json:"title"` - Name string `json:"name"` - Follower int `json:"follower"` - } `json:"staff"` -} - -// Desc 描述结构体 -type Desc struct { - Type int `json:"type"` - DynamicIDStr string `json:"dynamic_id_str"` - OrigType int `json:"orig_type"` - Timestamp int `json:"timestamp"` - Origin struct { - DynamicIDStr string `json:"dynamic_id_str"` - } `json:"origin"` - UserProfile struct { - Info struct { - Uname string `json:"uname"` - } `json:"info"` - } `json:"user_profile"` -} - -// Vote 投票结构体 -type Vote struct { - ChoiceCnt int `json:"choice_cnt"` - Desc string `json:"desc"` - Endtime int `json:"endtime"` - JoinNum int `json:"join_num"` - Options []struct { - Idx int `json:"idx"` - Desc string `json:"desc"` - ImgURL string `json:"img_url"` - } `json:"options"` -} - -// memberCard 个人信息卡片 -type memberCard struct { - Mid string `json:"mid"` - Name string `json:"name"` - Sex string `json:"sex"` - Face string `json:"face"` - Coins float64 `json:"coins"` - Regtime int64 `json:"regtime"` - Birthday string `json:"birthday"` - Sign string `json:"sign"` - Attentions []int64 `json:"attentions"` - Fans int `json:"fans"` - Friend int `json:"friend"` - Attention int `json:"attention"` - LevelInfo struct { - CurrentLevel int `json:"current_level"` - } `json:"level_info"` -} - -// roomCard 直播间卡片 -type roomCard struct { - RoomInfo struct { - RoomID int `json:"room_id"` - ShortID int `json:"short_id"` - Title string `json:"title"` - LiveStatus int `json:"live_status"` - AreaName string `json:"area_name"` - ParentAreaName string `json:"parent_area_name"` - Keyframe string `json:"keyframe"` - Online int `json:"online"` - } `json:"room_info"` - AnchorInfo struct { - BaseInfo struct { - Uname string `json:"uname"` - } `json:"base_info"` - } `json:"anchor_info"` -} - -// searchData 查找b站用户总结构体 -type searchData struct { - Data struct { - NumResults int `json:"numResults"` - Result []searchResult `json:"result"` - } `json:"data"` -} - -// searchResult 查找b站用户结果 -type searchResult struct { - Mid int64 `json:"mid"` - Uname string `json:"uname"` - Gender int64 `json:"gender"` - Usign string `json:"usign"` - Level int64 `json:"level"` -} - -// medalData 牌子接口返回结构体 -type medalData struct { - Code int `json:"code"` - Message string `json:"message"` - Data struct { - List []medal `json:"list"` - } `json:"data"` -} - -// medalInfo b站牌子信息 -type medalInfo struct { - Mid int64 `json:"target_id"` - MedalName string `json:"medal_name"` - Level int64 `json:"level"` - MedalColorStart int64 `json:"medal_color_start"` - MedalColorEnd int64 `json:"medal_color_end"` - MedalColorBorder int64 `json:"medal_color_border"` -} - -type medal struct { - Uname string `json:"target_name"` - medalInfo `json:"medal_info"` -} - -type medalSlice []medal - -func (m medalSlice) Len() int { - return len(m) -} -func (m medalSlice) Swap(i, j int) { - m[i], m[j] = m[j], m[i] -} -func (m medalSlice) Less(i, j int) bool { - return m[i].Level > m[j].Level -} - -// vtb信息 -type vtbDetail struct { - Mid int `json:"mid"` - Uname string `json:"uname"` - Video int `json:"video"` - Roomid int `json:"roomid"` - Rise int `json:"rise"` - Follower int `json:"follower"` - GuardNum int `json:"guardNum"` - AreaRank int `json:"areaRank"` -} - -// danmakusuki 弹幕网结构体 -type danmakusuki struct { - Code int64 `json:"code"` - Message string `json:"message"` - Data struct { - Data []struct { - Channel struct { - Name string `json:"name"` - IsLiving bool `json:"isLiving"` - UID int64 `json:"uId"` - RoomID int64 `json:"roomId"` - FaceURL string `json:"faceUrl"` - LiveCount int64 `json:"liveCount"` - } `json:"channel"` - Live struct { - LiveID string `json:"liveId"` - Title string `json:"title"` - IsFinish bool `json:"isFinish"` - CoverURL string `json:"coverUrl"` - StartDate int64 `json:"startDate"` - StopDate int64 `json:"stopDate"` - DanmakusCount int64 `json:"danmakusCount"` - TotalIncome float64 `json:"totalIncome"` - WatchCount int64 `json:"watchCount"` - } `json:"live"` - Danmakus []struct { - Name string `json:"name"` - Type int64 `json:"type"` - UID int64 `json:"uId"` - SendDate int64 `json:"sendDate"` - Price float64 `json:"price"` - Message string `json:"message"` - } `json:"danmakus"` - } `json:"data"` - Total int64 `json:"total"` - PageNum int64 `json:"pageNum"` - PageSize int64 `json:"pageSize"` - HasMore bool `json:"hasMore"` - } `json:"data"` -} - -// 配置结构体 -type config struct { - BilibiliCookie string `json:"bilibili_cookie"` -} diff --git a/plugin/bilibili/util.go b/plugin/bilibili/util.go deleted file mode 100644 index ef1372d5..00000000 --- a/plugin/bilibili/util.go +++ /dev/null @@ -1,25 +0,0 @@ -package bilibili - -import ( - "net/http" - "strconv" -) - -// humanNum 格式化人数 -func humanNum(res int) string { - if res/10000 != 0 { - return strconv.FormatFloat(float64(res)/10000, 'f', 2, 64) + "万" - } - return strconv.Itoa(res) -} - -// getrealurl 获取跳转后的链接 -func getrealurl(url string) (realurl string, err error) { - data, err := http.Head(url) - if err != nil { - return - } - _ = data.Body.Close() - realurl = data.Request.URL.String() - return -} diff --git a/plugin/epidemic/epidemic.go b/plugin/epidemic/epidemic.go index 4adbfef6..38790e53 100644 --- a/plugin/epidemic/epidemic.go +++ b/plugin/epidemic/epidemic.go @@ -35,8 +35,8 @@ type epidemic struct { type area struct { Name string `json:"name"` Today struct { - Confirm int `json:"confirm"` - Wzzadd interface{} `json:"wzz_add"` + Confirm int `json:"confirm"` + Wzzadd any `json:"wzz_add"` } `json:"today"` Total struct { NowConfirm int `json:"nowConfirm"` diff --git a/plugin/guessmusic/struct.go b/plugin/guessmusic/struct.go index 31a98173..71e42c14 100644 --- a/plugin/guessmusic/struct.go +++ b/plugin/guessmusic/struct.go @@ -33,102 +33,102 @@ type qrInfo struct { } `json:"data"` } type topList struct { - Code int `json:"code"` - RelatedVideos interface{} `json:"relatedVideos"` + Code int `json:"code"` + RelatedVideos any `json:"relatedVideos"` Playlist struct { - ID int64 `json:"id"` - Name string `json:"name"` - CoverImgID int64 `json:"coverImgId"` - CoverImgURL string `json:"coverImgUrl"` - CoverImgIDStr string `json:"coverImgId_str"` - AdType int `json:"adType"` - UserID int `json:"userId"` - CreateTime int64 `json:"createTime"` - Status int `json:"status"` - OpRecommend bool `json:"opRecommend"` - HighQuality bool `json:"highQuality"` - NewImported bool `json:"newImported"` - UpdateTime int64 `json:"updateTime"` - TrackCount int `json:"trackCount"` - SpecialType int `json:"specialType"` - Privacy int `json:"privacy"` - TrackUpdateTime int64 `json:"trackUpdateTime"` - CommentThreadID string `json:"commentThreadId"` - PlayCount int `json:"playCount"` - TrackNumberUpdateTime int64 `json:"trackNumberUpdateTime"` - SubscribedCount int `json:"subscribedCount"` - CloudTrackCount int `json:"cloudTrackCount"` - Ordered bool `json:"ordered"` - Description string `json:"description"` - Tags []string `json:"tags"` - UpdateFrequency interface{} `json:"updateFrequency"` - BackgroundCoverID int `json:"backgroundCoverId"` - BackgroundCoverURL interface{} `json:"backgroundCoverUrl"` - TitleImage int `json:"titleImage"` - TitleImageURL interface{} `json:"titleImageUrl"` - EnglishTitle interface{} `json:"englishTitle"` - OfficialPlaylistType interface{} `json:"officialPlaylistType"` + ID int64 `json:"id"` + Name string `json:"name"` + CoverImgID int64 `json:"coverImgId"` + CoverImgURL string `json:"coverImgUrl"` + CoverImgIDStr string `json:"coverImgId_str"` + AdType int `json:"adType"` + UserID int `json:"userId"` + CreateTime int64 `json:"createTime"` + Status int `json:"status"` + OpRecommend bool `json:"opRecommend"` + HighQuality bool `json:"highQuality"` + NewImported bool `json:"newImported"` + UpdateTime int64 `json:"updateTime"` + TrackCount int `json:"trackCount"` + SpecialType int `json:"specialType"` + Privacy int `json:"privacy"` + TrackUpdateTime int64 `json:"trackUpdateTime"` + CommentThreadID string `json:"commentThreadId"` + PlayCount int `json:"playCount"` + TrackNumberUpdateTime int64 `json:"trackNumberUpdateTime"` + SubscribedCount int `json:"subscribedCount"` + CloudTrackCount int `json:"cloudTrackCount"` + Ordered bool `json:"ordered"` + Description string `json:"description"` + Tags []string `json:"tags"` + UpdateFrequency any `json:"updateFrequency"` + BackgroundCoverID int `json:"backgroundCoverId"` + BackgroundCoverURL any `json:"backgroundCoverUrl"` + TitleImage int `json:"titleImage"` + TitleImageURL any `json:"titleImageUrl"` + EnglishTitle any `json:"englishTitle"` + OfficialPlaylistType any `json:"officialPlaylistType"` Subscribers []struct { - DefaultAvatar bool `json:"defaultAvatar"` - Province int `json:"province"` - AuthStatus int `json:"authStatus"` - Followed bool `json:"followed"` - AvatarURL string `json:"avatarUrl"` - AccountStatus int `json:"accountStatus"` - Gender int `json:"gender"` - City int `json:"city"` - Birthday int `json:"birthday"` - UserID int `json:"userId"` - UserType int `json:"userType"` - Nickname string `json:"nickname"` - Signature string `json:"signature"` - Description string `json:"description"` - DetailDescription string `json:"detailDescription"` - AvatarImgID int64 `json:"avatarImgId"` - BackgroundImgID int64 `json:"backgroundImgId"` - BackgroundURL string `json:"backgroundUrl"` - Authority int `json:"authority"` - Mutual bool `json:"mutual"` - ExpertTags interface{} `json:"expertTags"` - Experts interface{} `json:"experts"` - DjStatus int `json:"djStatus"` - VipType int `json:"vipType"` - RemarkName interface{} `json:"remarkName"` - AuthenticationTypes int `json:"authenticationTypes"` - AvatarDetail interface{} `json:"avatarDetail"` - Anchor bool `json:"anchor"` - BackgroundImgIDStr string `json:"backgroundImgIdStr"` - AvatarImgIDStr string `json:"avatarImgIdStr"` - AvatarImgIDString string `json:"AvatarImgIDString"` + DefaultAvatar bool `json:"defaultAvatar"` + Province int `json:"province"` + AuthStatus int `json:"authStatus"` + Followed bool `json:"followed"` + AvatarURL string `json:"avatarUrl"` + AccountStatus int `json:"accountStatus"` + Gender int `json:"gender"` + City int `json:"city"` + Birthday int `json:"birthday"` + UserID int `json:"userId"` + UserType int `json:"userType"` + Nickname string `json:"nickname"` + Signature string `json:"signature"` + Description string `json:"description"` + DetailDescription string `json:"detailDescription"` + AvatarImgID int64 `json:"avatarImgId"` + BackgroundImgID int64 `json:"backgroundImgId"` + BackgroundURL string `json:"backgroundUrl"` + Authority int `json:"authority"` + Mutual bool `json:"mutual"` + ExpertTags any `json:"expertTags"` + Experts any `json:"experts"` + DjStatus int `json:"djStatus"` + VipType int `json:"vipType"` + RemarkName any `json:"remarkName"` + AuthenticationTypes int `json:"authenticationTypes"` + AvatarDetail any `json:"avatarDetail"` + Anchor bool `json:"anchor"` + BackgroundImgIDStr string `json:"backgroundImgIdStr"` + AvatarImgIDStr string `json:"avatarImgIdStr"` + AvatarImgIDString string `json:"AvatarImgIDString"` } `json:"subscribers"` - Subscribed interface{} `json:"subscribed"` + Subscribed any `json:"subscribed"` Creator struct { - DefaultAvatar bool `json:"defaultAvatar"` - Province int `json:"province"` - AuthStatus int `json:"authStatus"` - Followed bool `json:"followed"` - AvatarURL string `json:"avatarUrl"` - AccountStatus int `json:"accountStatus"` - Gender int `json:"gender"` - City int `json:"city"` - Birthday int `json:"birthday"` - UserID int `json:"userId"` - UserType int `json:"userType"` - Nickname string `json:"nickname"` - Signature string `json:"signature"` - Description string `json:"description"` - DetailDescription string `json:"detailDescription"` - AvatarImgID int64 `json:"avatarImgId"` - BackgroundImgID int64 `json:"backgroundImgId"` - BackgroundURL string `json:"backgroundUrl"` - Authority int `json:"authority"` - Mutual bool `json:"mutual"` - ExpertTags interface{} `json:"expertTags"` - Experts interface{} `json:"experts"` - DjStatus int `json:"djStatus"` - VipType int `json:"vipType"` - RemarkName interface{} `json:"remarkName"` - AuthenticationTypes int `json:"authenticationTypes"` + DefaultAvatar bool `json:"defaultAvatar"` + Province int `json:"province"` + AuthStatus int `json:"authStatus"` + Followed bool `json:"followed"` + AvatarURL string `json:"avatarUrl"` + AccountStatus int `json:"accountStatus"` + Gender int `json:"gender"` + City int `json:"city"` + Birthday int `json:"birthday"` + UserID int `json:"userId"` + UserType int `json:"userType"` + Nickname string `json:"nickname"` + Signature string `json:"signature"` + Description string `json:"description"` + DetailDescription string `json:"detailDescription"` + AvatarImgID int64 `json:"avatarImgId"` + BackgroundImgID int64 `json:"backgroundImgId"` + BackgroundURL string `json:"backgroundUrl"` + Authority int `json:"authority"` + Mutual bool `json:"mutual"` + ExpertTags any `json:"expertTags"` + Experts any `json:"experts"` + DjStatus int `json:"djStatus"` + VipType int `json:"vipType"` + RemarkName any `json:"remarkName"` + AuthenticationTypes int `json:"authenticationTypes"` AvatarDetail struct { UserType int `json:"userType"` IdentityLevel int `json:"identityLevel"` @@ -145,26 +145,26 @@ type topList struct { Pst int `json:"pst"` T int `json:"t"` Ar []struct { - ID int `json:"id"` - Name string `json:"name"` - Tns []interface{} `json:"tns"` - Alias []interface{} `json:"alias"` + ID int `json:"id"` + Name string `json:"name"` + Tns []any `json:"tns"` + Alias []any `json:"alias"` } `json:"ar"` - Alia []string `json:"alia"` - Pop int `json:"pop"` - St int `json:"st"` - Rt string `json:"rt"` - Fee int `json:"fee"` - V int `json:"v"` - Crbt interface{} `json:"crbt"` - Cf string `json:"cf"` + Alia []string `json:"alia"` + Pop int `json:"pop"` + St int `json:"st"` + Rt string `json:"rt"` + Fee int `json:"fee"` + V int `json:"v"` + Crbt any `json:"crbt"` + Cf string `json:"cf"` Al struct { - ID int `json:"id"` - Name string `json:"name"` - PicURL string `json:"picUrl"` - Tns []interface{} `json:"tns"` - PicStr string `json:"pic_str"` - Pic int64 `json:"pic"` + ID int `json:"id"` + Name string `json:"name"` + PicURL string `json:"picUrl"` + Tns []any `json:"tns"` + PicStr string `json:"pic_str"` + Pic int64 `json:"pic"` } `json:"al"` Dt int `json:"dt"` H struct { @@ -188,101 +188,101 @@ type topList struct { Vd float64 `json:"vd"` Sr int `json:"sr"` } `json:"l"` - Sq interface{} `json:"sq"` - Hr interface{} `json:"hr"` - A interface{} `json:"a"` - Cd string `json:"cd"` - No int `json:"no"` - RtURL interface{} `json:"rtUrl"` - Ftype int `json:"ftype"` - RtUrls []interface{} `json:"rtUrls"` - DjID int `json:"djId"` - Copyright int `json:"copyright"` - SID int `json:"s_id"` - Mark int `json:"mark"` - OriginCoverType int `json:"originCoverType"` - OriginSongSimpleData interface{} `json:"originSongSimpleData"` - TagPicList interface{} `json:"tagPicList"` - ResourceState bool `json:"resourceState"` - Version int `json:"version"` - SongJumpInfo interface{} `json:"songJumpInfo"` - EntertainmentTags interface{} `json:"entertainmentTags"` - Single int `json:"single"` - NoCopyrightRcmd interface{} `json:"noCopyrightRcmd"` - Alg interface{} `json:"alg"` - Rtype int `json:"rtype"` - Rurl interface{} `json:"rurl"` - Mst int `json:"mst"` - Cp int `json:"cp"` - Mv int `json:"mv"` - PublishTime int64 `json:"publishTime"` - Tns []string `json:"tns,omitempty"` + Sq any `json:"sq"` + Hr any `json:"hr"` + A any `json:"a"` + Cd string `json:"cd"` + No int `json:"no"` + RtURL any `json:"rtUrl"` + Ftype int `json:"ftype"` + RtUrls []any `json:"rtUrls"` + DjID int `json:"djId"` + Copyright int `json:"copyright"` + SID int `json:"s_id"` + Mark int `json:"mark"` + OriginCoverType int `json:"originCoverType"` + OriginSongSimpleData any `json:"originSongSimpleData"` + TagPicList any `json:"tagPicList"` + ResourceState bool `json:"resourceState"` + Version int `json:"version"` + SongJumpInfo any `json:"songJumpInfo"` + EntertainmentTags any `json:"entertainmentTags"` + Single int `json:"single"` + NoCopyrightRcmd any `json:"noCopyrightRcmd"` + Alg any `json:"alg"` + Rtype int `json:"rtype"` + Rurl any `json:"rurl"` + Mst int `json:"mst"` + Cp int `json:"cp"` + Mv int `json:"mv"` + PublishTime int64 `json:"publishTime"` + Tns []string `json:"tns,omitempty"` } `json:"tracks"` - VideoIds interface{} `json:"videoIds"` - Videos interface{} `json:"videos"` + VideoIds any `json:"videoIds"` + Videos any `json:"videos"` TrackIds []struct { - ID int `json:"id"` - V int `json:"v"` - T int `json:"t"` - At int64 `json:"at"` - Alg interface{} `json:"alg"` - UID int `json:"uid"` - RcmdReason string `json:"rcmdReason"` - Sc interface{} `json:"sc"` - Lr int `json:"lr,omitempty"` + ID int `json:"id"` + V int `json:"v"` + T int `json:"t"` + At int64 `json:"at"` + Alg any `json:"alg"` + UID int `json:"uid"` + RcmdReason string `json:"rcmdReason"` + Sc any `json:"sc"` + Lr int `json:"lr,omitempty"` } `json:"trackIds"` - ShareCount int `json:"shareCount"` - CommentCount int `json:"commentCount"` - RemixVideo interface{} `json:"remixVideo"` - SharedUsers interface{} `json:"sharedUsers"` - HistorySharedUsers interface{} `json:"historySharedUsers"` - GradeStatus string `json:"gradeStatus"` - Score interface{} `json:"score"` - AlgTags interface{} `json:"algTags"` + ShareCount int `json:"shareCount"` + CommentCount int `json:"commentCount"` + RemixVideo any `json:"remixVideo"` + SharedUsers any `json:"sharedUsers"` + HistorySharedUsers any `json:"historySharedUsers"` + GradeStatus string `json:"gradeStatus"` + Score any `json:"score"` + AlgTags any `json:"algTags"` } `json:"playlist"` - Urls interface{} `json:"urls"` + Urls any `json:"urls"` Privileges []struct { - ID int `json:"id"` - Fee int `json:"fee"` - Payed int `json:"payed"` - RealPayed int `json:"realPayed"` - St int `json:"st"` - Pl int `json:"pl"` - Dl int `json:"dl"` - Sp int `json:"sp"` - Cp int `json:"cp"` - Subp int `json:"subp"` - Cs bool `json:"cs"` - Maxbr int `json:"maxbr"` - Fl int `json:"fl"` - Pc interface{} `json:"pc"` - Toast bool `json:"toast"` - Flag int `json:"flag"` - PaidBigBang bool `json:"paidBigBang"` - PreSell bool `json:"preSell"` - PlayMaxbr int `json:"playMaxbr"` - DownloadMaxbr int `json:"downloadMaxbr"` - MaxBrLevel string `json:"maxBrLevel"` - PlayMaxBrLevel string `json:"playMaxBrLevel"` - DownloadMaxBrLevel string `json:"downloadMaxBrLevel"` - PlLevel string `json:"plLevel"` - DlLevel string `json:"dlLevel"` - FlLevel string `json:"flLevel"` - Rscl int `json:"rscl"` + ID int `json:"id"` + Fee int `json:"fee"` + Payed int `json:"payed"` + RealPayed int `json:"realPayed"` + St int `json:"st"` + Pl int `json:"pl"` + Dl int `json:"dl"` + Sp int `json:"sp"` + Cp int `json:"cp"` + Subp int `json:"subp"` + Cs bool `json:"cs"` + Maxbr int `json:"maxbr"` + Fl int `json:"fl"` + Pc any `json:"pc"` + Toast bool `json:"toast"` + Flag int `json:"flag"` + PaidBigBang bool `json:"paidBigBang"` + PreSell bool `json:"preSell"` + PlayMaxbr int `json:"playMaxbr"` + DownloadMaxbr int `json:"downloadMaxbr"` + MaxBrLevel string `json:"maxBrLevel"` + PlayMaxBrLevel string `json:"playMaxBrLevel"` + DownloadMaxBrLevel string `json:"downloadMaxBrLevel"` + PlLevel string `json:"plLevel"` + DlLevel string `json:"dlLevel"` + FlLevel string `json:"flLevel"` + Rscl int `json:"rscl"` FreeTrialPrivilege struct { - ResConsumable bool `json:"resConsumable"` - UserConsumable bool `json:"userConsumable"` - ListenType interface{} `json:"listenType"` + ResConsumable bool `json:"resConsumable"` + UserConsumable bool `json:"userConsumable"` + ListenType any `json:"listenType"` } `json:"freeTrialPrivilege"` ChargeInfoList []struct { - Rate int `json:"rate"` - ChargeURL interface{} `json:"chargeUrl"` - ChargeMessage interface{} `json:"chargeMessage"` - ChargeType int `json:"chargeType"` + Rate int `json:"rate"` + ChargeURL any `json:"chargeUrl"` + ChargeMessage any `json:"chargeMessage"` + ChargeType int `json:"chargeType"` } `json:"chargeInfoList"` } `json:"privileges"` - SharedPrivilege interface{} `json:"sharedPrivilege"` - ResEntrance interface{} `json:"resEntrance"` + SharedPrivilege any `json:"sharedPrivilege"` + ResEntrance any `json:"resEntrance"` } type topMusicInfo struct { @@ -292,26 +292,26 @@ type topMusicInfo struct { Pst int `json:"pst"` T int `json:"t"` Ar []struct { - ID int `json:"id"` - Name string `json:"name"` - Tns []interface{} `json:"tns"` - Alias []interface{} `json:"alias"` + ID int `json:"id"` + Name string `json:"name"` + Tns []any `json:"tns"` + Alias []any `json:"alias"` } `json:"ar"` - Alia []string `json:"alia"` - Pop int `json:"pop"` - St int `json:"st"` - Rt string `json:"rt"` - Fee int `json:"fee"` - V int `json:"v"` - Crbt interface{} `json:"crbt"` - Cf string `json:"cf"` + Alia []string `json:"alia"` + Pop int `json:"pop"` + St int `json:"st"` + Rt string `json:"rt"` + Fee int `json:"fee"` + V int `json:"v"` + Crbt any `json:"crbt"` + Cf string `json:"cf"` Al struct { - ID int `json:"id"` - Name string `json:"name"` - PicURL string `json:"picUrl"` - Tns []interface{} `json:"tns"` - PicStr string `json:"pic_str"` - Pic int64 `json:"pic"` + ID int `json:"id"` + Name string `json:"name"` + PicURL string `json:"picUrl"` + Tns []any `json:"tns"` + PicStr string `json:"pic_str"` + Pic int64 `json:"pic"` } `json:"al"` Dt int `json:"dt"` H struct { @@ -335,35 +335,35 @@ type topMusicInfo struct { Vd float32 `json:"vd"` Sr int `json:"sr"` } `json:"l"` - Sq interface{} `json:"sq"` - Hr interface{} `json:"hr"` - A interface{} `json:"a"` - Cd string `json:"cd"` - No int `json:"no"` - RtURL interface{} `json:"rtUrl"` - Ftype int `json:"ftype"` - RtUrls []interface{} `json:"rtUrls"` - DjID int `json:"djId"` - Copyright int `json:"copyright"` - SID int `json:"s_id"` - Mark int `json:"mark"` - OriginCoverType int `json:"originCoverType"` - OriginSongSimpleData interface{} `json:"originSongSimpleData"` - TagPicList interface{} `json:"tagPicList"` - ResourceState bool `json:"resourceState"` - Version int `json:"version"` - SongJumpInfo interface{} `json:"songJumpInfo"` - EntertainmentTags interface{} `json:"entertainmentTags"` - AwardTags interface{} `json:"awardTags"` - Single int `json:"single"` - NoCopyrightRcmd interface{} `json:"noCopyrightRcmd"` - Rtype int `json:"rtype"` - Rurl interface{} `json:"rurl"` - Mst int `json:"mst"` - Cp int `json:"cp"` - Mv int `json:"mv"` - PublishTime int64 `json:"publishTime"` - Tns []string `json:"tns,omitempty"` + Sq any `json:"sq"` + Hr any `json:"hr"` + A any `json:"a"` + Cd string `json:"cd"` + No int `json:"no"` + RtURL any `json:"rtUrl"` + Ftype int `json:"ftype"` + RtUrls []any `json:"rtUrls"` + DjID int `json:"djId"` + Copyright int `json:"copyright"` + SID int `json:"s_id"` + Mark int `json:"mark"` + OriginCoverType int `json:"originCoverType"` + OriginSongSimpleData any `json:"originSongSimpleData"` + TagPicList any `json:"tagPicList"` + ResourceState bool `json:"resourceState"` + Version int `json:"version"` + SongJumpInfo any `json:"songJumpInfo"` + EntertainmentTags any `json:"entertainmentTags"` + AwardTags any `json:"awardTags"` + Single int `json:"single"` + NoCopyrightRcmd any `json:"noCopyrightRcmd"` + Rtype int `json:"rtype"` + Rurl any `json:"rurl"` + Mst int `json:"mst"` + Cp int `json:"cp"` + Mv int `json:"mv"` + PublishTime int64 `json:"publishTime"` + Tns []string `json:"tns,omitempty"` } `json:"songs"` Privileges []struct { ID int `json:"id"` @@ -391,15 +391,15 @@ type topMusicInfo struct { FlLevel string `json:"flLevel"` Rscl int `json:"rscl"` FreeTrialPrivilege struct { - ResConsumable bool `json:"resConsumable"` - UserConsumable bool `json:"userConsumable"` - ListenType interface{} `json:"listenType"` + ResConsumable bool `json:"resConsumable"` + UserConsumable bool `json:"userConsumable"` + ListenType any `json:"listenType"` } `json:"freeTrialPrivilege"` ChargeInfoList []struct { - Rate int `json:"rate"` - ChargeURL interface{} `json:"chargeUrl"` - ChargeMessage interface{} `json:"chargeMessage"` - ChargeType int `json:"chargeType"` + Rate int `json:"rate"` + ChargeURL any `json:"chargeUrl"` + ChargeMessage any `json:"chargeMessage"` + ChargeType int `json:"chargeType"` } `json:"chargeInfoList"` } `json:"privileges"` Code int `json:"code"` diff --git a/plugin/score/model.go b/plugin/score/model.go index 553f285b..90280907 100644 --- a/plugin/score/model.go +++ b/plugin/score/model.go @@ -83,7 +83,7 @@ func (sdb *scoredb) InsertOrUpdateScoreByUID(uid int64, score int) (err error) { } } else { err = db.Model(&scoretable{}).Where("uid = ? ", uid).Update( - map[string]interface{}{ + map[string]any{ "score": score, }).Error } @@ -111,7 +111,7 @@ func (sdb *scoredb) InsertOrUpdateSignInCountByUID(uid int64, count int) (err er } } else { err = db.Model(&signintable{}).Where("uid = ? ", uid).Update( - map[string]interface{}{ + map[string]any{ "count": count, }).Error } diff --git a/plugin/sleep_manage/model.go b/plugin/sleep_manage/model.go index dc5e25b3..7381138f 100644 --- a/plugin/sleep_manage/model.go +++ b/plugin/sleep_manage/model.go @@ -77,7 +77,7 @@ func (sdb *sleepdb) sleep(gid, uid int64) (position int, awakeTime time.Duration log.Debugln("sleeptime为", st) awakeTime = now.Sub(st.SleepTime) db.Model(&SleepManage{}).Where("group_id = ? and user_id = ?", gid, uid).Update( - map[string]interface{}{ + map[string]any{ "sleep_time": now, }) } @@ -104,7 +104,7 @@ func (sdb *sleepdb) getUp(gid, uid int64) (position int, sleepTime time.Duration log.Debugln("sleeptime为", st) sleepTime = now.Sub(st.SleepTime) db.Model(&SleepManage{}).Where("group_id = ? and user_id = ?", gid, uid).Update( - map[string]interface{}{ + map[string]any{ "sleep_time": now, }) } diff --git a/plugin/vtb_quotation/model/model.go b/plugin/vtb_quotation/model/model.go index 10dd3323..8bc4d7c4 100644 --- a/plugin/vtb_quotation/model/model.go +++ b/plugin/vtb_quotation/model/model.go @@ -223,7 +223,7 @@ func (vdb *VtbDB) GetVtbList() (uidList []string, err error) { } } else { db.Model(&FirstCategory{}).Where("first_category_uid = ?", fc.FirstCategoryUID).Update( - map[string]interface{}{ + map[string]any{ "first_category_index": i, "first_category_name": item.Get("name").String(), "first_category_description": item.Get("description").String(), @@ -283,7 +283,7 @@ func (vdb *VtbDB) StoreVtb(uid string) (err error) { } } else { db.Model(&SecondCategory{}).Where("first_category_uid = ? and second_category_index = ?", uid, secondIndex).Update( - map[string]interface{}{ + map[string]any{ "second_category_name": secondItem.Get("categoryName").String(), "second_category_author": secondItem.Get("author").String(), "second_category_description": secondItem.Get("categoryDescription.zh-CN").String(), @@ -313,7 +313,7 @@ func (vdb *VtbDB) StoreVtb(uid string) (err error) { } else { db.Model(&ThirdCategory{}).Where("first_category_uid = ? and second_category_index = ? and third_category_index = ?", uid, secondIndex, thirdIndex).Update( - map[string]interface{}{ + map[string]any{ "third_category_name": thirdItem.Get("name").String(), "third_category_description": thirdItem.Get("description.zh-CN").String(), "third_category_path": thirdItem.Get("path").String(), diff --git a/plugin/ymgal/model.go b/plugin/ymgal/model.go index 3477e398..a8704a0d 100644 --- a/plugin/ymgal/model.go +++ b/plugin/ymgal/model.go @@ -69,7 +69,7 @@ func (gdb *ymgaldb) insertOrUpdateYmgalByID(id int64, title, pictureType, pictur err = db.Model(&ymgal{}).Create(&y).Error // newUser not user } } else { - err = db.Model(&ymgal{}).Where("id = ? ", id).Update(map[string]interface{}{ + err = db.Model(&ymgal{}).Where("id = ? ", id).Update(map[string]any{ "title": title, "picture_type": pictureType, "picture_description": pictureDescription,