From 4cad546d57ed75e9c63794569463068f0250b140 Mon Sep 17 00:00:00 2001 From: Frederik P <34724135+F0903@users.noreply.github.com> Date: Wed, 14 Dec 2022 07:57:54 +0100 Subject: [PATCH] Implemented ClientDisconnect event for audio client. (#2520) --- src/Discord.Net.Core/Audio/IAudioClient.cs | 1 + .../API/Voice/ClientDisconnectEvent.cs | 14 ++++++++++++++ .../Audio/AudioClient.Events.cs | 8 +++++++- src/Discord.Net.WebSocket/Audio/AudioClient.cs | 11 ++++++++++- 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/Discord.Net.WebSocket/API/Voice/ClientDisconnectEvent.cs diff --git a/src/Discord.Net.Core/Audio/IAudioClient.cs b/src/Discord.Net.Core/Audio/IAudioClient.cs index 2fc52a529..1fc34b446 100644 --- a/src/Discord.Net.Core/Audio/IAudioClient.cs +++ b/src/Discord.Net.Core/Audio/IAudioClient.cs @@ -13,6 +13,7 @@ namespace Discord.Audio event Func StreamCreated; event Func StreamDestroyed; event Func SpeakingUpdated; + event Func ClientDisconnected; /// Gets the current connection state of this client. ConnectionState ConnectionState { get; } diff --git a/src/Discord.Net.WebSocket/API/Voice/ClientDisconnectEvent.cs b/src/Discord.Net.WebSocket/API/Voice/ClientDisconnectEvent.cs new file mode 100644 index 000000000..d7c1bb2d2 --- /dev/null +++ b/src/Discord.Net.WebSocket/API/Voice/ClientDisconnectEvent.cs @@ -0,0 +1,14 @@ +using Newtonsoft.Json; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Discord.API.Voice; +internal class ClientDisconnectEvent +{ + [JsonProperty("user_id")] + public ulong UserId { get; set; } +} diff --git a/src/Discord.Net.WebSocket/Audio/AudioClient.Events.cs b/src/Discord.Net.WebSocket/Audio/AudioClient.Events.cs index b3e438a01..ea8d2d2a5 100644 --- a/src/Discord.Net.WebSocket/Audio/AudioClient.Events.cs +++ b/src/Discord.Net.WebSocket/Audio/AudioClient.Events.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; namespace Discord.Audio @@ -47,5 +47,11 @@ namespace Discord.Audio remove { _speakingUpdatedEvent.Remove(value); } } private readonly AsyncEvent> _speakingUpdatedEvent = new AsyncEvent>(); + public event Func ClientDisconnected + { + add { _clientDisconnectedEvent.Add(value); } + remove { _clientDisconnectedEvent.Remove(value); } + } + private readonly AsyncEvent> _clientDisconnectedEvent = new AsyncEvent>(); } } diff --git a/src/Discord.Net.WebSocket/Audio/AudioClient.cs b/src/Discord.Net.WebSocket/Audio/AudioClient.cs index 3549fb106..78780577c 100644 --- a/src/Discord.Net.WebSocket/Audio/AudioClient.cs +++ b/src/Discord.Net.WebSocket/Audio/AudioClient.cs @@ -11,7 +11,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; -using System.Collections.Generic; +using System.Collections.Generic; namespace Discord.Audio { @@ -279,6 +279,15 @@ namespace Discord.Audio await _speakingUpdatedEvent.InvokeAsync(data.UserId, data.Speaking); } break; + case VoiceOpCode.ClientDisconnect: + { + await _audioLogger.DebugAsync("Received ClientDisconnect").ConfigureAwait(false); + + var data = (payload as JToken).ToObject(_serializer); + + await _clientDisconnectedEvent.InvokeAsync(data.UserId); + } + break; default: await _audioLogger.WarningAsync($"Unknown OpCode ({opCode})").ConfigureAwait(false); return;