refactor: 优化 getMySSPic 函数,支持从消息中提取用户ID并处理头像为 nil 的情况,同时调整数据获取逻辑以提升代码灵活性

This commit is contained in:
lixiangwuxian
2025-05-11 02:12:13 +08:00
parent f20edf3e78
commit 22f09b7097
7 changed files with 301 additions and 177 deletions

View File

@@ -17,7 +17,7 @@ import (
)
func init() {
handler.RegisterHandler("查ss", getSSProfile, constants.LEVEL_USER)
handler.RegisterHandler("查ss", getMySSPic, constants.LEVEL_USER)
handler.RegisterHelpInform("查ss", "scoresaber", " 查看您的最新分数")
handler.RegisterHandler("绑定ss", bindSS, constants.LEVEL_USER)
handler.RegisterHelpInform("绑定ss", "scoresaber", "绑定您的scoresaber账号")
@@ -75,7 +75,7 @@ func ssPlusN(msg model.Message) (reply *model.Reply) {
FromMsg: msg,
}
}
var userInfo scoresaber.PlayerData
var userInfo *scoresaber.PlayerData
for attempts < maxRetries {
err = nil
userInfo, err = scoresaber.FetchPlayerData(userSSID)
@@ -163,7 +163,7 @@ func ssPlusN(msg model.Message) (reply *model.Reply) {
}
}
func getSSProfile(msg model.Message) (reply *model.Reply) {
func getMySSPic(msg model.Message) (reply *model.Reply) {
var (
resultStr string
err error
@@ -171,32 +171,24 @@ func getSSProfile(msg model.Message) (reply *model.Reply) {
attempts = 0
noUpdate = false
)
var ssId string
var userIdStr string
if len(msg.RawMsg) > len("查ss ") {
ssId = strings.Split(msg.RawMsg, " ")[1]
userIdStr = strings.Split(msg.RawMsg, " ")[1]
noUpdate = true
} else {
userIdStr = strconv.Itoa(int(msg.UserId))
}
userIdStr := strconv.Itoa(int(msg.UserId))
var data *scoresaber.PlayerDataLite
var lastData *scoresaber.PlayerDataLite
for attempts < maxRetries {
err = nil
if ssId == "" {
ssId, err = scoresaber.GetSSID(userIdStr)
}
if err != nil {
return &model.Reply{
ReplyMsg: "您未绑定ss账号输入\"绑定ss [ssId]\"绑定(ssId为您的scoresaber主页链接中的数字部分)",
ReferOriginMsg: true,
FromMsg: msg,
}
}
if !noUpdate {
resultStr, err = scoresaber.SSQuery.GetScore(ssId)
if noUpdate {
data, err = scoresaber.SSQuery.GetScoreWithoutUpdate(userIdStr)
} else {
resultStr, err = scoresaber.SSQuery.GetScoreWithoutUpdate(ssId)
data, lastData, err = scoresaber.SSQuery.GetScore(userIdStr)
}
if err == nil {
break
break // 成功时退出循环
}
attempts++
log.Printf("获取分数时出错,第 %d 次重试: %v", attempts, err)
@@ -204,11 +196,27 @@ func getSSProfile(msg model.Message) (reply *model.Reply) {
// 如果所有尝试都失败,返回适当的错误消息
if err != nil {
resultStr = "获取您的分数时出现问题,请稍后重试。" + err.Error()
return &model.Reply{
ReplyMsg: "获取您的分数时出现问题,请稍后重试。" + err.Error(),
ReferOriginMsg: true,
FromMsg: msg,
}
}
if lastData != nil {
resultStr = data.LastDiffToImage(*lastData)
} else {
resultStr = data.LastDiffToImage(*data)
}
imageMsg := message.ImageMessage{
Type: "image",
Data: message.ImageMessageData{
File: resultStr,
},
}
return &model.Reply{
ReplyMsg: resultStr,
ReplyMsg: imageMsg.ToCQString(),
ReferOriginMsg: true,
FromMsg: msg,
}