@@ -17,7 +17,7 @@ type Bot struct {
1717 UUIDCallback func (uuid string ) // 获取UUID的回调函数
1818 SyncCheckCallback func (resp SyncCheckResponse ) // 心跳回调
1919 MessageHandler MessageHandler // 获取消息成功的handle
20- MessageErrorHandler func ( err error ) bool // 获取消息发生错误的handle, 返回true则尝试继续监听
20+ MessageErrorHandler MessageErrorHandler // 获取消息发生错误的handle, 返回err == nil 则尝试继续监听
2121 Serializer Serializer // 序列化器, 默认为json
2222 Caller * Caller
2323 Storage * Session
@@ -102,7 +102,7 @@ func (b *Bot) Logout() error {
102102 if err := b .Caller .Logout (info ); err != nil {
103103 return err
104104 }
105- b .Exit ( )
105+ b .ExitWith ( ErrUserLogout )
106106 return nil
107107 }
108108 return errors .New ("user not login" )
@@ -171,18 +171,15 @@ func (b *Bot) webInit() error {
171171
172172 go func () {
173173 if b .MessageErrorHandler == nil {
174- b .MessageErrorHandler = defaultSyncCheckErrHandler ( b )
174+ b .MessageErrorHandler = defaultMessageErrorHandler
175175 }
176176 for {
177- err = b .syncCheck ()
178- if err == nil {
179- continue
180- }
181- // 判断是否继续, 如果不继续则退出
182- if goon := b .MessageErrorHandler (err ); ! goon {
183- b .err = err
184- b .Exit ()
185- break
177+ if err = b .syncCheck (); err != nil {
178+ // 判断是否继续, 如果不继续则退出
179+ if err = b .MessageErrorHandler (err ); err != nil {
180+ b .ExitWith (err )
181+ return
182+ }
186183 }
187184 }
188185 }()
@@ -292,6 +289,12 @@ func (b *Bot) Exit() {
292289 }
293290}
294291
292+ // ExitWith 主动退出并且设置退出原因, 可以通过 `CrashReason` 获取退出原因
293+ func (b * Bot ) ExitWith (err error ) {
294+ b .err = err
295+ b .Exit ()
296+ }
297+
295298// CrashReason 获取当前Bot崩溃的原因
296299func (b * Bot ) CrashReason () error {
297300 return b .err
@@ -400,21 +403,6 @@ func DefaultBot(prepares ...BotPreparer) *Bot {
400403 return bot
401404}
402405
403- // defaultSyncCheckErrHandler 默认的SyncCheck错误处理函数
404- func defaultSyncCheckErrHandler (bot * Bot ) func (error ) bool {
405- return func (err error ) bool {
406- var ret Ret
407- if errors .As (err , & ret ) {
408- switch ret {
409- case failedLoginCheck , cookieInvalid , failedLoginWarn :
410- _ = bot .Logout ()
411- return false
412- }
413- }
414- return true
415- }
416- }
417-
418406// GetQrcodeUrl 通过uuid获取登录二维码的url
419407func GetQrcodeUrl (uuid string ) string {
420408 return qrcode + uuid
0 commit comments