refactor: 修改 GetScore 函数以返回当前和历史玩家数据,优化 getMyBL 函数中的结果处理逻辑

This commit is contained in:
lixiangwuxian
2025-05-10 13:43:47 +08:00
parent 9aa41d6d3f
commit a304841f15
3 changed files with 77 additions and 33 deletions

View File

@@ -4,6 +4,7 @@ import (
"fmt"
"log"
"os"
"strings"
"time"
"git.lxtend.com/qqbot/message"
@@ -384,6 +385,7 @@ type PlayerDataLite struct {
ID string `json:"id" db:"id"`
Name string `json:"name" db:"name"`
Country string `json:"country" db:"country"`
Avatar string `json:"avatar" db:"avatar"`
Device string `json:"device" db:"device"`
PP float64 `json:"pp" db:"pp"`
Rank int `json:"rank" db:"rank"`
@@ -467,7 +469,7 @@ func (p PlayerDataLite) ToString() string {
p.ReplaysWatched)
}
func (p PlayerData) LastDiffToString(lastDayQueryData PlayerDataLite) string {
func (p PlayerDataLite) LastDiffToString(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)
@@ -483,26 +485,60 @@ func (p PlayerData) LastDiffToString(lastDayQueryData PlayerDataLite) string {
File: outFile,
},
}
formatedStr := "玩家 %s\n" +
picMsg.ToCQString() +
"区域 %s\n" +
"PP %.1f(%+.1f)\n" +
"全球排名 %d(%+d)\n" +
"区域排名 %d(%+d)\n" +
"Ranked谱面均准 %.2f%%(%+.2f%%)\n" +
"总游玩记数 %d(%+d)\n" +
"Ranked谱面游玩记数 %d(%+d)\n" +
"回放被观看次数 %d"
return fmt.Sprintf(formatedStr,
p.Name,
p.Country,
p.PP, p.PP-lastDayQueryData.PP,
p.Rank, lastDayQueryData.Rank-p.Rank,
p.CountryRank, lastDayQueryData.CountryRank-p.CountryRank,
p.ScoreStats.AverageRankedAccuracy*100, (p.ScoreStats.AverageRankedAccuracy-lastDayQueryData.AverageRankedAccuracy)*100,
p.ScoreStats.TotalPlayCount, p.ScoreStats.TotalPlayCount-lastDayQueryData.TotalPlayCount,
p.ScoreStats.RankedPlayCount, p.ScoreStats.RankedPlayCount-lastDayQueryData.RankedPlayCount,
p.ScoreStats.WatchedReplays)
var sb strings.Builder
sb.WriteString(fmt.Sprintf("玩家 %s\n", p.Name))
sb.WriteString(picMsg.ToCQString())
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))
return sb.String()
}
func GetControllerStr(controller int) string {