/// <summary> /// Disconnects and disposes this voice connection. /// </summary> public void Dispose() { if (IsDisposed) { return; } IsDisposed = true; IsInitialized = false; TokenSource.Cancel(); SenderTokenSource.Cancel(); if (Configuration.EnableIncoming) { ReceiverTokenSource.Cancel(); } try { VoiceWs.DisconnectAsync(null).ConfigureAwait(false).GetAwaiter().GetResult(); UdpClient.Close(); } catch (Exception) { } Opus?.Dispose(); Opus = null; Sodium?.Dispose(); Sodium = null; Rtp?.Dispose(); Rtp = null; if (VoiceDisconnected != null) { VoiceDisconnected(Guild); } }