浏览代码

Forget stored token when receiving error code 4004

Tulir Asokan 3 年之前
父节点
当前提交
7546dccef5
共有 1 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      user.go

+ 8 - 1
user.go

@@ -10,6 +10,7 @@ import (
 	"sync"
 	"time"
 
+	"github.com/gorilla/websocket"
 	log "maunium.net/go/maulogger/v2"
 
 	"github.com/bwmarrin/discordgo"
@@ -223,7 +224,13 @@ func (br *DiscordBridge) startUsers() {
 			err := user.Connect()
 			if err != nil {
 				user.log.Errorfln("Error connecting: %v", err)
-				user.BridgeState.Send(bridge.State{StateEvent: bridge.StateUnknownError, Message: err.Error()})
+				if closeErr := (&websocket.CloseError{}); errors.As(err, &closeErr) && closeErr.Code == 4004 {
+					user.BridgeState.Send(bridge.State{StateEvent: bridge.StateBadCredentials, Message: err.Error()})
+					user.DiscordToken = ""
+					user.Update()
+				} else {
+					user.BridgeState.Send(bridge.State{StateEvent: bridge.StateUnknownError, Message: err.Error()})
+				}
 			}
 		}(u)
 	}