From c3582637df6c59c1fa0437b0c7d4542083f9bcb8 Mon Sep 17 00:00:00 2001 From: himawari <54976075+guohuiyuan@users.noreply.github.com> Date: Fri, 6 May 2022 20:02:36 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=E6=9F=A5=E6=88=90=E5=88=86?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8F=AF=E9=80=89=E6=8B=A9=E6=9F=A5uid=20(#2?= =?UTF-8?q?14)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ 查成分添加注册日期信息 * 🐛 修复头像是webp图片使用不了的问题 * 🎨 查成分增加可选择查uid --- plugin/bilibili/api.go | 18 ++--------- plugin/bilibili/info.go | 67 +++++++++++++++++++++++++++++++++-------- 2 files changed, 57 insertions(+), 28 deletions(-) diff --git a/plugin/bilibili/api.go b/plugin/bilibili/api.go index ad5518f7..5ff8ea65 100644 --- a/plugin/bilibili/api.go +++ b/plugin/bilibili/api.go @@ -3,13 +3,11 @@ package bilibili import ( "encoding/json" "errors" - "io" - "net/http" - "time" - "github.com/FloatTech/zbputils/binary" "github.com/FloatTech/zbputils/web" "github.com/tidwall/gjson" + "io" + "net/http" ) var ( @@ -43,17 +41,6 @@ func search(keyword string) (r []searchResult, err error) { return } -// 用mid搜索,主要拿注册时间 -func getCardByMid(mid string) (t string, err error) { - requestURL := "https://account.bilibili.com/api/member/getCardByMid?mid=" + mid - data, err := web.GetData(requestURL) - if err != nil { - return - } - t = time.Unix(gjson.ParseBytes(data).Get("card.regtime").Int(), 0).Format("2006-01-02 15:04:05") - return -} - type follower struct { Mid int `json:"mid"` Uname string `json:"uname"` @@ -115,6 +102,7 @@ type userinfo struct { Mid string `json:"mid"` Face string `json:"face"` Fans int64 `json:"fans"` + Regtime int64 `json:"regtime"` Attentions []int64 `json:"attentions"` } diff --git a/plugin/bilibili/info.go b/plugin/bilibili/info.go index 4a611967..1fa93e7c 100644 --- a/plugin/bilibili/info.go +++ b/plugin/bilibili/info.go @@ -8,6 +8,7 @@ import ( "image/color" "os" "path" + "regexp" "sort" "strconv" "time" @@ -35,6 +36,7 @@ var engine = control.Register("bilibili", &control.Options{ "- 更新vup", PublicDataFolder: "Bilibili", }) +var re = regexp.MustCompile(`^\d+$`) // 查成分的 func init() { @@ -104,15 +106,9 @@ func init() { )) }) - engine.OnRegex(`^查成分\s?(.{1,25})$`, getdb).SetBlock(true). + engine.OnRegex(`^查成分\s?(.{1,25})$`, getdb, getPara).SetBlock(true). Handle(func(ctx *zero.Ctx) { - keyword := ctx.State["regex_matched"].([]string)[1] - searchRes, err := search(keyword) - if err != nil { - ctx.SendChain(message.Text("ERROR:", err)) - return - } - id := strconv.FormatInt(searchRes[0].Mid, 10) + id := ctx.State["uid"].(string) today := time.Now().Format("20060102") drawedFile := cachePath + id + today + "vupLike.png" if file.IsExist(drawedFile) { @@ -169,7 +165,7 @@ func init() { ctx.SendChain(message.Text("ERROR:", err)) return } - back = img.Limit(back, backX, backY) + back = img.Size(back, backX, backY).Im } if len(vups) > 50 { ctx.SendChain(message.Text(u.Name + "关注的up主太多了,只展示前50个up")) @@ -203,10 +199,7 @@ func init() { canvas.DrawString(fmt.Sprintf("粉丝:%d", u.Fans), 550, 240-h) canvas.DrawString(fmt.Sprintf("关注:%d", len(u.Attentions)), 1000, 240-h) canvas.DrawString(fmt.Sprintf("管人痴成分:%.2f%%(%d/%d)", float64(vupLen)/float64(len(u.Attentions))*100, vupLen, len(u.Attentions)), 550, 320-h) - regtime, err := getCardByMid(u.Mid) - if err != nil { - ctx.SendChain(message.Text("ERROR:", err)) - } + regtime := time.Unix(u.Regtime, 0).Format("2006-01-02 15:04:05") canvas.DrawString("注册日期:"+regtime, 550, 400-h) canvas.DrawString("查询日期:"+time.Now().Format("2006-01-02"), 550, 480-h) for i, v := range vups { @@ -314,3 +307,51 @@ func int2rbg(t int64) (int64, int64, int64) { b, g, r := int64(buf[0]), int64(buf[1]), int64(buf[2]) return r, g, b } + +func getPara(ctx *zero.Ctx) bool { + keyword := ctx.State["regex_matched"].([]string)[1] + if !re.MatchString(keyword) { + searchRes, err := search(keyword) + if err != nil { + ctx.SendChain(message.Text("ERROR:", err)) + return false + } + ctx.State["uid"] = strconv.FormatInt(searchRes[0].Mid, 10) + return true + } + next := zero.NewFutureEvent("message", 999, false, ctx.CheckSession()) + recv, cancel := next.Repeat() + defer cancel() + ctx.SendChain(message.Text("输入为纯数字,请选择查询uid还是用户名,输入对应序号:\n0. 查询uid\n1. 查询用户名")) + for { + select { + case <-time.After(time.Second * 10): + ctx.SendChain(message.Text("时间太久啦!", zero.BotConfig.NickName[0], "帮你选择查询uid")) + ctx.State["uid"] = keyword + return true + case c := <-recv: + msg := c.Event.Message.ExtractPlainText() + num, err := strconv.Atoi(msg) + if err != nil { + ctx.SendChain(message.Text("请输入数字!")) + continue + } + if num < 0 || num > 1 { + ctx.SendChain(message.Text("序号非法!")) + continue + } + if num == 0 { + ctx.State["uid"] = keyword + return true + } else if num == 1 { + searchRes, err := search(keyword) + if err != nil { + ctx.SendChain(message.Text("ERROR:", err)) + return false + } + ctx.State["uid"] = strconv.FormatInt(searchRes[0].Mid, 10) + return true + } + } + } +}