| @@ -10,6 +10,9 @@ namespace Discord | |||||
| Task<IAudioClient> ConnectAsync(Action<IAudioClient> configAction = null); | Task<IAudioClient> ConnectAsync(Action<IAudioClient> configAction = null); | ||||
| /// <summary> Connects to this audio channel but can specify if client is handled externally. </summary> | /// <summary> Connects to this audio channel but can specify if client is handled externally. </summary> | ||||
| Task<IAudioClient> ConnectAsync(bool external, Action<IAudioClient> configAction = null); | |||||
| Task<IAudioClient> ConnectAsync(Action<IAudioClient> configAction = null, bool external = false); | |||||
| /// <summary> Disconnects from this audio channel if applicable. </summary> | |||||
| Task DisconnectAsync(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -144,7 +144,8 @@ namespace Discord.Rest | |||||
| //IAudioChannel | //IAudioChannel | ||||
| Task<IAudioClient> IAudioChannel.ConnectAsync(Action<IAudioClient> configAction) { throw new NotSupportedException(); } | Task<IAudioClient> IAudioChannel.ConnectAsync(Action<IAudioClient> configAction) { throw new NotSupportedException(); } | ||||
| Task<IAudioClient> IAudioChannel.ConnectAsync(bool external, Action<IAudioClient> configAction) { throw new NotSupportedException(); } | |||||
| Task<IAudioClient> IAudioChannel.ConnectAsync(Action<IAudioClient> configAction, bool external) { throw new NotSupportedException(); } | |||||
| Task IAudioChannel.DisconnectAsync() { throw new NotSupportedException(); } | |||||
| //IChannel | //IChannel | ||||
| Task<IUser> IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) | Task<IUser> IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) | ||||
| @@ -42,7 +42,8 @@ namespace Discord.Rest | |||||
| //IAudioChannel | //IAudioChannel | ||||
| Task<IAudioClient> IAudioChannel.ConnectAsync(Action<IAudioClient> configAction) { throw new NotSupportedException(); } | Task<IAudioClient> IAudioChannel.ConnectAsync(Action<IAudioClient> configAction) { throw new NotSupportedException(); } | ||||
| Task<IAudioClient> IAudioChannel.ConnectAsync(bool external, Action<IAudioClient> configAction) { throw new NotSupportedException(); } | |||||
| Task<IAudioClient> IAudioChannel.ConnectAsync(Action<IAudioClient> configAction, bool external) { throw new NotSupportedException(); } | |||||
| Task IAudioChannel.DisconnectAsync() { throw new NotSupportedException(); } | |||||
| //IGuildChannel | //IGuildChannel | ||||
| Task<IGuildUser> IGuildChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) | Task<IGuildUser> IGuildChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) | ||||
| @@ -207,7 +207,8 @@ namespace Discord.WebSocket | |||||
| //IAudioChannel | //IAudioChannel | ||||
| Task<IAudioClient> IAudioChannel.ConnectAsync(Action<IAudioClient> configAction) { throw new NotSupportedException(); } | Task<IAudioClient> IAudioChannel.ConnectAsync(Action<IAudioClient> configAction) { throw new NotSupportedException(); } | ||||
| Task<IAudioClient> IAudioChannel.ConnectAsync(bool external, Action<IAudioClient> configAction) { throw new NotSupportedException(); } | |||||
| Task<IAudioClient> IAudioChannel.ConnectAsync(Action<IAudioClient> configAction, bool external) { throw new NotSupportedException(); } | |||||
| Task IAudioChannel.DisconnectAsync() { throw new NotSupportedException(); } | |||||
| //IChannel | //IChannel | ||||
| Task<IUser> IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) | Task<IUser> IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) | ||||
| @@ -45,11 +45,14 @@ namespace Discord.WebSocket | |||||
| return await Guild.ConnectAudioAsync(Id, false, false, configAction, false).ConfigureAwait(false); | return await Guild.ConnectAudioAsync(Id, false, false, configAction, false).ConfigureAwait(false); | ||||
| } | } | ||||
| public async Task<IAudioClient> ConnectAsync(bool external, Action<IAudioClient> configAction = null) | |||||
| public async Task<IAudioClient> ConnectAsync(Action<IAudioClient> configAction = null, bool external = false) | |||||
| { | { | ||||
| return await Guild.ConnectAudioAsync(Id, false, false, configAction, external).ConfigureAwait(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) | public override SocketGuildUser GetUser(ulong id) | ||||
| { | { | ||||
| var user = Guild.GetUser(id); | var user = Guild.GetUser(id); | ||||
| @@ -606,8 +606,11 @@ namespace Discord.WebSocket | |||||
| await _audioLock.WaitAsync().ConfigureAwait(false); | await _audioLock.WaitAsync().ConfigureAwait(false); | ||||
| try | 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) | catch (OperationCanceledException) | ||||
| { | { | ||||