Handle getting logged out while bridge is running

This commit is contained in:
Tulir Asokan
2023-01-13 18:41:22 +02:00
parent 098c8c52da
commit 330faa45fa
3 changed files with 18 additions and 12 deletions

2
go.mod
View File

@@ -32,4 +32,4 @@ require (
maunium.net/go/mauflag v1.0.0 // indirect
)
replace github.com/bwmarrin/discordgo => github.com/beeper/discordgo v0.0.0-20220913114117-bbf4447874d5
replace github.com/bwmarrin/discordgo => github.com/beeper/discordgo v0.0.0-20230113163915-8c5c59822cb9

4
go.sum
View File

@@ -1,6 +1,6 @@
github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
github.com/beeper/discordgo v0.0.0-20220913114117-bbf4447874d5 h1:w/mHH7KoSLUPhqW11mu2rE7cLXhW878bBVRnZ/kiIhs=
github.com/beeper/discordgo v0.0.0-20220913114117-bbf4447874d5/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
github.com/beeper/discordgo v0.0.0-20230113163915-8c5c59822cb9 h1:V+SsDhYGus/Lnay6lwD6Hd30EGb6GvOwG3+VY3XiDRU=
github.com/beeper/discordgo v0.0.0-20230113163915-8c5c59822cb9/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=

24
user.go
View File

@@ -223,11 +223,10 @@ func (br *DiscordBridge) startUsers() {
if err != nil {
user.log.Errorfln("Error connecting: %v", err)
if closeErr := (&websocket.CloseError{}); errors.As(err, &closeErr) && closeErr.Code == 4004 {
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBadCredentials, Message: err.Error()})
user.DiscordToken = ""
user.Update()
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBadCredentials, Error: "dc-websocket-disconnect-4004"})
go user.Logout()
} else {
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Message: err.Error()})
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Error: "dc-unknown-websocket-error", Message: err.Error()})
}
}
}(u)
@@ -477,6 +476,7 @@ func (user *User) Connect() error {
user.Session.AddHandler(user.readyHandler)
user.Session.AddHandler(user.connectedHandler)
user.Session.AddHandler(user.disconnectedHandler)
user.Session.AddHandler(user.invalidAuthHandler)
user.Session.AddHandler(user.guildCreateHandler)
user.Session.AddHandler(user.guildDeleteHandler)
@@ -705,17 +705,23 @@ func (user *User) handleGuild(meta *discordgo.Guild, timestamp time.Time, isInSp
user.addGuildToSpace(guild, isInSpace, timestamp)
}
func (user *User) connectedHandler(_ *discordgo.Session, c *discordgo.Connect) {
user.log.Debugln("Connected to discord")
func (user *User) connectedHandler(_ *discordgo.Session, _ *discordgo.Connect) {
user.log.Debugln("Connected to Discord")
if user.wasDisconnected.Swap(false) {
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
}
}
func (user *User) disconnectedHandler(_ *discordgo.Session, d *discordgo.Disconnect) {
user.log.Debugln("Disconnected from discord")
func (user *User) disconnectedHandler(_ *discordgo.Session, _ *discordgo.Disconnect) {
user.log.Debugln("Disconnected from Discord")
user.wasDisconnected.Store(true)
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect})
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect, Error: "dc-transient-disconnect"})
}
func (user *User) invalidAuthHandler(_ *discordgo.Session, _ *discordgo.InvalidAuth) {
user.log.Debugln("Got logged out from Discord")
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBadCredentials, Error: "dc-websocket-disconnect-4004"})
go user.Logout()
}
func (user *User) guildCreateHandler(_ *discordgo.Session, g *discordgo.GuildCreate) {