feat: 优化 BeatLeader 和 ScoreSaber 数据查询逻辑,新增数据变更检测方法

This commit is contained in:
lixiangwuxian
2025-03-08 19:01:47 +08:00
parent fcc99efe7e
commit b0892412ce
5 changed files with 96 additions and 53 deletions

View File

@@ -12,26 +12,6 @@ type Command struct {
CommandData CommandData `json:"commandData"`
}
func (c Command) ToString() string {
if c.CommandName != "score" {
return ""
}
strWithRank := "%s 使用 %s 在 %s 的 %s 难度(%.1f🌟)中取得了排名第%d的成绩pp 为%.2f。"
strWithoutRank := "%s 使用 %s 在 %s 的 %s 难度中取得了排名第%d的成绩。"
strWithOutDevice := "%s 在 %s 的 %s 难度(%.1f🌟)中取得了排名第%d的成绩pp 为%.2f。"
strWithOutDeviceAndRank := "%s 在 %s 的 %s 难度(%.1f🌟)中取得了排名第%d的成绩。"
hardStr := strings.Split(c.CommandData.Leaderboard.Difficulty.DifficultyRaw, "_")[1]
if c.CommandData.Leaderboard.Ranked && c.CommandData.Score.DeviceHmd != nil {
return fmt.Sprintf(strWithRank, c.CommandData.Score.LeaderboardPlayerInfo.Name, *c.CommandData.Score.DeviceHmd, c.CommandData.Leaderboard.SongName, hardStr, c.CommandData.Leaderboard.Stars, c.CommandData.Score.Rank, c.CommandData.Score.Pp)
} else if !c.CommandData.Leaderboard.Ranked && c.CommandData.Score.DeviceHmd != nil {
return fmt.Sprintf(strWithoutRank, c.CommandData.Score.LeaderboardPlayerInfo.Name, *c.CommandData.Score.DeviceHmd, c.CommandData.Leaderboard.SongName, hardStr, c.CommandData.Score.Rank)
} else if c.CommandData.Leaderboard.Ranked && c.CommandData.Score.DeviceHmd == nil {
return fmt.Sprintf(strWithOutDevice, c.CommandData.Score.LeaderboardPlayerInfo.Name, c.CommandData.Leaderboard.SongName, hardStr, c.CommandData.Leaderboard.Stars, c.CommandData.Score.Rank, c.CommandData.Score.Pp)
} else {
return fmt.Sprintf(strWithOutDeviceAndRank, c.CommandData.Score.LeaderboardPlayerInfo.Name, c.CommandData.Leaderboard.SongName, hardStr, c.CommandData.Leaderboard.Stars, c.CommandData.Score.Rank)
}
}
// type Badge struct {
// Description string `json:"description"`
// Image string `json:"image"`
@@ -228,6 +208,15 @@ type PlayerDataLite struct {
GeneratedTime string `json:"generatedTime" db:"generated_time"`
}
func (p PlayerDataLite) IsDiffFrom(p2 PlayerDataLite) bool {
return p.TotalScore != p2.TotalScore ||
p.TotalRankedScore != p2.TotalRankedScore ||
p.AverageRankedAccuracy != p2.AverageRankedAccuracy ||
p.TotalPlayCount != p2.TotalPlayCount ||
p.RankedPlayCount != p2.RankedPlayCount ||
p.ReplaysWatched != p2.ReplaysWatched
}
func (p PlayerData) ToString() string {
formatedStr := "玩家 %s\n" +
"区域 %s\n" +
@@ -235,8 +224,8 @@ func (p PlayerData) ToString() string {
"全球排名 %d\n" +
"区域排名 %d\n" +
"Ranked谱面均准 %.2f%%\n" +
"总游玩数 %d\n" +
"Ranked谱面游玩数 %d\n" +
"总游玩数 %d\n" +
"Ranked谱面游玩数 %d\n" +
"回放被观看次数 %d"
return fmt.Sprintf(formatedStr,
p.Name,
@@ -257,8 +246,8 @@ func (p PlayerDataLite) ToString() string {
"全球排名 %d\n" +
"区域排名 %d\n" +
"Ranked谱面均准 %.2f%%\n" +
"总游玩数 %d\n" +
"Ranked谱面游玩数 %d\n" +
"总游玩数 %d\n" +
"Ranked谱面游玩数 %d\n" +
"回放被观看次数 %d"
return fmt.Sprintf(formatedStr,
p.Name,
@@ -279,8 +268,8 @@ func (p PlayerData) LastDiffToString(lastDayQueryData PlayerDataLite) string {
"全球排名 %d(%+d)\n" +
"区域排名 %d(%+d)\n" +
"Ranked谱面均准 %.2f%%(%+.2f%%)\n" +
"总游玩数 %d(%+d)\n" +
"Ranked谱面游玩数 %d(%+d)\n" +
"总游玩数 %d(%+d)\n" +
"Ranked谱面游玩数 %d(%+d)\n" +
"回放被观看次数 %d"
return fmt.Sprintf(formatedStr,
p.Name,