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;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Discord.WebSocket
|
namespace Discord.WebSocket
|
||||||
@@ -165,6 +165,13 @@ namespace Discord.WebSocket
|
|||||||
remove { _userVoiceStateUpdatedEvent.Remove(value); }
|
remove { _userVoiceStateUpdatedEvent.Remove(value); }
|
||||||
}
|
}
|
||||||
internal readonly AsyncEvent<Func<SocketUser, SocketVoiceState, SocketVoiceState, Task>> _userVoiceStateUpdatedEvent = new AsyncEvent<Func<SocketUser, SocketVoiceState, SocketVoiceState, Task>>();
|
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>
|
/// <summary> Fired when the connected account is updated. </summary>
|
||||||
public event Func<SocketSelfUser, SocketSelfUser, Task> CurrentUserUpdated {
|
public event Func<SocketSelfUser, SocketSelfUser, Task> CurrentUserUpdated {
|
||||||
add { _selfUpdatedEvent.Add(value); }
|
add { _selfUpdatedEvent.Add(value); }
|
||||||
|
|||||||
@@ -1466,6 +1466,12 @@ namespace Discord.WebSocket
|
|||||||
|
|
||||||
var data = (payload as JToken).ToObject<VoiceServerUpdateEvent>(_serializer);
|
var data = (payload as JToken).ToObject<VoiceServerUpdateEvent>(_serializer);
|
||||||
var guild = State.GetGuild(data.GuildId);
|
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)
|
if (guild != null)
|
||||||
{
|
{
|
||||||
string endpoint = data.Endpoint.Substring(0, data.Endpoint.LastIndexOf(':'));
|
string endpoint = data.Endpoint.Substring(0, data.Endpoint.LastIndexOf(':'));
|
||||||
@@ -1476,6 +1482,7 @@ namespace Discord.WebSocket
|
|||||||
await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false);
|
await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
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