Browse Source

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
tags/2.0
Luke Christopher F 7 years ago
parent
commit
e775853b1b
3 changed files with 36 additions and 1 deletions
  1. +8
    -1
      src/Discord.Net.WebSocket/BaseSocketClient.Events.cs
  2. +7
    -0
      src/Discord.Net.WebSocket/DiscordSocketClient.cs
  3. +21
    -0
      src/Discord.Net.WebSocket/SocketVoiceServer.cs

+ 8
- 1
src/Discord.Net.WebSocket/BaseSocketClient.Events.cs View File

@@ -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); }


+ 7
- 0
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -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
- 0
src/Discord.Net.WebSocket/SocketVoiceServer.cs View 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})";
}
}

Loading…
Cancel
Save