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:
parent
19dd37a938
commit
13215f23c5
@ -8,6 +8,7 @@ import (
|
|||||||
"image"
|
"image"
|
||||||
"image/png"
|
"image/png"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -20,9 +21,8 @@ import (
|
|||||||
"github.com/tidwall/gjson"
|
"github.com/tidwall/gjson"
|
||||||
"gopkg.ilharper.com/x/isatty"
|
"gopkg.ilharper.com/x/isatty"
|
||||||
|
|
||||||
"github.com/Mrs4s/go-cqhttp/internal/base"
|
|
||||||
|
|
||||||
"github.com/Mrs4s/go-cqhttp/global"
|
"github.com/Mrs4s/go-cqhttp/global"
|
||||||
|
"github.com/Mrs4s/go-cqhttp/internal/base"
|
||||||
"github.com/Mrs4s/go-cqhttp/internal/download"
|
"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{
|
req := download.Request{
|
||||||
Method: http.MethodGet,
|
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 {
|
if base.IsBelow110 {
|
||||||
req.URL = signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v", id, hex.EncodeToString(salt))
|
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,
|
Method: http.MethodPost,
|
||||||
URL: signServer + "sign",
|
URL: signServer + "sign",
|
||||||
Header: map[string]string{"Content-Type": "application/x-www-form-urlencoded"},
|
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()
|
}.Bytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("获取sso sign时出现错误: %v server: %v", err, signServer)
|
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{
|
resp, err := download.Request{
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
URL: signServer + "register" + fmt.Sprintf("?uin=%v&android_id=%v&guid=%v&qimei36=%v&key=%s",
|
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()
|
}.Bytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("注册QQ实例时出现错误: %v server: %v", err, signServer)
|
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)
|
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
|
||||||
|
}
|
||||||
|
@ -166,6 +166,10 @@ func LoginInteract() {
|
|||||||
|
|
||||||
if base.SignServer != "-" && base.SignServer != "" {
|
if base.SignServer != "-" && base.SignServer != "" {
|
||||||
log.Infof("使用服务器 %s 进行数据包签名", base.SignServer)
|
log.Infof("使用服务器 %s 进行数据包签名", base.SignServer)
|
||||||
|
// 等待签名服务器直到连接成功
|
||||||
|
if !waitSignServer() {
|
||||||
|
log.Fatalf("连接签名服务器失败")
|
||||||
|
}
|
||||||
register(base.Account.Uin, device.AndroidId, device.Guid, device.QImei36, base.Key)
|
register(base.Account.Uin, device.AndroidId, device.Guid, device.QImei36, base.Key)
|
||||||
wrapper.DandelionEnergy = energy
|
wrapper.DandelionEnergy = energy
|
||||||
wrapper.FekitGetSign = sign
|
wrapper.FekitGetSign = sign
|
||||||
|
Loading…
x
Reference in New Issue
Block a user