Expose VoiceServerUpdate events (#984)
* Expose VoiceServerUpdate events * Amend based on feedback * Move this out of guild entity * Fix namespace issue * Adjust based on feedback #2 * Use cacheable instead * Change based on feedback
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Discord.WebSocket
|
||||
@@ -165,6 +165,13 @@ namespace Discord.WebSocket
|
||||
remove { _userVoiceStateUpdatedEvent.Remove(value); }
|
||||
}
|
||||
internal readonly AsyncEvent<Func<SocketUser, SocketVoiceState, SocketVoiceState, Task>> _userVoiceStateUpdatedEvent = new AsyncEvent<Func<SocketUser, SocketVoiceState, SocketVoiceState, Task>>();
|
||||
/// <summary> Fired when the bot connects to a Discord voice server. </summary>
|
||||
public event Func<SocketVoiceServer, Task> VoiceServerUpdated
|
||||
{
|
||||
add { _voiceServerUpdatedEvent.Add(value); }
|
||||
remove { _voiceServerUpdatedEvent.Remove(value); }
|
||||
}
|
||||
internal readonly AsyncEvent<Func<SocketVoiceServer, Task>> _voiceServerUpdatedEvent = new AsyncEvent<Func<SocketVoiceServer, Task>>();
|
||||
/// <summary> Fired when the connected account is updated. </summary>
|
||||
public event Func<SocketSelfUser, SocketSelfUser, Task> CurrentUserUpdated {
|
||||
add { _selfUpdatedEvent.Add(value); }
|
||||
|
||||
@@ -1466,6 +1466,12 @@ namespace Discord.WebSocket
|
||||
|
||||
var data = (payload as JToken).ToObject<VoiceServerUpdateEvent>(_serializer);
|
||||
var guild = State.GetGuild(data.GuildId);
|
||||
var cacheable = new Cacheable<IGuild, ulong>(guild, data.GuildId, guild != null,
|
||||
async () => await ApiClient.GetGuildAsync(data.GuildId).ConfigureAwait(false) as IGuild);
|
||||
|
||||
var voiceServer = new SocketVoiceServer(cacheable, data.GuildId, data.Endpoint, data.Token);
|
||||
await TimedInvokeAsync(_voiceServerUpdatedEvent, nameof(UserVoiceStateUpdated), voiceServer).ConfigureAwait(false);
|
||||
|
||||
if (guild != null)
|
||||
{
|
||||
string endpoint = data.Endpoint.Substring(0, data.Endpoint.LastIndexOf(':'));
|
||||
@@ -1476,6 +1482,7 @@ namespace Discord.WebSocket
|
||||
await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
21
src/Discord.Net.WebSocket/SocketVoiceServer.cs
Normal file
21
src/Discord.Net.WebSocket/SocketVoiceServer.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Discord.WebSocket
|
||||
{
|
||||
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
|
||||
public class SocketVoiceServer
|
||||
{
|
||||
public Cacheable<IGuild, ulong> Guild { get; private set; }
|
||||
public string Endpoint { get; private set; }
|
||||
public string Token { get; private set; }
|
||||
|
||||
internal SocketVoiceServer(Cacheable<IGuild, ulong> guild, ulong guildId, string endpoint, string token)
|
||||
{
|
||||
Guild = guild;
|
||||
Endpoint = endpoint;
|
||||
Token = token;
|
||||
}
|
||||
|
||||
private string DebuggerDisplay => $"SocketVoiceServer ({Guild.Id})";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user