mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-20 06:20:08 +08:00
parent
f8c7e2bf6d
commit
5db03b0441
@ -5,6 +5,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/FloatTech/zbputils/binary"
|
"github.com/FloatTech/zbputils/binary"
|
||||||
"github.com/FloatTech/zbputils/web"
|
"github.com/FloatTech/zbputils/web"
|
||||||
@ -42,6 +43,17 @@ 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"`
|
||||||
@ -85,14 +97,14 @@ func followings(uid string) (s string, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
json := gjson.ParseBytes(body)
|
j := gjson.ParseBytes(body)
|
||||||
s = json.Get("data.list.#.uname").Raw
|
s = j.Get("data.list.#.uname").Raw
|
||||||
if json.Get("code").Int() == -101 {
|
if j.Get("code").Int() == -101 {
|
||||||
err = errNeedCookie
|
err = errNeedCookie
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if json.Get("code").Int() != 0 {
|
if j.Get("code").Int() != 0 {
|
||||||
err = errors.New(json.Get("message").String())
|
err = errors.New(j.Get("message").String())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|||||||
@ -4,8 +4,10 @@ package bilibili
|
|||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"image"
|
||||||
"image/color"
|
"image/color"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
@ -153,28 +155,29 @@ func init() {
|
|||||||
i--
|
i--
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
facePath := cachePath + id + "vupFace.png"
|
facePath := cachePath + id + "vupFace" + path.Ext(u.Face)
|
||||||
|
backX := 500
|
||||||
|
backY := 500
|
||||||
|
var back image.Image
|
||||||
|
if path.Ext(u.Face) != ".webp" {
|
||||||
err = initFacePic(facePath, u.Face)
|
err = initFacePic(facePath, u.Face)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR:", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var backX int
|
back, err = gg.LoadImage(facePath)
|
||||||
var backY int
|
|
||||||
back, err := gg.LoadImage(facePath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR:", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
back = img.Limit(back, 500, 500)
|
back = img.Limit(back, backX, backY)
|
||||||
backX = back.Bounds().Size().X
|
}
|
||||||
backY = back.Bounds().Size().Y
|
|
||||||
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"))
|
||||||
vups = vups[:50]
|
vups = vups[:50]
|
||||||
}
|
}
|
||||||
canvas := gg.NewContext(backX*3, int(float64(backY)*(1.1+float64(len(vups))/3)))
|
canvas := gg.NewContext(1500, int(500*(1.1+float64(len(vups))/3)))
|
||||||
fontSize := float64(backX) * 0.1
|
fontSize := 50.0
|
||||||
canvas.SetColor(color.White)
|
canvas.SetColor(color.White)
|
||||||
canvas.Clear()
|
canvas.Clear()
|
||||||
if back != nil {
|
if back != nil {
|
||||||
@ -192,16 +195,21 @@ func init() {
|
|||||||
sl, _ := canvas.MeasureString("好")
|
sl, _ := canvas.MeasureString("好")
|
||||||
length, h := canvas.MeasureString(u.Mid)
|
length, h := canvas.MeasureString(u.Mid)
|
||||||
n, _ := canvas.MeasureString(u.Name)
|
n, _ := canvas.MeasureString(u.Name)
|
||||||
canvas.DrawString(u.Name, float64(backX)*1.1, float64(backY)/3-h)
|
canvas.DrawString(u.Name, 550, 160-h)
|
||||||
canvas.DrawRoundedRectangle(float64(backX)*1.2+n-length*0.1, float64(backY)/3-h*2.5, length*1.2, h*2, fontSize*0.2)
|
canvas.DrawRoundedRectangle(600+n-length*0.1, 160-h*2.5, length*1.2, h*2, fontSize*0.2)
|
||||||
canvas.SetRGB255(221, 221, 221)
|
canvas.SetRGB255(221, 221, 221)
|
||||||
canvas.Fill()
|
canvas.Fill()
|
||||||
canvas.SetColor(color.Black)
|
canvas.SetColor(color.Black)
|
||||||
canvas.DrawString(u.Mid, float64(backX)*1.2+n, float64(backY)/3-h)
|
canvas.DrawString(u.Mid, 600+n, 160-h)
|
||||||
canvas.DrawString(fmt.Sprintf("粉丝:%d", u.Fans), float64(backX)*1.1, float64(backY)/3*2-2.5*h)
|
canvas.DrawString(fmt.Sprintf("粉丝:%d", u.Fans), 550, 240-h)
|
||||||
canvas.DrawString(fmt.Sprintf("关注:%d", len(u.Attentions)), float64(backX)*2, float64(backY)/3*2-2.5*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)), float64(backX)*1.1, float64(backY)-4*h)
|
canvas.DrawString(fmt.Sprintf("管人痴成分:%.2f%%(%d/%d)", float64(vupLen)/float64(len(u.Attentions))*100, vupLen, len(u.Attentions)), 550, 320-h)
|
||||||
canvas.DrawString("日期:"+time.Now().Format("2006-01-02"), float64(backX)*1.1, float64(backY)-h)
|
regtime, err := getCardByMid(u.Mid)
|
||||||
|
if err != nil {
|
||||||
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
|
}
|
||||||
|
canvas.DrawString("注册日期:"+regtime, 550, 400-h)
|
||||||
|
canvas.DrawString("查询日期:"+time.Now().Format("2006-01-02"), 550, 480-h)
|
||||||
for i, v := range vups {
|
for i, v := range vups {
|
||||||
if i%2 == 1 {
|
if i%2 == 1 {
|
||||||
canvas.SetRGB255(245, 245, 245)
|
canvas.SetRGB255(245, 245, 245)
|
||||||
@ -221,9 +229,9 @@ func init() {
|
|||||||
mnl, _ := canvas.MeasureString(m.MedalName)
|
mnl, _ := canvas.MeasureString(m.MedalName)
|
||||||
grad := gg.NewLinearGradient(nl+ml-sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-3.5*h, nl+ml+mnl+sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-1.5*h)
|
grad := gg.NewLinearGradient(nl+ml-sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-3.5*h, nl+ml+mnl+sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-1.5*h)
|
||||||
r, g, b := int2rbg(m.MedalColorStart)
|
r, g, b := int2rbg(m.MedalColorStart)
|
||||||
grad.AddColorStop(0, color.RGBA{uint8(r), uint8(g), uint8(b), 255})
|
grad.AddColorStop(0, color.RGBA{R: uint8(r), G: uint8(g), B: uint8(b), A: 255})
|
||||||
r, g, b = int2rbg(m.MedalColorEnd)
|
r, g, b = int2rbg(m.MedalColorEnd)
|
||||||
grad.AddColorStop(1, color.RGBA{uint8(r), uint8(g), uint8(b), 255})
|
grad.AddColorStop(1, color.RGBA{R: uint8(r), G: uint8(g), B: uint8(b), A: 255})
|
||||||
canvas.SetFillStyle(grad)
|
canvas.SetFillStyle(grad)
|
||||||
canvas.SetLineWidth(4)
|
canvas.SetLineWidth(4)
|
||||||
canvas.MoveTo(nl+ml-sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-3.5*h)
|
canvas.MoveTo(nl+ml-sl/2+float64(backX)*0.4, float64(backY)*1.1+float64(i+1)*float64(backY)/3-3.5*h)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user