From afd80bb1bfbcf9cf1bde7865f63570a97cfae8bd Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Mon, 24 Mar 2025 23:20:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E7=9A=84=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=AF=B9?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=BE=93=E5=85=A5=E7=9A=84=E8=AF=A6=E7=BB=86?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=EF=BC=8C=E5=90=8C=E6=97=B6=E5=9C=A8=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=8E=A9=E5=AE=B6=E6=95=B0=E6=8D=AE=E6=97=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E9=87=8D=E8=AF=95=E6=9C=BA=E5=88=B6=E4=BB=A5?= =?UTF-8?q?=E6=8F=90=E9=AB=98=E7=A8=B3=E5=AE=9A=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/beatleader/beatleader.go | 30 ------------------------------ handler/scoresaber/score.go | 2 +- service/beatleader/bind_bl.go | 21 ++++++++++++++++----- service/beatleader/user_info.go | 5 ++++- service/scoresaber/bind_ss.go | 21 ++++++++++++++++----- service/scoresaber/user_info.go | 5 ++++- 6 files changed, 41 insertions(+), 43 deletions(-) diff --git a/handler/beatleader/beatleader.go b/handler/beatleader/beatleader.go index 2756fa9..febaf31 100644 --- a/handler/beatleader/beatleader.go +++ b/handler/beatleader/beatleader.go @@ -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 := "" diff --git a/handler/scoresaber/score.go b/handler/scoresaber/score.go index 0cd42e4..18b5867 100644 --- a/handler/scoresaber/score.go +++ b/handler/scoresaber/score.go @@ -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, } diff --git a/service/beatleader/bind_bl.go b/service/beatleader/bind_bl.go index 0f5d9fa..b0e5856 100644 --- a/service/beatleader/bind_bl.go +++ b/service/beatleader/bind_bl.go @@ -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(¤tBlId) + 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) { diff --git a/service/beatleader/user_info.go b/service/beatleader/user_info.go index aca96f4..fb41129 100644 --- a/service/beatleader/user_info.go +++ b/service/beatleader/user_info.go @@ -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 } diff --git a/service/scoresaber/bind_ss.go b/service/scoresaber/bind_ss.go index 1a2c135..ad6f2dc 100644 --- a/service/scoresaber/bind_ss.go +++ b/service/scoresaber/bind_ss.go @@ -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(¤tSsId) + 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) { diff --git a/service/scoresaber/user_info.go b/service/scoresaber/user_info.go index 8ebd5fb..51e2b35 100644 --- a/service/scoresaber/user_info.go +++ b/service/scoresaber/user_info.go @@ -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 }