From a7305dd7b76f44d381d01bcf5ce1ff987e37e302 Mon Sep 17 00:00:00 2001 From: Carson Hoffman Date: Tue, 19 May 2020 23:06:59 -0400 Subject: [PATCH] Stop voice re-connection on manual disconnection --- voice.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/voice.go b/voice.go index 51ac16c..586b783 100644 --- a/voice.go +++ b/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.