diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs
index 2b5076f74..b0ed0f8e0 100644
--- a/src/Discord.Net/DiscordClient.cs
+++ b/src/Discord.Net/DiscordClient.cs
@@ -590,12 +590,10 @@ namespace Discord
=> JoinVoiceServer(_channels[channelId]);
public async Task JoinVoiceServer(Channel channel)
{
- CheckReady();
- CheckVoice();
+ CheckReady(checkVoice: true);
if (channel == null) throw new ArgumentNullException(nameof(channel));
await LeaveVoiceServer().ConfigureAwait(false);
- //_currentVoiceServerId = channel.ServerId;
_webSocket.JoinVoice(channel);
#if !DNXCORE50
await _voiceWebSocket.BeginConnect().ConfigureAwait(false);
@@ -606,15 +604,13 @@ namespace Discord
public async Task LeaveVoiceServer()
{
- CheckReady();
- CheckVoice();
+ CheckReady(checkVoice: true);
#if !DNXCORE50
await _voiceWebSocket.DisconnectAsync().ConfigureAwait(false);
#else
await Task.CompletedTask.ConfigureAwait(false);
#endif
- //if (_voiceWebSocket.CurrentVoiceServerId != null)
_webSocket.LeaveVoice();
}
@@ -624,8 +620,7 @@ namespace Discord
/// Will block until
public void SendVoicePCM(byte[] data, int count)
{
- CheckReady();
- CheckVoice();
+ CheckReady(checkVoice: true);
if (count == 0) return;
if (_isDebugMode)
@@ -638,8 +633,7 @@ namespace Discord
/// Clears the PCM buffer.
public void ClearVoicePCM()
{
- CheckReady();
- CheckVoice();
+ CheckReady(checkVoice: true);
if (_isDebugMode)
RaiseOnDebugMessage(DebugMessageType.VoiceOutput, $"Cleared the voice buffer.");
@@ -651,8 +645,7 @@ namespace Discord
/// Returns a task that completes once the voice output buffer is empty.
public async Task WaitVoice()
{
- CheckReady();
- CheckVoice();
+ CheckReady(checkVoice: true);
#if !DNXCORE50
_voiceWebSocket.Wait();
@@ -661,17 +654,16 @@ namespace Discord
}
//Helpers
- private void CheckReady()
+ private void CheckReady(bool checkVoice = false)
{
if (_isDisconnecting)
throw new InvalidOperationException("The client is currently disconnecting.");
else if (!_isConnected)
throw new InvalidOperationException("The client is not currently connected to Discord");
- }
- private void CheckVoice()
- {
#if !DNXCORE50
- if (!_config.EnableVoice)
+ else if (checkVoice && !_config.EnableVoice)
+#else
+ else if (checkVoice) //Always fail on DNXCORE50
#endif
throw new InvalidOperationException("Voice is not enabled for this client.");
}
diff --git a/src/Discord.Net/DiscordVoiceSocket.cs b/src/Discord.Net/DiscordVoiceSocket.cs
index b1b95bcc1..306db336c 100644
--- a/src/Discord.Net/DiscordVoiceSocket.cs
+++ b/src/Discord.Net/DiscordVoiceSocket.cs
@@ -162,7 +162,7 @@ namespace Discord
}
}
catch (OperationCanceledException) { }
- catch (ObjectDisposedException) { }
+ catch (InvalidOperationException) { } //Includes ObjectDisposedException
catch (Exception ex) { DisconnectInternal(ex); }
}).ConfigureAwait(false);
}
@@ -255,7 +255,7 @@ namespace Discord
}
}
catch (OperationCanceledException) { }
- catch (ObjectDisposedException) { }
+ catch (InvalidOperationException) { } //Includes ObjectDisposedException
catch (Exception ex) { DisconnectInternal(ex); }
#if !USE_THREAD
}).ConfigureAwait(false);
@@ -411,6 +411,8 @@ namespace Discord
public void SendPCMFrame(byte[] data, int count)
{
+ if (!_isReady)
+ return;
if (count != _encoder.FrameSize)
throw new InvalidOperationException($"Invalid frame size. Got {count}, expected {_encoder.FrameSize}.");