1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-06 20:13:50 +08:00

refa: use ticker for fetchCaptcha()

This commit is contained in:
Shigma 2022-08-13 00:56:43 +08:00
parent 93074ef4af
commit bf5562b6dd
No known key found for this signature in database
GPG Key ID: 21C89B0B92907E14

View File

@ -221,29 +221,39 @@ func loginResponseProcessor(res *client.LoginResponse) error {
func getTicket(u string) (str string) { func getTicket(u string) (str string) {
id := utils.RandomString(8) id := utils.RandomString(8)
log.Warnf("请前往该地址验证 -> %v <- 或输入手动抓取的 ticketEnter 提交)", strings.ReplaceAll(u, "https://ssl.captcha.qq.com/template/wireless_mqq_captcha.html?", fmt.Sprintf("https://captcha.go-cqhttp.org/captcha?id=%v&", id))) log.Warnf("请前往该地址验证 -> %v <- 或输入手动抓取的 ticketEnter 提交)", strings.ReplaceAll(u, "https://ssl.captcha.qq.com/template/wireless_mqq_captcha.html?", fmt.Sprintf("https://captcha.go-cqhttp.org/captcha?id=%v&", id)))
r := make(chan string) manual := make(chan string)
select { go func() {
case r <- readLine(): str = readLine()
case r <- sliderCaptchaProcessor(id): manual <- str
} }()
str = <-r ticker := time.NewTicker(time.Second)
return for count := 120; count > 0; count-- {
} select {
case <-ticker.C:
func sliderCaptchaProcessor(id string) string { str = fetchCaptcha(id)
start := time.Now() if str != "" {
for time.Since(start).Minutes() < 2 { ticker.Stop()
time.Sleep(time.Second) return
data, err := global.GetBytes("https://captcha.go-cqhttp.org/captcha/ticket?id=" + id) }
if err != nil { case <-manual:
log.Warnf("获取 Ticket 时出现错误: %v", err) ticker.Stop()
return "" return
}
g := gjson.ParseBytes(data)
if g.Get("ticket").Exists() {
return g.Get("ticket").String()
} }
} }
ticker.Stop()
log.Warnf("验证超时") log.Warnf("验证超时")
return "" return ""
} }
func fetchCaptcha(id string) string {
data, err := global.GetBytes("https://captcha.go-cqhttp.org/captcha/ticket?id=" + id)
if err != nil {
log.Warnf("获取 Ticket 时出现错误: %v", err)
return ""
}
g := gjson.ParseBytes(data)
if g.Get("ticket").Exists() {
return g.Get("ticket").String()
}
return ""
}