feat: 更新 bl+ 和 bl- 命令的处理逻辑,支持查看当前区服的排名变化,并调整相关提示信息

This commit is contained in:
lixiangwuxian
2025-05-03 23:47:17 +08:00
parent e747be9918
commit 71f8cb1232
2 changed files with 53 additions and 11 deletions

View File

@@ -25,8 +25,10 @@ func init() {
handler.RegisterHandler("最新ss", getMyRecentScore, constants.LEVEL_USER)
handler.RegisterHelpInform("最新ss", "scoresaber", "查看您的最新游戏记录")
handler.RegisterHandler("截ss", screenshotSS, constants.LEVEL_USER)
handler.RegisterHelpInform("ss+n", "scoresaber", "区排名升高n位还需要打多少pp")
handler.RegisterHelpInform("ss+n", "scoresaber", "查看您需要打多少pp才能达到当前区服的第N名")
handler.RegisterFrontMatchHandler("ss+", ssPlusN, constants.LEVEL_USER)
handler.RegisterHelpInform("ss-n", "scoresaber", "查看落后您N名的玩家需要打多少pp才会超过您")
handler.RegisterFrontMatchHandler("ss-", ssPlusN, constants.LEVEL_USER)
}
func ssPlusN(msg model.Message) (reply *model.Reply) {
@@ -37,16 +39,31 @@ func ssPlusN(msg model.Message) (reply *model.Reply) {
attempts = 0
)
var N int
var isPlus bool
if strings.HasPrefix(msg.RawMsg, "ss+") {
isPlus = true
} else if strings.HasPrefix(msg.RawMsg, "ss-") {
isPlus = false
} else {
return &model.Reply{
ReplyMsg: "请输入ss+或ss-",
ReferOriginMsg: true,
FromMsg: msg,
}
}
if len(msg.RawMsg) > len("ss+") {
N, err = strconv.Atoi(msg.RawMsg[len("ss+"):])
if err != nil || N <= 0 {
return &model.Reply{
ReplyMsg: "请输入一个整数",
ReplyMsg: "请输入一个整数",
ReferOriginMsg: true,
FromMsg: msg,
}
}
}
if !isPlus {
N = -N
}
// 获取当前用户在区中的排名
userIdStr := strconv.Itoa(int(msg.UserId))
userSSID, err := scoresaber.GetSSID(userIdStr)
@@ -78,7 +95,7 @@ func ssPlusN(msg model.Message) (reply *model.Reply) {
leaderboard, err := scoresaber.FetchCountryLeaderboard(userInfo.Country, userInfo.CountryRank-N, userInfo.ID)
if err != nil {
return &model.Reply{
ReplyMsg: "获取您的分数时出现问题,请稍后重试。" + err.Error(),
ReplyMsg: "获取排行榜时出现问题,请稍后重试。" + err.Error(),
ReferOriginMsg: true,
FromMsg: msg,
}
@@ -98,7 +115,11 @@ func ssPlusN(msg model.Message) (reply *model.Reply) {
break
}
}
resultStr.WriteString(fmt.Sprintf("您只需要再打出%.2fpp就能达到%s区第%d名。", targetPlayer.PP-userInfo.PP, userInfo.Country, targetPlayer.CountryRank))
if isPlus {
resultStr.WriteString(fmt.Sprintf("您只需要再打出%.2fpp就能达到%s区第%d名。", targetPlayer.PP-userInfo.PP, userInfo.Country, targetPlayer.CountryRank))
} else {
resultStr.WriteString(fmt.Sprintf("%s区的第%d名是%s对面只需要再打出%.2fpp就能超过你。", userInfo.Country, targetPlayer.CountryRank, targetPlayer.Name, userInfo.PP-targetPlayer.PP))
}
return &model.Reply{
ReplyMsg: resultStr.String(),
ReferOriginMsg: true,