diff --git a/handler/beatleader/beatleader.go b/handler/beatleader/beatleader.go index 0da141c..c32da61 100644 --- a/handler/beatleader/beatleader.go +++ b/handler/beatleader/beatleader.go @@ -26,10 +26,12 @@ func init() { handler.RegisterHandler("最新bl", getMyRecentScore, constants.LEVEL_USER) handler.RegisterHelpInform("最新bl", "beatleader", "最新bl 查看您的最新游戏记录") handler.RegisterFrontMatchHandler("bl+", blPlus, constants.LEVEL_USER) - handler.RegisterHelpInform("bl+", "beatleader", "bl+ 查看您需要打多少pp才能达到当前区服的第N名") - handler.RegisterHandler("截bl", screenShotBL, constants.LEVEL_USER) - handler.RegisterHelpInform("截bl", "beatleader", "截bl 截bl 截bl主页截图") - handler.RegisterHandler("jbl", screenShotBL, constants.LEVEL_USER) + handler.RegisterHelpInform("bl+n", "beatleader", "查看您需要打多少pp才能达到当前区服的第N名") + handler.RegisterFrontMatchHandler("bl-", blPlus, constants.LEVEL_USER) + handler.RegisterHelpInform("bl-n", "beatleader", "查看落后您N名的玩家需要打多少pp才会超过您") + // handler.RegisterHandler("截bl", screenShotBL, constants.LEVEL_USER) + // handler.RegisterHandler("jbl", screenShotBL, constants.LEVEL_USER) + // handler.RegisterHelpInform("截bl", "beatleader", "截bl 截bl 截bl主页截图") } func blPlus(msg model.Message) (reply *model.Reply) { @@ -40,16 +42,31 @@ func blPlus(msg model.Message) (reply *model.Reply) { attempts = 0 ) var N int + var isPlus bool + if strings.HasPrefix(msg.RawMsg, "bl+") { + isPlus = true + } else if strings.HasPrefix(msg.RawMsg, "bl-") { + isPlus = false + } else { + return &model.Reply{ + ReplyMsg: "请输入bl+或bl-", + ReferOriginMsg: true, + FromMsg: msg, + } + } if len(msg.RawMsg) > len("bl+") { N, err = strconv.Atoi(msg.RawMsg[len("bl+"):]) if err != nil || N <= 0 { return &model.Reply{ - ReplyMsg: "请输入一个正整数", + ReplyMsg: "请输入一个整数", ReferOriginMsg: true, FromMsg: msg, } } } + if !isPlus { + N = -N + } userIdStr := strconv.Itoa(int(msg.UserId)) userBLID, err := scoresaber.GetSSID(userIdStr) if err != nil { @@ -80,7 +97,7 @@ func blPlus(msg model.Message) (reply *model.Reply) { leaderboard, err := beatleader.FetchCountryLeaderboard(userInfo.Country, userInfo.CountryRank-N, userInfo.ID) if err != nil { return &model.Reply{ - ReplyMsg: "获取当前用户所在区对应+N位的玩家列表时出现问题,请稍后重试。" + err.Error(), + ReplyMsg: "获取排行榜时出现问题,请稍后重试。" + err.Error(), ReferOriginMsg: true, FromMsg: msg, } @@ -100,7 +117,11 @@ func blPlus(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, diff --git a/handler/scoresaber/score.go b/handler/scoresaber/score.go index aebdbea..e0481d0 100644 --- a/handler/scoresaber/score.go +++ b/handler/scoresaber/score.go @@ -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,