fix: 优化绑定功能的错误提示信息,增加了对用户输入的详细说明,同时在获取玩家数据时添加了重试机制以提高稳定性

This commit is contained in:
lixiangwuxian 2025-03-24 23:20:54 +08:00
parent f87922883e
commit afd80bb1bf
6 changed files with 41 additions and 43 deletions

View File

@ -82,36 +82,6 @@ func unbindBL(msg model.Message) (reply model.Reply) {
}
}
// func getRecentScore(msg model.Message) (reply model.Reply) {
// count := 1
// if len(msg.RawMsg) > len("最热bl ") {
// var err error
// count, err = strconv.Atoi(msg.RawMsg[len("最热bl "):])
// if err != nil || count <= 0 {
// return model.Reply{
// ReplyMsg: "",
// ReferOriginMsg: true,
// FromMsg: msg,
// }
// }
// if count > 10 {
// count = 10
// }
// }
// scoreMsg := ""
// for _, v := range beatleader.BlScoresManager.GetRecentScores(count, " WHERE country = 'CN' ") {
// scoreMsg += v.ToString() + "\n\n"
// }
// if len(scoreMsg) > 0 {
// scoreMsg = scoreMsg[:len(scoreMsg)-len("\n\n")]
// }
// return model.Reply{
// ReplyMsg: scoreMsg,
// ReferOriginMsg: true,
// FromMsg: msg,
// }
// }
func getMyRecentScore(msg model.Message) (reply model.Reply) {
count := 1
scoreMsg := ""

View File

@ -51,7 +51,7 @@ func getSSProfile(msg model.Message) (reply model.Reply) {
}
if err != nil {
return model.Reply{
ReplyMsg: "您未绑定ss账号输入\"绑定ss [ssId]\"绑定",
ReplyMsg: "您未绑定ss账号输入\"绑定ss [ssId]\"绑定(ssId为您的scoresaber主页链接中的数字部分)",
ReferOriginMsg: true,
FromMsg: msg,
}

View File

@ -81,21 +81,32 @@ func (bl *blQuery) BindBL(qqId string, blId string) (reply string) {
defer tx.Rollback()
// blId为数字
if _, isNum := strconv.Atoi(blId); isNum != nil {
return "blId格式错误,应当为一串数字(大部分情况下是你的steamID)"
return "blId格式错误,应当为一串数字(是您的beatleader主页链接中的末尾数字部分,一般和您的steamID相同)"
}
data, err := FetchPlayerData(blId)
if data == nil {
if err != nil {
return "未找到玩家,请检查ID后重试:" + err.Error()
return "请求出错,报错如下,如果确定命令没问题可以重新试试:" + err.Error()
}
return "未找到玩家,请检查ID后重试"
}
//去重
if rows, err := tx.Query("SELECT * FROM ssBind WHERE qqid = ?", qqId); err == nil {
if rows, err := tx.Query("SELECT ssid FROM ssBind WHERE qqid = ?", qqId); err == nil {
if rows.Next() {
var currentBlId string
err := rows.Scan(&currentBlId)
if err != nil {
log.Print(err)
}
rows.Close()
// 获取当前绑定账号的信息
if currentData, err := FetchPlayerData(currentBlId); err == nil && currentData != nil {
return fmt.Sprintf("您已绑定至bl账号%s,请先输入\"解绑bl\"解绑", currentData.Name)
}
return "您已绑定过bl账号,请先输入\"解绑bl\"解绑"
} else {
rows.Close()
}
rows.Close()
}
if rows, err := tx.Query("SELECT * FROM ssBind WHERE ssid = ?", blId); err == nil {
if rows.Next() {
@ -111,7 +122,7 @@ func (bl *blQuery) BindBL(qqId string, blId string) (reply string) {
if err != nil {
return "无法提交事务"
}
return "和用户名为 " + data.Name + " 的用户绑定成功,输入\"查bl\"查看个人数据"
return "和用户名为 " + data.Name + " 的用户绑定成功,同时也绑定了您的scoresaber账号。输入\"查bl\"查看个人数据"
}
func (bl *blQuery) UnbindBL(qqId string) (reply string) {

View File

@ -34,9 +34,12 @@ func FetchPlayerData(blID string) (*PlayerData, error) {
req.Header.Set("Cache-Control", "no-cache")
req.Header.Set("TE", "trailers")
// 发送请求
// 发送请求失败则重试至多3次
client := &http.Client{}
resp, err := client.Do(req)
for i := 0; i < 3 && err != nil; i++ {
resp, err = client.Do(req)
}
if err != nil {
return nil, err
}

View File

@ -87,21 +87,32 @@ func (ss *ssQuery) BindSS(qqId string, ssId string) (reply string) {
defer tx.Rollback()
// ssId为数字
if _, isNum := strconv.Atoi(ssId); isNum != nil {
return "ssId格式错误,应当为一串数字(大部分情况下是你的steamID)"
return "ssId格式错误,应当为一串数字(是您的scoresaber主页链接中的末尾数字部分,一般和您的steamID相同)"
}
data, err := FetchPlayerData(ssId)
if data == nil {
if err != nil {
return "未找到玩家,请检查ID后重试:" + err.Error()
return "请求出错,报错如下,如果确定命令没问题可以重新试试:" + err.Error()
}
return "未找到玩家,请检查ID后重试"
}
//去重
if rows, err := tx.Query("SELECT * FROM ssBind WHERE qqid = ?", qqId); err == nil {
if rows, err := tx.Query("SELECT ssid FROM ssBind WHERE qqid = ?", qqId); err == nil {
if rows.Next() {
var currentSsId string
err := rows.Scan(&currentSsId)
if err != nil {
log.Print(err)
}
rows.Close()
// 获取当前绑定账号的信息
if currentData, err := FetchPlayerData(currentSsId); err == nil && currentData != nil {
return fmt.Sprintf("您已绑定至ss账号%s,请先输入\"解绑ss\"解绑", currentData.Name)
}
return "您已绑定过ss账号,请先输入\"解绑ss\"解绑"
} else {
rows.Close()
}
rows.Close()
}
// 检查是否已绑定
if rows, err := tx.Query("SELECT * FROM ssBind WHERE ssid = ?", ssId); err == nil {
@ -118,7 +129,7 @@ func (ss *ssQuery) BindSS(qqId string, ssId string) (reply string) {
if err != nil {
return "无法提交事务"
}
return "和用户名为 " + data.Name + " 的用户绑定成功,输入\"查ss\"查看个人数据"
return "和用户名为 " + data.Name + " 的用户绑定成功,同时也绑定了您的beatleader账号。输入\"查ss\"查看个人数据"
}
func (ss *ssQuery) UnbindSS(qqId string) (reply string) {

View File

@ -34,9 +34,12 @@ func FetchPlayerData(ssID string) (*PlayerData, error) {
req.Header.Set("Cache-Control", "no-cache")
req.Header.Set("TE", "trailers")
// 发送请求
// 发送请求失败则重试至多3次
client := &http.Client{}
resp, err := client.Do(req)
for i := 0; i < 3 && err != nil; i++ {
resp, err = client.Do(req)
}
if err != nil {
return nil, err
}