1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-05 03:23:49 +08:00

feat: add waitSignServer (#2311)

* add: 等待签名服务器启动以后再进行注册

* add: 支持签名服务器自动注册实例

* fix

* fix: 修复获取sign 时报错

* 调整代码结构

* Update login.go

* Update main.go

* Update login.go

---------

Co-authored-by: 源文雨 <41315874+fumiama@users.noreply.github.com>
This commit is contained in:
Komei_DiSanXian 2023-08-01 09:36:57 +08:00 committed by GitHub
parent 19dd37a938
commit 13215f23c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 5 deletions

View File

@ -8,6 +8,7 @@ import (
"image"
"image/png"
"net/http"
"net/url"
"os"
"strings"
"time"
@ -20,9 +21,8 @@ import (
"github.com/tidwall/gjson"
"gopkg.ilharper.com/x/isatty"
"github.com/Mrs4s/go-cqhttp/internal/base"
"github.com/Mrs4s/go-cqhttp/global"
"github.com/Mrs4s/go-cqhttp/internal/base"
"github.com/Mrs4s/go-cqhttp/internal/download"
)
@ -273,7 +273,8 @@ func energy(uin uint64, id string, _ string, salt []byte) ([]byte, error) {
}
req := download.Request{
Method: http.MethodGet,
URL: signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v&uin=%v", id, hex.EncodeToString(salt), uin),
URL: signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v&uin=%v&android_id=%v&guid=%v",
id, hex.EncodeToString(salt), uin, utils.B2S(device.AndroidId), hex.EncodeToString(device.Guid)),
}
if base.IsBelow110 {
req.URL = signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v", id, hex.EncodeToString(salt))
@ -304,7 +305,8 @@ func sign(seq uint64, uin string, cmd string, qua string, buff []byte) (sign []b
Method: http.MethodPost,
URL: signServer + "sign",
Header: map[string]string{"Content-Type": "application/x-www-form-urlencoded"},
Body: bytes.NewReader([]byte(fmt.Sprintf("uin=%v&qua=%s&cmd=%s&seq=%v&buffer=%v", uin, qua, cmd, seq, hex.EncodeToString(buff)))),
Body: bytes.NewReader([]byte(fmt.Sprintf("uin=%v&qua=%s&cmd=%s&seq=%v&buffer=%v&android_id=%v&guid=%v",
uin, qua, cmd, seq, hex.EncodeToString(buff), utils.B2S(device.AndroidId), hex.EncodeToString(device.Guid)))),
}.Bytes()
if err != nil {
log.Warnf("获取sso sign时出现错误: %v server: %v", err, signServer)
@ -328,7 +330,7 @@ func register(uin int64, androidID, guid []byte, qimei36, key string) {
resp, err := download.Request{
Method: http.MethodGet,
URL: signServer + "register" + fmt.Sprintf("?uin=%v&android_id=%v&guid=%v&qimei36=%v&key=%s",
uin, androidID, hex.EncodeToString(guid), qimei36, key),
uin, utils.B2S(androidID), hex.EncodeToString(guid), qimei36, key),
}.Bytes()
if err != nil {
log.Warnf("注册QQ实例时出现错误: %v server: %v", err, signServer)
@ -341,3 +343,28 @@ func register(uin int64, androidID, guid []byte, qimei36, key string) {
}
log.Infof("注册QQ实例 %v 成功: %v", uin, msg)
}
func waitSignServer() bool {
t := time.NewTicker(time.Second*5)
defer t.Stop()
i := 0
for range t.C {
if i > 3 {
return false
}
i++
u, err := url.Parse(base.SignServer)
if err != nil {
log.Warnf("连接到签名服务器出现错误: %v", err)
continue
}
r := utils.RunTCPPingLoop(u.Host, 4)
if r.PacketsLoss > 0 {
log.Warnf("连接到签名服务器出现错误: 丢包%d/%d 时延%dms", r.PacketsLoss, r.PacketsSent, r.AvgTimeMill)
continue
}
break
}
log.Infof("连接至签名服务器: %s", base.SignServer)
return true
}

View File

@ -166,6 +166,10 @@ func LoginInteract() {
if base.SignServer != "-" && base.SignServer != "" {
log.Infof("使用服务器 %s 进行数据包签名", base.SignServer)
// 等待签名服务器直到连接成功
if !waitSignServer() {
log.Fatalf("连接签名服务器失败")
}
register(base.Account.Uin, device.AndroidId, device.Guid, device.QImei36, base.Key)
wrapper.DandelionEnergy = energy
wrapper.FekitGetSign = sign