mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 13:59:39 +08:00
🎨 查成分增加可选择查uid (#214)
* ✨ 查成分添加注册日期信息 * 🐛 修复头像是webp图片使用不了的问题 * 🎨 查成分增加可选择查uid
This commit is contained in:
parent
3b277b0eb0
commit
c3582637df
@ -3,13 +3,11 @@ package bilibili
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/FloatTech/zbputils/binary"
|
"github.com/FloatTech/zbputils/binary"
|
||||||
"github.com/FloatTech/zbputils/web"
|
"github.com/FloatTech/zbputils/web"
|
||||||
"github.com/tidwall/gjson"
|
"github.com/tidwall/gjson"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -43,17 +41,6 @@ func search(keyword string) (r []searchResult, err error) {
|
|||||||
return
|
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 {
|
type follower struct {
|
||||||
Mid int `json:"mid"`
|
Mid int `json:"mid"`
|
||||||
Uname string `json:"uname"`
|
Uname string `json:"uname"`
|
||||||
@ -115,6 +102,7 @@ type userinfo struct {
|
|||||||
Mid string `json:"mid"`
|
Mid string `json:"mid"`
|
||||||
Face string `json:"face"`
|
Face string `json:"face"`
|
||||||
Fans int64 `json:"fans"`
|
Fans int64 `json:"fans"`
|
||||||
|
Regtime int64 `json:"regtime"`
|
||||||
Attentions []int64 `json:"attentions"`
|
Attentions []int64 `json:"attentions"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import (
|
|||||||
"image/color"
|
"image/color"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
@ -35,6 +36,7 @@ var engine = control.Register("bilibili", &control.Options{
|
|||||||
"- 更新vup",
|
"- 更新vup",
|
||||||
PublicDataFolder: "Bilibili",
|
PublicDataFolder: "Bilibili",
|
||||||
})
|
})
|
||||||
|
var re = regexp.MustCompile(`^\d+$`)
|
||||||
|
|
||||||
// 查成分的
|
// 查成分的
|
||||||
func init() {
|
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) {
|
Handle(func(ctx *zero.Ctx) {
|
||||||
keyword := ctx.State["regex_matched"].([]string)[1]
|
id := ctx.State["uid"].(string)
|
||||||
searchRes, err := search(keyword)
|
|
||||||
if err != nil {
|
|
||||||
ctx.SendChain(message.Text("ERROR:", err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
id := strconv.FormatInt(searchRes[0].Mid, 10)
|
|
||||||
today := time.Now().Format("20060102")
|
today := time.Now().Format("20060102")
|
||||||
drawedFile := cachePath + id + today + "vupLike.png"
|
drawedFile := cachePath + id + today + "vupLike.png"
|
||||||
if file.IsExist(drawedFile) {
|
if file.IsExist(drawedFile) {
|
||||||
@ -169,7 +165,7 @@ func init() {
|
|||||||
ctx.SendChain(message.Text("ERROR:", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
back = img.Limit(back, backX, backY)
|
back = img.Size(back, backX, backY).Im
|
||||||
}
|
}
|
||||||
if len(vups) > 50 {
|
if len(vups) > 50 {
|
||||||
ctx.SendChain(message.Text(u.Name + "关注的up主太多了,只展示前50个up"))
|
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", u.Fans), 550, 240-h)
|
||||||
canvas.DrawString(fmt.Sprintf("关注:%d", len(u.Attentions)), 1000, 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)
|
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)
|
regtime := time.Unix(u.Regtime, 0).Format("2006-01-02 15:04:05")
|
||||||
if err != nil {
|
|
||||||
ctx.SendChain(message.Text("ERROR:", err))
|
|
||||||
}
|
|
||||||
canvas.DrawString("注册日期:"+regtime, 550, 400-h)
|
canvas.DrawString("注册日期:"+regtime, 550, 400-h)
|
||||||
canvas.DrawString("查询日期:"+time.Now().Format("2006-01-02"), 550, 480-h)
|
canvas.DrawString("查询日期:"+time.Now().Format("2006-01-02"), 550, 480-h)
|
||||||
for i, v := range vups {
|
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])
|
b, g, r := int64(buf[0]), int64(buf[1]), int64(buf[2])
|
||||||
return r, g, b
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user