diff options
Diffstat (limited to 'vendor/github.com/matterbridge/discordgo/voice.go')
-rw-r--r-- | vendor/github.com/matterbridge/discordgo/voice.go | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/vendor/github.com/matterbridge/discordgo/voice.go b/vendor/github.com/matterbridge/discordgo/voice.go index 51ac16c8..586b783f 100644 --- a/vendor/github.com/matterbridge/discordgo/voice.go +++ b/vendor/github.com/matterbridge/discordgo/voice.go @@ -346,6 +346,25 @@ func (v *VoiceConnection) wsListen(wsConn *websocket.Conn, close <-chan struct{} for { _, message, err := v.wsConn.ReadMessage() if err != nil { + // 4014 indicates a manual disconnection by someone in the guild; + // we shouldn't reconnect. + if websocket.IsCloseError(err, 4014) { + v.log(LogInformational, "received 4014 manual disconnection") + + // Abandon the voice WS connection + v.Lock() + v.wsConn = nil + v.Unlock() + + v.session.Lock() + delete(v.session.VoiceConnections, v.GuildID) + v.session.Unlock() + + v.Close() + + return + } + // Detect if we have been closed manually. If a Close() has already // happened, the websocket we are listening on will be different to the // current session. |