diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj
index adf26293a..68ed60e20 100644
--- a/src/Discord.Net.Net45/Discord.Net.csproj
+++ b/src/Discord.Net.Net45/Discord.Net.csproj
@@ -205,6 +205,9 @@
DiscordClient.Users.cs
+
+ DiscordClient.Voice.cs
+
DiscordClientConfig.cs
diff --git a/src/Discord.Net/DiscordClient.Voice.cs b/src/Discord.Net/DiscordClient.Voice.cs
new file mode 100644
index 000000000..247977e59
--- /dev/null
+++ b/src/Discord.Net/DiscordClient.Voice.cs
@@ -0,0 +1,84 @@
+using Discord.Audio;
+using System;
+
+namespace Discord
+{
+ public partial class DiscordClient
+ {
+ public IDiscordVoiceClient GetVoiceClient(Server server)
+ => GetVoiceClient(server.Id);
+ public IDiscordVoiceClient GetVoiceClient(string serverId)
+ {
+ if (serverId == null) throw new ArgumentNullException(nameof(serverId));
+
+ if (!Config.EnableVoiceMultiserver)
+ {
+ if (serverId == _voiceServerId)
+ return this;
+ else
+ return null;
+ }
+
+ DiscordWSClient client;
+ if (_voiceClients.TryGetValue(serverId, out client))
+ return client;
+ else
+ return null;
+ }
+ private async Task CreateVoiceClient(string serverId)
+ {
+ if (!Config.EnableVoiceMultiserver)
+ {
+ _voiceServerId = serverId;
+ return this;
+ }
+
+ var client = _voiceClients.GetOrAdd(serverId, _ =>
+ {
+ var config = _config.Clone();
+ config.LogLevel = _config.LogLevel;// (LogMessageSeverity)Math.Min((int)_config.LogLevel, (int)LogMessageSeverity.Warning);
+ config.VoiceOnly = true;
+ config.VoiceClientId = unchecked(++_nextVoiceClientId);
+ return new DiscordWSClient(config, serverId);
+ });
+ client.LogMessage += (s, e) => RaiseOnLog(e.Severity, e.Source, $"(#{client.Config.VoiceClientId}) {e.Message}");
+ await client.Connect(_gateway, _token).ConfigureAwait(false);
+ return client;
+ }
+
+ public Task JoinVoiceServer(Channel channel)
+ => JoinVoiceServer(channel?.ServerId, channel?.Id);
+ public Task JoinVoiceServer(Server server, string channelId)
+ => JoinVoiceServer(server?.Id, channelId);
+ public async Task JoinVoiceServer(string serverId, string channelId)
+ {
+ CheckReady(); //checkVoice is done inside the voice client
+ if (serverId == null) throw new ArgumentNullException(nameof(serverId));
+ if (channelId == null) throw new ArgumentNullException(nameof(channelId));
+
+ var client = await CreateVoiceClient(serverId).ConfigureAwait(false);
+ await client.JoinChannel(channelId).ConfigureAwait(false);
+ return client;
+ }
+
+ public Task LeaveVoiceServer(Server server)
+ => LeaveVoiceServer(server?.Id);
+ public async Task LeaveVoiceServer(string serverId)
+ {
+ CheckReady(checkVoice: true);
+ if (serverId == null) throw new ArgumentNullException(nameof(serverId));
+
+ if (Config.EnableVoiceMultiserver)
+ {
+ DiscordWSClient client;
+ if (_voiceClients.TryRemove(serverId, out client))
+ await client.Disconnect().ConfigureAwait(false);
+ }
+ else
+ {
+ await _voiceSocket.Disconnect().ConfigureAwait(false);
+ _dataSocket.SendLeaveVoice(serverId);
+ }
+ }
+ }
+}
diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs
index ff73571a5..c8c5b7e60 100644
--- a/src/Discord.Net/DiscordClient.cs
+++ b/src/Discord.Net/DiscordClient.cs
@@ -1,14 +1,11 @@
using Discord.API;
-using Discord.Audio;
using Discord.Collections;
-using Discord.Net;
using Discord.Net.WebSockets;
using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
-using System.Net;
using System.Threading.Tasks;
namespace Discord
@@ -714,82 +711,6 @@ namespace Discord
}
}
- public IDiscordVoiceClient GetVoiceClient(Server server)
- => GetVoiceClient(server.Id);
- public IDiscordVoiceClient GetVoiceClient(string serverId)
- {
- if (serverId == null) throw new ArgumentNullException(nameof(serverId));
-
- if (!Config.EnableVoiceMultiserver)
- {
- if (serverId == _voiceServerId)
- return this;
- else
- return null;
- }
-
- DiscordWSClient client;
- if (_voiceClients.TryGetValue(serverId, out client))
- return client;
- else
- return null;
- }
- private async Task CreateVoiceClient(string serverId)
- {
- if (!Config.EnableVoiceMultiserver)
- {
- _voiceServerId = serverId;
- return this;
- }
-
- var client = _voiceClients.GetOrAdd(serverId, _ =>
- {
- var config = _config.Clone();
- config.LogLevel = _config.LogLevel;// (LogMessageSeverity)Math.Min((int)_config.LogLevel, (int)LogMessageSeverity.Warning);
- config.VoiceOnly = true;
- config.VoiceClientId = unchecked(++_nextVoiceClientId);
- return new DiscordWSClient(config, serverId);
- });
- client.LogMessage += (s, e) => RaiseOnLog(e.Severity, e.Source, $"(#{client.Config.VoiceClientId}) {e.Message}");
- await client.Connect(_gateway, _token).ConfigureAwait(false);
- return client;
- }
-
- public Task JoinVoiceServer(Channel channel)
- => JoinVoiceServer(channel?.ServerId, channel?.Id);
- public Task JoinVoiceServer(Server server, string channelId)
- => JoinVoiceServer(server?.Id, channelId);
- public async Task JoinVoiceServer(string serverId, string channelId)
- {
- CheckReady(); //checkVoice is done inside the voice client
- if (serverId == null) throw new ArgumentNullException(nameof(serverId));
- if (channelId == null) throw new ArgumentNullException(nameof(channelId));
-
- var client = await CreateVoiceClient(serverId).ConfigureAwait(false);
- await client.JoinChannel(channelId).ConfigureAwait(false);
- return client;
- }
-
- public Task LeaveVoiceServer(Server server)
- => LeaveVoiceServer(server?.Id);
- public async Task LeaveVoiceServer(string serverId)
- {
- CheckReady(checkVoice: true);
- if (serverId == null) throw new ArgumentNullException(nameof(serverId));
-
- if (Config.EnableVoiceMultiserver)
- {
- DiscordWSClient client;
- if (_voiceClients.TryRemove(serverId, out client))
- await client.Disconnect().ConfigureAwait(false);
- }
- else
- {
- await _voiceSocket.Disconnect().ConfigureAwait(false);
- _dataSocket.SendLeaveVoice(serverId);
- }
- }
-
private void SendInitialLog()
{
if (_config.LogLevel >= LogMessageSeverity.Verbose)