From 7cce63a0a3f770aa2d6932924c71a823ef8737d6 Mon Sep 17 00:00:00 2001 From: Devoxin Date: Fri, 16 Mar 2018 23:30:12 +0000 Subject: [PATCH] Expose VoiceServerUpdate events --- .../BaseSocketClient.Events.cs | 10 +++++++++- .../DiscordSocketClient.cs | 4 ++++ .../Entities/Guilds/SocketVoiceServer.cs | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/Discord.Net.WebSocket/Entities/Guilds/SocketVoiceServer.cs diff --git a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs index e881a7855..cd302fa73 100644 --- a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs +++ b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs @@ -1,4 +1,5 @@ -using System; +using Discord.WebSocket.Entities.Guilds; +using System; using System.Threading.Tasks; namespace Discord.WebSocket @@ -165,6 +166,13 @@ namespace Discord.WebSocket remove { _userVoiceStateUpdatedEvent.Remove(value); } } internal readonly AsyncEvent> _userVoiceStateUpdatedEvent = new AsyncEvent>(); + /// Fired when the bot connects/disconnects to a Discord voice server. + public event Func VoiceServerUpdated + { + add { _voiceServerUpdatedEvent.Add(value); } + remove { _voiceServerUpdatedEvent.Remove(value); } + } + internal readonly AsyncEvent> _voiceServerUpdatedEvent = new AsyncEvent>(); /// Fired when the connected account is updated. public event Func CurrentUserUpdated { add { _selfUpdatedEvent.Add(value); } diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 593f796c2..96b9e07b3 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -5,6 +5,7 @@ using Discord.Net.Converters; using Discord.Net.Udp; using Discord.Net.WebSockets; using Discord.Rest; +using Discord.WebSocket.Entities.Guilds; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; @@ -1474,6 +1475,9 @@ namespace Discord.WebSocket await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false); return; } + + SocketVoiceServer VoiceServer = new SocketVoiceServer(data.GuildId, data.Endpoint, data.Token); + await TimedInvokeAsync(_voiceServerUpdatedEvent, nameof(UserVoiceStateUpdated), VoiceServer).ConfigureAwait(false); } break; diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketVoiceServer.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketVoiceServer.cs new file mode 100644 index 000000000..9874e971e --- /dev/null +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketVoiceServer.cs @@ -0,0 +1,19 @@ +using System.Diagnostics; + +namespace Discord.WebSocket.Entities.Guilds +{ + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] + public class SocketVoiceServer + { + public ulong GuildId { get; private set; } + public string Endpoint { get; private set; } + public string Token { get; private set; } + + internal SocketVoiceServer(ulong GuildId, string Endpoint, string Token) + { + this.GuildId = GuildId; + this.Endpoint = Endpoint; + this.Token = Token; + } + } +}