ZeroBot-Plugin/plugin/niuniu/draw.go

55 lines
1.3 KiB
Go

package niuniu
import (
"bytes"
"fmt"
"image"
"image/png"
"net/http"
"github.com/FloatTech/AnimeAPI/niu"
"github.com/FloatTech/floatbox/file"
"github.com/FloatTech/rendercard"
"github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/img/text"
zero "github.com/wdvxdr1123/ZeroBot"
)
func processRankingImg(allUsers niu.BaseInfos, ctx *zero.Ctx, t bool) ([]byte, error) {
fontByte, err := file.GetLazyData(text.GlowSansFontFile, control.Md5File, true)
if err != nil {
return nil, err
}
s := "牛牛长度"
title := "牛牛长度排行"
if !t {
s = "牛牛深度"
title = "牛牛深度排行"
}
ri := make([]*rendercard.RankInfo, len(allUsers))
for i, user := range allUsers {
resp, err := http.Get(fmt.Sprintf("https://q1.qlogo.cn/g?b=qq&nk=%d&s=100", user.UID))
if err != nil {
return nil, err
}
decode, _, err := image.Decode(resp.Body)
_ = resp.Body.Close()
if err != nil {
return nil, err
}
ri[i] = &rendercard.RankInfo{
Avatar: decode,
TopLeftText: ctx.CardOrNickName(user.UID),
BottomLeftText: fmt.Sprintf("QQ:%d", user.UID),
RightText: fmt.Sprintf("%s:%.2fcm", s, user.Length),
}
}
img, err := rendercard.DrawRankingCard(fontByte, title, ri)
if err != nil {
return nil, err
}
var buf bytes.Buffer
err = png.Encode(&buf, img)
return buf.Bytes(), err
}