diff --git a/go.mod b/go.mod index a877322..c2d7216 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f - github.com/Mrs4s/MiraiGo v0.0.0-20210411090602-132dc119bf4c + github.com/Mrs4s/MiraiGo v0.0.0-20210411115056-c751f3a90e7b github.com/dustin/go-humanize v1.0.0 github.com/gin-gonic/gin v1.6.3 github.com/gorilla/websocket v1.4.2 diff --git a/go.sum b/go.sum index c3250f9..db6580d 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f h1:2dk3eOnYllh+wUOuDhOoC2vUVoJF/5z478ryJ+wzEII= github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Mrs4s/MiraiGo v0.0.0-20210411090602-132dc119bf4c h1:5FjKcZV/LHRJl8N3CEdZv2UOqJEYwdk6WfcUamtctEY= -github.com/Mrs4s/MiraiGo v0.0.0-20210411090602-132dc119bf4c/go.mod h1:NjiWhlvGxwv1ftOWIoiFa/OzklnAYI4YqNexFOKSZKw= +github.com/Mrs4s/MiraiGo v0.0.0-20210411115056-c751f3a90e7b h1:Z3ubJIzMBrKZeD+8k7+pLjXt3qPBXaxAjHo5LZHh83M= +github.com/Mrs4s/MiraiGo v0.0.0-20210411115056-c751f3a90e7b/go.mod h1:NjiWhlvGxwv1ftOWIoiFa/OzklnAYI4YqNexFOKSZKw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/main.go b/main.go index e8f9eb2..882ff41 100644 --- a/main.go +++ b/main.go @@ -324,34 +324,43 @@ func main() { cli.OnDisconnected(func(q *client.QQClient, e *client.ClientDisconnectedEvent) { reLoginLock.Lock() defer reLoginLock.Unlock() + times = 1 if cli.Online { return } log.Warnf("Bot已离线: %v", e.Message) - if conf.Account.ReLogin.Disabled { - os.Exit(1) - } - if times > conf.Account.ReLogin.MaxTimes && conf.Account.ReLogin.MaxTimes != 0 { - log.Fatalf("Bot重连次数超过限制, 停止") - } - if conf.Account.ReLogin.Interval > 0 { - log.Warnf("将在 %v 秒后尝试重连. 重连次数:%v/%v", conf.Account.ReLogin.Interval, times, conf.Account.ReLogin.MaxTimes) - time.Sleep(time.Second * time.Duration(conf.Account.ReLogin.Interval)) - } else { + for { + if conf.Account.ReLogin.Disabled { + os.Exit(1) + } + if times > conf.Account.ReLogin.MaxTimes && conf.Account.ReLogin.MaxTimes != 0 { + log.Fatalf("Bot重连次数超过限制, 停止") + } + times++ + if conf.Account.ReLogin.Interval > 0 { + log.Warnf("将在 %v 秒后尝试重连. 重连次数:%v/%v", conf.Account.ReLogin.Interval, times, conf.Account.ReLogin.MaxTimes) + time.Sleep(time.Second * time.Duration(conf.Account.ReLogin.Interval)) + } else { + time.Sleep(time.Second) + } + log.Warnf("尝试重连...") + if err := cli.TokenLogin(global.AccountToken); err == nil { + saveToken() + return + } else { + log.Warnf("快速重连失败: %v", err) + } + if isQRCodeLogin { + log.Fatalf("快速重连失败") + } + log.Warnf("快速重连失败, 尝试普通登录. 这可能是因为其他端强行T下线导致的.") time.Sleep(time.Second) - } - log.Warnf("尝试重连...") - if err := cli.TokenLogin(global.AccountToken); err == nil { - saveToken() - return - } - if isQRCodeLogin { - log.Fatalf("快速重连失败") - } - log.Warnf("快速重连失败, 尝试普通登录. 这可能是因为其他端强行T下线导致的.") - time.Sleep(time.Second) - if err := commonLogin(); err != nil { - log.Fatalf("登录时发生致命错误: %v", err) + if err := commonLogin(); err != nil { + log.Errorf("登录时发生致命错误: %v", err) + } else { + saveToken() + break + } } }) saveToken()