summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/matterbridge/discordgo/voice.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/matterbridge/discordgo/voice.go')
-rw-r--r--vendor/github.com/matterbridge/discordgo/voice.go19
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.