refactor: 优化 getMySSPic 函数,支持从消息中提取用户ID并处理头像为 nil 的情况,同时调整数据获取逻辑以提升代码灵活性
This commit is contained in:
@@ -289,6 +289,26 @@ type PlayerData struct {
|
||||
// Clans []string `json:"clans"`
|
||||
}
|
||||
|
||||
func (p PlayerData) ToDataLite() PlayerDataLite {
|
||||
dataLite := PlayerDataLite{
|
||||
ID: p.ID,
|
||||
Name: p.Name,
|
||||
Country: p.Country,
|
||||
Avatar: p.Avatar,
|
||||
PP: p.AccPp + p.PassPp + p.TechPp,
|
||||
Rank: p.Rank,
|
||||
CountryRank: p.CountryRank,
|
||||
TotalScore: p.ScoreStats.TotalScore,
|
||||
TotalRankedScore: p.ScoreStats.TotalRankedScore,
|
||||
AverageRankedAccuracy: p.ScoreStats.AverageRankedAccuracy,
|
||||
TotalPlayCount: p.ScoreStats.TotalPlayCount,
|
||||
RankedPlayCount: p.ScoreStats.RankedPlayCount,
|
||||
ReplaysWatched: p.ScoreStats.WatchedReplays,
|
||||
GeneratedTime: time.Now().Format("2006-01-02 15:04:05.999999999-07:00"),
|
||||
}
|
||||
return dataLite
|
||||
}
|
||||
|
||||
type LinkedIDs struct {
|
||||
QuestID int `json:"questId"`
|
||||
SteamID string `json:"steamId"`
|
||||
@@ -413,46 +433,7 @@ func (p PlayerDataLite) IsDiffFrom(p2 PlayerDataLite) bool {
|
||||
p.ReplaysWatched != p2.ReplaysWatched
|
||||
}
|
||||
|
||||
func (p PlayerData) ToString() 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,
|
||||
},
|
||||
}
|
||||
formatedStr := "玩家 %s\n" +
|
||||
picMsg.ToCQString() +
|
||||
"区域 %s\n" +
|
||||
"PP %.1f\n" +
|
||||
"全球排名 %d\n" +
|
||||
"区域排名 %d\n" +
|
||||
"Ranked谱面均准 %.2f%%\n" +
|
||||
"总游玩记数 %d\n" +
|
||||
"Ranked谱面游玩记数 %d\n" +
|
||||
"回放被观看次数 %d"
|
||||
return fmt.Sprintf(formatedStr,
|
||||
p.Name,
|
||||
p.Country,
|
||||
p.PP,
|
||||
p.Rank,
|
||||
p.CountryRank,
|
||||
p.ScoreStats.AverageRankedAccuracy*100,
|
||||
p.ScoreStats.TotalPlayCount,
|
||||
p.ScoreStats.RankedPlayCount,
|
||||
p.ScoreStats.WatchedReplays)
|
||||
}
|
||||
|
||||
func (p PlayerDataLite) LastDiffToString(lastDayQueryData PlayerDataLite) string {
|
||||
func (p PlayerDataLite) LastDiffToString(lastQueryData PlayerDataLite) string {
|
||||
filePath, err := util.DownloadFile(p.Avatar, "/tmp/qqbot", false)
|
||||
if err != nil {
|
||||
log.Default().Printf("下载头像失败,url:%s,err:%v", p.Avatar, err)
|
||||
@@ -475,13 +456,13 @@ func (p PlayerDataLite) LastDiffToString(lastDayQueryData PlayerDataLite) string
|
||||
sb.WriteString(fmt.Sprintf("区域 %s\n", p.Country))
|
||||
|
||||
// PP值
|
||||
ppDiff := p.PP - lastDayQueryData.PP
|
||||
ppDiff := p.PP - lastQueryData.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
|
||||
rankDiff := lastQueryData.Rank - p.Rank
|
||||
if rankDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("全球排名 %d\n", p.Rank))
|
||||
} else {
|
||||
@@ -489,7 +470,7 @@ func (p PlayerDataLite) LastDiffToString(lastDayQueryData PlayerDataLite) string
|
||||
}
|
||||
|
||||
// 区域排名
|
||||
countryRankDiff := lastDayQueryData.CountryRank - p.CountryRank
|
||||
countryRankDiff := lastQueryData.CountryRank - p.CountryRank
|
||||
if countryRankDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("区域排名 %d\n", p.CountryRank))
|
||||
} else {
|
||||
@@ -497,14 +478,14 @@ func (p PlayerDataLite) LastDiffToString(lastDayQueryData PlayerDataLite) string
|
||||
}
|
||||
|
||||
// Ranked谱面均准
|
||||
accDiff := (p.AverageRankedAccuracy - lastDayQueryData.AverageRankedAccuracy) * 100
|
||||
accDiff := (p.AverageRankedAccuracy - lastQueryData.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
|
||||
totalPlayDiff := p.TotalPlayCount - lastQueryData.TotalPlayCount
|
||||
if totalPlayDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("总游玩记数 %d\n", p.TotalPlayCount))
|
||||
} else {
|
||||
@@ -512,7 +493,7 @@ func (p PlayerDataLite) LastDiffToString(lastDayQueryData PlayerDataLite) string
|
||||
}
|
||||
|
||||
// Ranked谱面游玩记数
|
||||
rankedPlayDiff := p.RankedPlayCount - lastDayQueryData.RankedPlayCount
|
||||
rankedPlayDiff := p.RankedPlayCount - lastQueryData.RankedPlayCount
|
||||
if rankedPlayDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("Ranked谱面游玩记数 %d\n", p.RankedPlayCount))
|
||||
} else {
|
||||
@@ -524,7 +505,7 @@ func (p PlayerDataLite) LastDiffToString(lastDayQueryData PlayerDataLite) string
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
func (p PlayerDataLite) LastDiffToImage(lastDayQueryData PlayerDataLite) string {
|
||||
func (p PlayerDataLite) LastDiffToImage(lastQueryData PlayerDataLite) string {
|
||||
filePath, err := util.DownloadFile(p.Avatar, "/tmp/qqbot", false)
|
||||
if err != nil {
|
||||
log.Default().Printf("下载头像失败,url:%s,err:%v", p.Avatar, err)
|
||||
@@ -550,54 +531,54 @@ func (p PlayerDataLite) LastDiffToImage(lastDayQueryData PlayerDataLite) string
|
||||
var sb strings.Builder
|
||||
sb.WriteString(fmt.Sprintf("玩家 %s\n", p.Name))
|
||||
sb.WriteString(fmt.Sprintf("区域 %s\n", p.Country))
|
||||
{
|
||||
// PP值
|
||||
ppDiff := p.PP - lastQueryData.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 := lastQueryData.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))
|
||||
}
|
||||
|
||||
// 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 := lastQueryData.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))
|
||||
}
|
||||
|
||||
// 区域排名
|
||||
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 - lastQueryData.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 - lastQueryData.TotalPlayCount
|
||||
if totalPlayDiff == 0 {
|
||||
sb.WriteString(fmt.Sprintf("总游玩记数 %d\n", p.TotalPlayCount))
|
||||
} else {
|
||||
sb.WriteString(fmt.Sprintf("总游玩记数 %d(%+d)\n", p.TotalPlayCount, totalPlayDiff))
|
||||
}
|
||||
|
||||
// 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))
|
||||
// Ranked谱面游玩记数
|
||||
rankedPlayDiff := p.RankedPlayCount - lastQueryData.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))
|
||||
}
|
||||
// 总游玩记数
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user