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

fix silder.

This commit is contained in:
Mrs4s 2020-12-26 17:32:17 +08:00
parent 99a68b144b
commit 2baf622b83
2 changed files with 30 additions and 15 deletions

View File

@ -64,17 +64,12 @@ func GetBytes(url string) ([]byte, error) {
return body, nil return body, nil
} }
func GetSilderTicket(raw, version string) (string, error) { func GetSilderTicket(raw, id string) (string, error) {
u, err := url.Parse(raw)
if err != nil {
return "", err
}
q := u.Query()
var rsp string var rsp string
if err = gout.GET(fmt.Sprintf("https://api.shkong.com/gocqhttpapi/silder/ticket?uin=%v&sid=%v&cap=%v", q["uin"][0], q["sid"][0], q["cap_cd"][0])). if err := gout.POST("https://api.shkong.com/gocqhttpapi/task").SetJSON(gout.H{
SetHeader(gout.H{"User-Agent": "go-cqhttp/" + version}). "id": id,
BindBody(&rsp). "url": raw,
Do(); err != nil { }).SetTimeout(time.Second * 35).BindBody(&rsp).Do(); err != nil {
return "", err return "", err
} }
g := gjson.Parse(rsp) g := gjson.Parse(rsp)

View File

@ -5,6 +5,7 @@ import (
"bytes" "bytes"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"github.com/Mrs4s/MiraiGo/utils"
"github.com/gin-contrib/pprof" "github.com/gin-contrib/pprof"
"image" "image"
"io/ioutil" "io/ioutil"
@ -112,6 +113,7 @@ func (s *webServer) Dologin() {
s.Console = bufio.NewReader(os.Stdin) s.Console = bufio.NewReader(os.Stdin)
readLine := func() (str string) { readLine := func() (str string) {
str, _ = s.Console.ReadString('\n') str, _ = s.Console.ReadString('\n')
str = strings.TrimSpace(str)
return return
} }
conf := GetConf() conf := GetConf()
@ -125,15 +127,33 @@ func (s *webServer) Dologin() {
if !rsp.Success { if !rsp.Success {
switch rsp.Error { switch rsp.Error {
case client.SliderNeededError: case client.SliderNeededError:
log.Warnf("正在处理滑条验证码, 这可能需要一段时间.") log.Warnf("登录需要滑条验证码, 请选择解决方案: ")
ticket, err := global.GetSilderTicket(rsp.VerifyUrl, coolq.Version) log.Warnf("1. 自行抓包. (推荐)")
if err != nil { log.Warnf("2. 使用Cef自动处理.")
log.Warnf("处理滑条验证码时出现错误: %v 将尝试跳过.", err) log.Warnf("3. 不提交滑块并继续.(可能会导致上网环境异常错误)")
log.Warnf("详细信息请参考文档")
log.Warn("请输入(1 - 3): ")
text = readLine()
if strings.Contains(text, "1") {
log.Warnf("请用浏览器打开 -> %v <- 并获取Ticket.", rsp.VerifyUrl)
log.Warn("请输入Ticket (Enter 提交)")
text = readLine()
rsp, err = cli.SubmitTicket(strings.TrimSpace(text))
return
}
if strings.Contains(text, "3") {
cli.AllowSlider = false cli.AllowSlider = false
cli.Disconnect() cli.Disconnect()
rsp, err = cli.Login() rsp, err = cli.Login()
continue continue
} }
id := utils.RandomStringRange(6, "0123456789")
log.Warnf("滑块ID为 %v 请在30S内处理.", id)
ticket, err := global.GetSilderTicket(rsp.VerifyUrl, id)
if err != nil {
log.Warnf("错误: " + err.Error())
os.Exit(0)
}
rsp, err = cli.SubmitTicket(ticket) rsp, err = cli.SubmitTicket(ticket)
continue continue
case client.NeedCaptcha: case client.NeedCaptcha:
@ -205,7 +225,7 @@ func (s *webServer) Dologin() {
cli.Disconnect() cli.Disconnect()
rsp, err = cli.Login() rsp, err = cli.Login()
count++ count++
log.Warnf("错误: 当前上网环境异常. 将更换服务器并重试. 如果频繁遇到此问题请打开设备锁.") log.Warnf("错误: 当前上网环境异常. 将更换服务器并重试.")
time.Sleep(time.Second) time.Sleep(time.Second)
continue continue
} }