diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index e4f88ef45..f2f540d54 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -1440,7 +1440,7 @@ namespace Discord.WebSocket } else { - before = guild.RemoveVoiceState(data.UserId) ?? SocketVoiceState.Default; + before = await guild.RemoveVoiceStateAsync(data.UserId).ConfigureAwait(false) ?? SocketVoiceState.Default; after = SocketVoiceState.Create(null, data); } diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index 8193a971f..6345b8ddb 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -471,11 +471,15 @@ namespace Discord.WebSocket return voiceState; return null; } - internal SocketVoiceState? RemoveVoiceState(ulong id) + internal async Task RemoveVoiceStateAsync(ulong id) { SocketVoiceState voiceState; if (_voiceStates.TryRemove(id, out voiceState)) + { + if (_audioClient != null) + await _audioClient.RemoveInputStreamAsync(id).ConfigureAwait(false); //User changed channels, end their stream return voiceState; + } return null; }