Properly implement UserUpdated for Username or Avatar Changes
This commit is contained in:
@@ -1423,6 +1423,7 @@ namespace Discord.WebSocket
|
|||||||
await _gatewayLogger.DebugAsync("Received Dispatch (PRESENCE_UPDATE)").ConfigureAwait(false);
|
await _gatewayLogger.DebugAsync("Received Dispatch (PRESENCE_UPDATE)").ConfigureAwait(false);
|
||||||
|
|
||||||
var data = (payload as JToken).ToObject<API.Presence>(_serializer);
|
var data = (payload as JToken).ToObject<API.Presence>(_serializer);
|
||||||
|
|
||||||
if (data.GuildId.IsSpecified)
|
if (data.GuildId.IsSpecified)
|
||||||
{
|
{
|
||||||
var guild = State.GetGuild(data.GuildId.Value);
|
var guild = State.GetGuild(data.GuildId.Value);
|
||||||
@@ -1437,24 +1438,35 @@ namespace Discord.WebSocket
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketPresence before;
|
SocketPresence beforePresence;
|
||||||
|
SocketGuildUser beforeGuild;
|
||||||
|
SocketGlobalUser before;
|
||||||
var user = guild.GetUser(data.User.Id);
|
var user = guild.GetUser(data.User.Id);
|
||||||
if (user != null)
|
if (user != null)
|
||||||
{
|
{
|
||||||
before = user.Presence.Clone();
|
|
||||||
|
beforePresence = user.Presence.Clone();
|
||||||
|
before = user.GlobalUser.Clone();
|
||||||
|
beforeGuild = user.Clone();
|
||||||
user.Update(State, data);
|
user.Update(State, data);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
before = new SocketPresence(UserStatus.Offline, null);
|
beforePresence = new SocketPresence(UserStatus.Offline, null);
|
||||||
user = guild.AddOrUpdateUser(data);
|
user = guild.AddOrUpdateUser(data);
|
||||||
|
before = user.GlobalUser.Clone();
|
||||||
|
beforeGuild = user.Clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
await _userPresenceUpdatedEvent.InvokeAsync(guild, user, before, user.Presence).ConfigureAwait(false);
|
await _userPresenceUpdatedEvent.InvokeAsync(guild, user, beforePresence, user.Presence).ConfigureAwait(false);
|
||||||
if (data.User.Username.IsSpecified || data.Roles.IsSpecified || data.Nick.IsSpecified)
|
if (data.Roles.IsSpecified || data.Nick.IsSpecified)
|
||||||
{
|
{
|
||||||
var before2 = user.Clone();
|
await _guildMemberUpdatedEvent.InvokeAsync(beforeGuild, user).ConfigureAwait(false);
|
||||||
await _guildMemberUpdatedEvent.InvokeAsync(before2, user).ConfigureAwait(false);
|
}
|
||||||
|
|
||||||
|
if (data.User.Username.IsSpecified || data.User.Avatar.IsSpecified)
|
||||||
|
{
|
||||||
|
await _userUpdatedEvent.InvokeAsync(before, user).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1463,14 +1475,14 @@ namespace Discord.WebSocket
|
|||||||
if (channel != null)
|
if (channel != null)
|
||||||
{
|
{
|
||||||
var user = channel.GetUser(data.User.Id);
|
var user = channel.GetUser(data.User.Id);
|
||||||
var before = user.Presence.Clone();
|
var beforePresence = user.Presence.Clone();
|
||||||
|
var before = user.Clone();
|
||||||
user.Update(State, data);
|
user.Update(State, data);
|
||||||
|
|
||||||
await _userPresenceUpdatedEvent.InvokeAsync(Optional.Create<SocketGuild>(), user, before, user.Presence).ConfigureAwait(false);
|
await _userPresenceUpdatedEvent.InvokeAsync(Optional.Create<SocketGuild>(), user, beforePresence, user.Presence).ConfigureAwait(false);
|
||||||
if (data.User.Username.IsSpecified)
|
if (data.User.Username.IsSpecified || data.User.Avatar.IsSpecified)
|
||||||
{
|
{
|
||||||
var before2 = user.Clone();
|
await _userUpdatedEvent.InvokeAsync(before, user).ConfigureAwait(false);
|
||||||
await _userUpdatedEvent.InvokeAsync(before2, user).ConfigureAwait(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,6 +92,10 @@ namespace Discord.WebSocket
|
|||||||
UpdateRoles(model.Roles.Value);
|
UpdateRoles(model.Roles.Value);
|
||||||
if (model.Nick.IsSpecified)
|
if (model.Nick.IsSpecified)
|
||||||
Nickname = model.Nick.Value;
|
Nickname = model.Nick.Value;
|
||||||
|
if (model.User.Username.IsSpecified)
|
||||||
|
GlobalUser.Username = model.User.Username.Value;
|
||||||
|
if (model.User.Avatar.IsSpecified)
|
||||||
|
GlobalUser.AvatarId = model.User.Avatar.Value;
|
||||||
}
|
}
|
||||||
private void UpdateRoles(ulong[] roleIds)
|
private void UpdateRoles(ulong[] roleIds)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user