@@ -14,26 +14,19 @@ import (
1414
1515 "github.com/Mrs4s/MiraiGo/client"
1616 "github.com/Mrs4s/MiraiGo/utils"
17- "github.com/Mrs4s/MiraiGo/wrapper "
17+ "github.com/Mrs4s/go-cqhttp/internal/base "
1818 "github.com/mattn/go-colorable"
1919 "github.com/pkg/errors"
2020 log "github.com/sirupsen/logrus"
2121 "github.com/tidwall/gjson"
2222 "gopkg.ilharper.com/x/isatty"
2323
2424 "github.com/Mrs4s/go-cqhttp/global"
25- "github.com/Mrs4s/go-cqhttp/internal/base"
2625 "github.com/Mrs4s/go-cqhttp/internal/download"
27- "github.com/Mrs4s/go-cqhttp/internal/encryption"
28- _ "github.com/Mrs4s/go-cqhttp/internal/encryption/t544" // side effect
2926)
3027
3128var console = bufio .NewReader (os .Stdin )
3229
33- func init () {
34- wrapper .DandelionEnergy = energy
35- }
36-
3730func readLine () (str string ) {
3831 str , _ = console .ReadString ('\n' )
3932 str = strings .TrimSpace (str )
@@ -222,9 +215,8 @@ func loginResponseProcessor(res *client.LoginResponse) error {
222215 log .Warnf ("设备信息被封禁, 请删除 device.json 后重试." )
223216 case 237 :
224217 log .Warnf ("登录过于频繁, 请在手机QQ登录并根据提示完成认证后等一段时间重试" )
225- case 45 : // 在提供 t544 后还是出现45错误是需要强行升级到最新客户端或被限制非常用设备
226- log .Warnf ("你的账号涉嫌违规被限制在非常用设备登录, 请在手机QQ登录并根据提示完成认证" )
227- log .Warnf ("或使用 -update-protocol 升级到最新协议后重试" )
218+ case 45 :
219+ log .Warnf ("你的账号被限制登录, 请配置 SignServer 后重试" )
228220 }
229221 log .Infof ("按 Enter 继续...." )
230222 readLine ()
@@ -274,32 +266,47 @@ func fetchCaptcha(id string) string {
274266}
275267
276268func energy (uin uint64 , id string , appVersion string , salt []byte ) ([]byte , error ) {
277- if localSigner , ok := encryption .T544Signer [appVersion ]; ok {
278- log .Debugf ("use local T544Signer v%s" , appVersion )
279- result := localSigner (time .Now ().UnixMicro (), salt )
280- log .Debugf ("t544 sign result: %x" , result )
281- return result , nil
282- }
283- log .Debugf ("fallback to remote T544Signer v%s" , appVersion )
284- signServer := "https://captcha.go-cqhttp.org/sdk/dandelion/energy"
285- if base .SignServerOverwrite != "" {
286- signServer = base .SignServerOverwrite
269+ signServer := base .SignServer
270+ if ! strings .HasSuffix (signServer , "/" ) {
271+ signServer += "/"
287272 }
288273 response , err := download.Request {
289- Method : http .MethodPost ,
290- URL : signServer ,
291- Header : map [string ]string {"Content-Type" : "application/x-www-form-urlencoded" },
292- Body : bytes .NewReader ([]byte (fmt .Sprintf ("uin=%v&id=%s&salt=%s&version=%s" , uin , id , hex .EncodeToString (salt ), appVersion ))),
274+ Method : http .MethodGet ,
275+ URL : signServer + "custom_energy" + fmt .Sprintf ("?data=%v&salt=%v" , id , hex .EncodeToString (salt )),
293276 }.Bytes ()
294277 if err != nil {
295- log .Errorf ( "获取T544时出现问题 : %v" , err )
278+ log .Warnf ( "获取T544 sign时出现错误 : %v server: %v " , err , signServer )
296279 return nil , err
297280 }
298- sign , err := hex .DecodeString (gjson .GetBytes (response , "result " ).String ())
299- if err != nil || len ( sign ) == 0 {
300- log .Errorf ( "获取T544时出现问题 : %v" , err )
281+ data , err := hex .DecodeString (gjson .GetBytes (response , "data " ).String ())
282+ if err != nil {
283+ log .Warnf ( "获取T544 sign时出现错误 : %v" , err )
301284 return nil , err
302285 }
303- log .Debugf ("t544 sign result: %x" , sign )
304- return sign , nil
286+ if len (data ) == 0 {
287+ log .Warnf ("获取T544 sign时出现错误: %v" , "data is empty" )
288+ return nil , errors .New ("data is empty" )
289+ }
290+ return data , nil
291+ }
292+
293+ func sign (seq uint64 , uin string , cmd string , qua string , buff []byte ) (sign []byte , extra []byte , token []byte , err error ) {
294+ signServer := base .SignServer
295+ if ! strings .HasSuffix (signServer , "/" ) {
296+ signServer += "/"
297+ }
298+ response , err := download.Request {
299+ Method : http .MethodPost ,
300+ URL : signServer + "sign" ,
301+ Header : map [string ]string {"Content-Type" : "application/x-www-form-urlencoded" },
302+ Body : bytes .NewReader ([]byte (fmt .Sprintf ("uin=%v&qua=%s&cmd=%s&seq=%v&buffer=%v" , uin , qua , cmd , seq , hex .EncodeToString (buff )))),
303+ }.Bytes ()
304+ if err != nil {
305+ log .Warnf ("获取sso sign时出现错误: %v server: %v" , err , signServer )
306+ return nil , nil , nil , err
307+ }
308+ sign , _ = hex .DecodeString (gjson .GetBytes (response , "data.sign" ).String ())
309+ extra , _ = hex .DecodeString (gjson .GetBytes (response , "data.extra" ).String ())
310+ token , _ = hex .DecodeString (gjson .GetBytes (response , "data.token" ).String ())
311+ return sign , extra , token , nil
305312}
0 commit comments