Split off voice functions into DiscordClient.Voice.cs
This commit is contained in:
@@ -205,6 +205,9 @@
|
||||
<Compile Include="..\Discord.Net\DiscordClient.Users.cs">
|
||||
<Link>DiscordClient.Users.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Discord.Net\DiscordClient.Voice.cs">
|
||||
<Link>DiscordClient.Voice.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Discord.Net\DiscordClientConfig.cs">
|
||||
<Link>DiscordClientConfig.cs</Link>
|
||||
</Compile>
|
||||
|
||||
84
src/Discord.Net/DiscordClient.Voice.cs
Normal file
84
src/Discord.Net/DiscordClient.Voice.cs
Normal file
@@ -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<IDiscordVoiceClient> 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<IDiscordVoiceClient> JoinVoiceServer(Channel channel)
|
||||
=> JoinVoiceServer(channel?.ServerId, channel?.Id);
|
||||
public Task<IDiscordVoiceClient> JoinVoiceServer(Server server, string channelId)
|
||||
=> JoinVoiceServer(server?.Id, channelId);
|
||||
public async Task<IDiscordVoiceClient> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<IDiscordVoiceClient> 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<IDiscordVoiceClient> JoinVoiceServer(Channel channel)
|
||||
=> JoinVoiceServer(channel?.ServerId, channel?.Id);
|
||||
public Task<IDiscordVoiceClient> JoinVoiceServer(Server server, string channelId)
|
||||
=> JoinVoiceServer(server?.Id, channelId);
|
||||
public async Task<IDiscordVoiceClient> 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)
|
||||
|
||||
Reference in New Issue
Block a user