From 71f049daf6dfc3c48d845447fbcb4461a6928285 Mon Sep 17 00:00:00 2001 From: johlanse Date: Tue, 3 May 2022 19:35:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A8=E9=80=81=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=B6=85=E6=97=B6=E6=97=B6=E7=AD=89=E5=BE=85=E4=B8=80?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E9=97=B4=E5=90=8E=E9=87=8D=E6=96=B0=E6=8E=A8?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/config.go | 8 ++++++++ lib/config_default.yml | 9 +++++++++ lib/core.go | 32 +++++++++++++++----------------- lib/tg.go | 2 +- main.go | 2 +- model/user.go | 8 +++++++- 6 files changed, 41 insertions(+), 20 deletions(-) diff --git a/lib/config.go b/lib/config.go index 3190b50..9c804a9 100644 --- a/lib/config.go +++ b/lib/config.go @@ -46,6 +46,14 @@ type Config struct { EdgePath string `json:"edge_path" yaml:"edge_path"` QrCOde bool `json:"qr_code" yaml:"qr_code"` StartWait int `json:"start_wait" yaml:"start_wait"` + // cookie强制过期时间,单位为h + ForceExpiration int `json:"force_expiration" yaml:"force_expiration"` + Retry struct { + // 重试次数 + Times int `json:"times" yaml:"times"` + // 重试时间 + Intervals int `json:"intervals" yaml:"intervals"` + } `json:"retry" yaml:"retry"` } var ( diff --git a/lib/config_default.yml b/lib/config_default.yml index c72037c..77310c8 100644 --- a/lib/config_default.yml +++ b/lib/config_default.yml @@ -51,6 +51,15 @@ web: # 网页端登录密码 password: admin +# 登录重试配置 +retry: + # 重试次数 + times: 0 + + # 重试之间的时间间隔,单位为分钟 + intervals: 5 + + # 设置是否定时执行学习程序,格式为cron格式 # "9 19 * * *" 每天19点9分执行一次 # "* 10 * * *” 每天早上十点执行一次 diff --git a/lib/core.go b/lib/core.go index 34c4e52..ceb6986 100644 --- a/lib/core.go +++ b/lib/core.go @@ -84,7 +84,7 @@ type checkQrCodeResp struct { */ func (c *Core) Init() { if runtime.GOOS == "windows" { - c.initWondows() + c.initWindows() } else { c.initNotWindows() } @@ -117,7 +117,7 @@ func GetToken(code, sign string) (bool, error) { Nick: nick, UID: uid, Token: token, - LoginTime: time.Now().UnixNano(), + LoginTime: time.Now().Unix(), } err = model.AddUser(user) if err != nil { @@ -134,7 +134,7 @@ func GetToken(code, sign string) (bool, error) { * @return *model.User * @return error */ -func (c *Core) L() (*model.User, error) { +func (c *Core) L(retryTimes int) (*model.User, error) { client := req.C() client.OnAfterResponse(func(client *req.Client, response *req.Response) error { return nil @@ -183,9 +183,8 @@ func (c *Core) L() (*model.User, error) { } if res.Success { return true, res.Data - } else { - return false, "" } + return false, "" } for i := 0; i < 150; i++ { code, data := checkQrCode() @@ -207,29 +206,28 @@ func (c *Core) L() (*model.User, error) { Nick: nick, UID: uid, Token: response.Cookies()[0].Value, - LoginTime: time.Now().UnixNano(), + LoginTime: time.Now().Unix(), } err = model.AddUser(user) if err != nil { return nil, err } c.Push("text", "登录成功,用户名:"+nick) - // model.AddUser(&model.User{ - // Nick: nick, - // UID: info, - // Token: resp.Cookies()[], - // LoginTime: 0, - // }) - // if err != nil { - // return cos, err - //} return user, err } } - return nil, errors.New("time out") + if retryTimes == 0 { + return nil, errors.New("time out") + } else { + // 等待几分钟后重新执行 + time.Sleep(time.Duration(GetConfig().Retry.Intervals) * time.Minute) + c.Push("text", fmt.Sprintf("登录超时,将进行第%d重新次登录", retryTimes)) + return c.L(retryTimes - 1) + } + } -func (c *Core) initWondows() { +func (c *Core) initWindows() { dir, err := os.Getwd() if err != nil { return diff --git a/lib/tg.go b/lib/tg.go index 999644f..9c8f29a 100644 --- a/lib/tg.go +++ b/lib/tg.go @@ -178,7 +178,7 @@ func login(bot *Telegram, args []string) { } core.Init() defer core.Quit() - _, err := core.L() + _, err := core.L(config.Retry.Times) if err != nil { bot.SendMsg(err.Error()) return diff --git a/main.go b/main.go index 8d18691..df723cf 100644 --- a/main.go +++ b/main.go @@ -159,7 +159,7 @@ func do() { switch { case len(users) < 1: log.Infoln("未检测到有效用户信息,将采用登录模式") - u, err := core.L() + u, err := core.L(config.Retry.Times) if err != nil { log.Errorln(err.Error()) return diff --git a/model/user.go b/model/user.go index 92b49b4..48f2b44 100644 --- a/model/user.go +++ b/model/user.go @@ -55,7 +55,13 @@ func Query() ([]*User, error) { if err != nil { return nil, err } + // login := time.Unix(u.LoginTime, 0) + // sub := time.Now().Sub(login) if CheckUserCookie(u) { + // if lib.GetConfig().ForceExpiration != 0 && sub.Hours() > float64(lib.GetConfig().ForceExpiration) { + // log.Infoln("用户" + u.Nick + "cookie已强制失效") + // continue + // } users = append(users, u) } else { log.Infoln("用户" + u.Nick + "cookie已失效") @@ -113,7 +119,7 @@ func AddUser(user *User) error { */ func UpdateUser(user *User) error { ping() - _, err := db.Exec("update user set token=?,login_time=? where uid = ?", user.Token, time.Now().Unix(), user.UID) + _, err := db.Exec("update user set token=? where uid = ?", user.Token, user.UID) if err != nil { log.Errorln("更新数据失败") log.Errorln(err.Error())