From 3e4b6666d11384306a3b67459905dbd1787830d3 Mon Sep 17 00:00:00 2001 From: NovusTheory Date: Wed, 9 May 2018 17:21:10 -0500 Subject: [PATCH] Modify ConnectAsync API and add DisconnectAsync to IAudioChannel --- src/Discord.Net.Core/Entities/Channels/IAudioChannel.cs | 5 ++++- src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs | 3 ++- src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs | 3 ++- .../Entities/Channels/SocketGroupChannel.cs | 3 ++- .../Entities/Channels/SocketVoiceChannel.cs | 5 ++++- src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs | 7 +++++-- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Channels/IAudioChannel.cs b/src/Discord.Net.Core/Entities/Channels/IAudioChannel.cs index 68f222020..09d2a08be 100644 --- a/src/Discord.Net.Core/Entities/Channels/IAudioChannel.cs +++ b/src/Discord.Net.Core/Entities/Channels/IAudioChannel.cs @@ -10,6 +10,9 @@ namespace Discord Task ConnectAsync(Action configAction = null); /// Connects to this audio channel but can specify if client is handled externally. - Task ConnectAsync(bool external, Action configAction = null); + Task ConnectAsync(Action configAction = null, bool external = false); + + /// Disconnects from this audio channel if applicable. + Task DisconnectAsync(); } } diff --git a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs index 863b2ca58..ec03fd8ee 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs @@ -144,7 +144,8 @@ namespace Discord.Rest //IAudioChannel Task IAudioChannel.ConnectAsync(Action configAction) { throw new NotSupportedException(); } - Task IAudioChannel.ConnectAsync(bool external, Action configAction) { throw new NotSupportedException(); } + Task IAudioChannel.ConnectAsync(Action configAction, bool external) { throw new NotSupportedException(); } + Task IAudioChannel.DisconnectAsync() { throw new NotSupportedException(); } //IChannel Task IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) diff --git a/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs index 26d62c02e..f751a7932 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs @@ -42,7 +42,8 @@ namespace Discord.Rest //IAudioChannel Task IAudioChannel.ConnectAsync(Action configAction) { throw new NotSupportedException(); } - Task IAudioChannel.ConnectAsync(bool external, Action configAction) { throw new NotSupportedException(); } + Task IAudioChannel.ConnectAsync(Action configAction, bool external) { throw new NotSupportedException(); } + Task IAudioChannel.DisconnectAsync() { throw new NotSupportedException(); } //IGuildChannel Task IGuildChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs index 671d2ea67..315dceb7e 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs @@ -207,7 +207,8 @@ namespace Discord.WebSocket //IAudioChannel Task IAudioChannel.ConnectAsync(Action configAction) { throw new NotSupportedException(); } - Task IAudioChannel.ConnectAsync(bool external, Action configAction) { throw new NotSupportedException(); } + Task IAudioChannel.ConnectAsync(Action configAction, bool external) { throw new NotSupportedException(); } + Task IAudioChannel.DisconnectAsync() { throw new NotSupportedException(); } //IChannel Task IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs index 2227c3155..dd56407ec 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketVoiceChannel.cs @@ -45,11 +45,14 @@ namespace Discord.WebSocket return await Guild.ConnectAudioAsync(Id, false, false, configAction, false).ConfigureAwait(false); } - public async Task ConnectAsync(bool external, Action configAction = null) + public async Task ConnectAsync(Action configAction = null, bool external = false) { return await Guild.ConnectAudioAsync(Id, false, false, configAction, external).ConfigureAwait(false); } + public async Task DisconnectAsync() + => await Guild.DisconnectAudioAsync(); + public override SocketGuildUser GetUser(ulong id) { var user = Guild.GetUser(id); diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index b92f6c58b..8ff8e71e7 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -606,8 +606,11 @@ namespace Discord.WebSocket await _audioLock.WaitAsync().ConfigureAwait(false); try { - await RepopulateAudioStreamsAsync().ConfigureAwait(false); - await _audioClient.StartAsync(url, Discord.CurrentUser.Id, voiceState.VoiceSessionId, token).ConfigureAwait(false); + if (_audioClient != null) + { + await RepopulateAudioStreamsAsync().ConfigureAwait(false); + await _audioClient.StartAsync(url, Discord.CurrentUser.Id, voiceState.VoiceSessionId, token).ConfigureAwait(false); + } } catch (OperationCanceledException) {