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

@@ -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
}