From d9e00c917065f84e55f358621f1db4c5c79a898d Mon Sep 17 00:00:00 2001 From: RogueException Date: Fri, 21 Oct 2016 09:31:57 -0300 Subject: [PATCH] Added guild parameter to PresenceUpdated, added GuildMemberUpdated --- .../DiscordSocketClient.Events.cs | 14 ++++++++++---- .../DiscordSocketClient.cs | 19 +++++++++++++++---- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.Events.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.Events.cs index 3c9bf4fba..529caaa87 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.Events.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.Events.cs @@ -155,18 +155,24 @@ namespace Discord.WebSocket remove { _userUnbannedEvent.Remove(value); } } private readonly AsyncEvent> _userUnbannedEvent = new AsyncEvent>(); - public event Func UserUpdated + public event Func UserUpdated { add { _userUpdatedEvent.Add(value); } remove { _userUpdatedEvent.Remove(value); } } - private readonly AsyncEvent> _userUpdatedEvent = new AsyncEvent>(); - public event Func UserPresenceUpdated + private readonly AsyncEvent> _userUpdatedEvent = new AsyncEvent>(); + public event Func GuildMemberUpdated + { + add { _guildMemberUpdatedEvent.Add(value); } + remove { _guildMemberUpdatedEvent.Remove(value); } + } + private readonly AsyncEvent> _guildMemberUpdatedEvent = new AsyncEvent>(); + public event Func, SocketUser, SocketPresence, SocketPresence, Task> UserPresenceUpdated { add { _userPresenceUpdatedEvent.Add(value); } remove { _userPresenceUpdatedEvent.Remove(value); } } - private readonly AsyncEvent> _userPresenceUpdatedEvent = new AsyncEvent>(); + private readonly AsyncEvent, SocketUser, SocketPresence, SocketPresence, Task>> _userPresenceUpdatedEvent = new AsyncEvent, SocketUser, SocketPresence, SocketPresence, Task>>(); public event Func UserVoiceStateUpdated { add { _userVoiceStateUpdatedEvent.Add(value); } diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 618fcf5e3..1d8d696b6 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -863,7 +863,7 @@ namespace Discord.WebSocket { var before = user.Clone(); user.Update(State, data); - await _userUpdatedEvent.InvokeAsync(before, user).ConfigureAwait(false); + await _guildMemberUpdatedEvent.InvokeAsync(before, user).ConfigureAwait(false); } else { @@ -1303,7 +1303,7 @@ namespace Discord.WebSocket } SocketPresence before; - SocketUser user = guild.GetUser(data.User.Id); + var user = guild.GetUser(data.User.Id); if (user != null) { before = user.Presence.Clone(); @@ -1315,7 +1315,12 @@ namespace Discord.WebSocket user = guild.AddOrUpdateUser(data); } - await _userPresenceUpdatedEvent.InvokeAsync(user, before, user.Presence).ConfigureAwait(false); + await _userPresenceUpdatedEvent.InvokeAsync(guild, user, before, user.Presence).ConfigureAwait(false); + if (data.User.Username.IsSpecified || data.Roles.IsSpecified) + { + var before2 = user.Clone(); + await _guildMemberUpdatedEvent.InvokeAsync(before2, user).ConfigureAwait(false); + } } else { @@ -1325,7 +1330,13 @@ namespace Discord.WebSocket var user = channel.GetUser(data.User.Id); var before = user.Presence.Clone(); user.Update(State, data); - await _userPresenceUpdatedEvent.InvokeAsync(user, before, user.Presence).ConfigureAwait(false); + + await _userPresenceUpdatedEvent.InvokeAsync(Optional.Create(), user, before, user.Presence).ConfigureAwait(false); + if (data.User.Username.IsSpecified) + { + var before2 = user.Clone(); + await _userUpdatedEvent.InvokeAsync(before2, user).ConfigureAwait(false); + } } } }