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

@ -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,15 +42,30 @@ func blPlus(msg model.Message) (reply *model.Reply) {
attempts = 0
)
var N int
if len(msg.RawMsg) > len("bl+") {
N, err = strconv.Atoi(msg.RawMsg[len("bl+"):])
if err != nil || N <= 0 {
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: "请输入一个正整数",
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: "请输入一个整数",
ReferOriginMsg: true,
FromMsg: msg,
}
}
}
if !isPlus {
N = -N
}
userIdStr := strconv.Itoa(int(msg.UserId))
userBLID, err := scoresaber.GetSSID(userIdStr)
@ -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
}
}
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,

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,15 +39,30 @@ func ssPlusN(msg model.Message) (reply *model.Reply) {
attempts = 0
)
var N int
if len(msg.RawMsg) > len("ss+") {
N, err = strconv.Atoi(msg.RawMsg[len("ss+"):])
if err != nil || N <= 0 {
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: "请输入一个正整数",
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: "请输入一个整数",
ReferOriginMsg: true,
FromMsg: msg,
}
}
}
if !isPlus {
N = -N
}
// 获取当前用户在区中的排名
userIdStr := strconv.Itoa(int(msg.UserId))
@ -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
}
}
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,