feat: 添加查bl图命令以获取最新分数截图,并优化头像处理逻辑,使用新的图片缩放方法
This commit is contained in:
@@ -2,11 +2,16 @@ package beatleader
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/draw"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.lxtend.com/lixiangwuxian/imagedd/font2img"
|
||||
"git.lxtend.com/lixiangwuxian/imagedd/sprite"
|
||||
"git.lxtend.com/qqbot/message"
|
||||
"git.lxtend.com/qqbot/util"
|
||||
)
|
||||
@@ -415,7 +420,7 @@ func (p PlayerData) ToString() string {
|
||||
log.Default().Printf("下载头像失败,url:%s,err:%v", p.Avatar, err)
|
||||
}
|
||||
defer os.Remove(filePath)
|
||||
outFile, err := util.ResizeImageByMaxHeight(filePath, 20)
|
||||
outFile, err := util.ResizeImageByMaxHeight2File(filePath, 20)
|
||||
if err != nil {
|
||||
log.Default().Printf("缩放头像失败,url:%s,err:%v", p.Avatar, err)
|
||||
}
|
||||
@@ -453,7 +458,7 @@ func (p PlayerDataLite) LastDiffToString(lastDayQueryData PlayerDataLite) string
|
||||
log.Default().Printf("下载头像失败,url:%s,err:%v", p.Avatar, err)
|
||||
}
|
||||
defer os.Remove(filePath)
|
||||
outFile, err := util.ResizeImageByMaxHeight(filePath, 20)
|
||||
outFile, err := util.ResizeImageByMaxHeight2File(filePath, 20)
|
||||
if err != nil {
|
||||
log.Default().Printf("缩放头像失败,url:%s,err:%v", p.Avatar, err)
|
||||
}
|
||||
@@ -519,6 +524,113 @@ func (p PlayerDataLite) LastDiffToString(lastDayQueryData PlayerDataLite) string
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
func (p PlayerDataLite) LastDiffToImage(lastDayQueryData PlayerDataLite) string {
|
||||
filePath, err := util.DownloadFile(p.Avatar, "/tmp/qqbot", false)
|
||||
if err != nil {
|
||||
log.Default().Printf("下载头像失败,url:%s,err:%v", p.Avatar, err)
|
||||
}
|
||||
defer os.Remove(filePath)
|
||||
// outFile, err := util.ResizeImageByMaxHeight2File(filePath, 20)
|
||||
// if err != nil {
|
||||
// log.Default().Printf("缩放头像失败,url:%s,err:%v", p.Avatar, err)
|
||||
// }
|
||||
// picMsg := message.ImageMessage{
|
||||
// Type: message.TypeImage,
|
||||
// Data: message.ImageMessageData{
|
||||
// File: outFile,
|
||||
// },
|
||||
// }
|
||||
|
||||
baseboard := sprite.NewNamedSpriteBoard()
|
||||
background := image.NewRGBA(image.Rect(0, 0, 500, 1000))
|
||||
draw.Draw(background, background.Bounds(), image.White, image.Point{}, draw.Src)
|
||||
backgroundSpirit := sprite.Sprite{
|
||||
Name: "background",
|
||||
Image: background,
|
||||
Index: 0,
|
||||
}
|
||||
baseboard.AddSprite(&backgroundSpirit)
|
||||
avatar, err := util.ResizeImageByMaxHeight2Image(filePath, 20)
|
||||
if err != nil {
|
||||
log.Default().Printf("缩放头像失败,url:%s,err:%v", p.Avatar, err)
|
||||
}
|
||||
avatarSpirit := sprite.Sprite{
|
||||
Name: "avatar",
|
||||
Image: avatar,
|
||||
Index: 1,
|
||||
}
|
||||
baseboard.AddSprite(&avatarSpirit)
|
||||
|
||||
var sb strings.Builder
|
||||
sb.WriteString(fmt.Sprintf("玩家 %s\n", p.Name))
|
||||
sb.WriteString(fmt.Sprintf("区域 %s\n", p.Country))
|
||||
|
||||
// PP值
|
||||
ppDiff := p.PP - lastDayQueryData.PP
|
||||
if ppDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("PP %.1f\n", p.PP))
|
||||
} else {
|
||||
sb.WriteString(fmt.Sprintf("PP %.1f(%+.1f)\n", p.PP, ppDiff))
|
||||
} // 全球排名
|
||||
rankDiff := lastDayQueryData.Rank - p.Rank
|
||||
if rankDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("全球排名 %d\n", p.Rank))
|
||||
} else {
|
||||
sb.WriteString(fmt.Sprintf("全球排名 %d(%+d)\n", p.Rank, rankDiff))
|
||||
}
|
||||
|
||||
// 区域排名
|
||||
countryRankDiff := lastDayQueryData.CountryRank - p.CountryRank
|
||||
if countryRankDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("区域排名 %d\n", p.CountryRank))
|
||||
} else {
|
||||
sb.WriteString(fmt.Sprintf("区域排名 %d(%+d)\n", p.CountryRank, countryRankDiff))
|
||||
}
|
||||
|
||||
// Ranked谱面均准
|
||||
accDiff := (p.AverageRankedAccuracy - lastDayQueryData.AverageRankedAccuracy) * 100
|
||||
if accDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("Ranked谱面均准 %.2f%%\n", p.AverageRankedAccuracy*100))
|
||||
} else {
|
||||
sb.WriteString(fmt.Sprintf("Ranked谱面均准 %.2f%%(%+.2f%%)\n", p.AverageRankedAccuracy*100, accDiff))
|
||||
}
|
||||
// 总游玩记数
|
||||
totalPlayDiff := p.TotalPlayCount - lastDayQueryData.TotalPlayCount
|
||||
if totalPlayDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("总游玩记数 %d\n", p.TotalPlayCount))
|
||||
} else {
|
||||
sb.WriteString(fmt.Sprintf("总游玩记数 %d(%+d)\n", p.TotalPlayCount, totalPlayDiff))
|
||||
}
|
||||
|
||||
// Ranked谱面游玩记数
|
||||
rankedPlayDiff := p.RankedPlayCount - lastDayQueryData.RankedPlayCount
|
||||
if rankedPlayDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("Ranked谱面游玩记数 %d\n", p.RankedPlayCount))
|
||||
} else {
|
||||
sb.WriteString(fmt.Sprintf("Ranked谱面游玩记数 %d(%+d)\n", p.RankedPlayCount, rankedPlayDiff))
|
||||
}
|
||||
// 回放被观看次数
|
||||
sb.WriteString(fmt.Sprintf("回放被观看次数 %d", p.ReplaysWatched))
|
||||
|
||||
text := sb.String()
|
||||
textImg, err := font2img.RenderTextToTrimmedImage(nil, text, 12, color.Black, 0, 0)
|
||||
if err != nil {
|
||||
log.Default().Printf("渲染文字失败,err:%v", err)
|
||||
}
|
||||
textSpirit := sprite.Sprite{
|
||||
Name: "text",
|
||||
Image: textImg,
|
||||
Index: 2,
|
||||
Position: image.Point{X: 23, Y: 23},
|
||||
}
|
||||
baseboard.AddSprite(&textSpirit)
|
||||
|
||||
if err := baseboard.SaveToPng(util.GenTempFilePath("cbl.png")); err != nil {
|
||||
log.Default().Printf("保存图片失败,err:%v", err)
|
||||
}
|
||||
return util.GenTempFilePath("cbl.png")
|
||||
}
|
||||
|
||||
func GetControllerStr(controller int) string {
|
||||
switch controller {
|
||||
case 1:
|
||||
|
||||
Reference in New Issue
Block a user