Merge branch 'issues/274' into dev
This commit is contained in:
@@ -1434,6 +1434,7 @@ namespace Discord.WebSocket
|
||||
await _gatewayLogger.DebugAsync("Received Dispatch (PRESENCE_UPDATE)").ConfigureAwait(false);
|
||||
|
||||
var data = (payload as JToken).ToObject<API.Presence>(_serializer);
|
||||
|
||||
if (data.GuildId.IsSpecified)
|
||||
{
|
||||
var guild = State.GetGuild(data.GuildId.Value);
|
||||
@@ -1448,25 +1449,28 @@ namespace Discord.WebSocket
|
||||
return;
|
||||
}
|
||||
|
||||
SocketPresence before;
|
||||
SocketPresence beforePresence;
|
||||
SocketGlobalUser beforeGlobal;
|
||||
var user = guild.GetUser(data.User.Id);
|
||||
if (user != null)
|
||||
{
|
||||
before = user.Presence.Clone();
|
||||
beforePresence = user.Presence.Clone();
|
||||
beforeGlobal = user.GlobalUser.Clone();
|
||||
user.Update(State, data);
|
||||
}
|
||||
else
|
||||
{
|
||||
before = new SocketPresence(UserStatus.Offline, null);
|
||||
beforePresence = new SocketPresence(UserStatus.Offline, null);
|
||||
user = guild.AddOrUpdateUser(data);
|
||||
beforeGlobal = user.GlobalUser.Clone();
|
||||
}
|
||||
|
||||
await _userPresenceUpdatedEvent.InvokeAsync(guild, user, before, user.Presence).ConfigureAwait(false);
|
||||
if (data.User.Username.IsSpecified || data.Roles.IsSpecified)
|
||||
if (data.User.Username.IsSpecified || data.User.Avatar.IsSpecified)
|
||||
{
|
||||
var before2 = user.Clone();
|
||||
await _guildMemberUpdatedEvent.InvokeAsync(before2, user).ConfigureAwait(false);
|
||||
await _userUpdatedEvent.InvokeAsync(beforeGlobal, user).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
await _userPresenceUpdatedEvent.InvokeAsync(guild, user, beforePresence, user.Presence).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1474,14 +1478,14 @@ namespace Discord.WebSocket
|
||||
if (channel != null)
|
||||
{
|
||||
var user = channel.GetUser(data.User.Id);
|
||||
var before = user.Presence.Clone();
|
||||
var beforePresence = user.Presence.Clone();
|
||||
var before = user.GlobalUser.Clone();
|
||||
user.Update(State, data);
|
||||
|
||||
await _userPresenceUpdatedEvent.InvokeAsync(Optional.Create<SocketGuild>(), user, before, user.Presence).ConfigureAwait(false);
|
||||
if (data.User.Username.IsSpecified)
|
||||
await _userPresenceUpdatedEvent.InvokeAsync(Optional.Create<SocketGuild>(), user, beforePresence, user.Presence).ConfigureAwait(false);
|
||||
if (data.User.Username.IsSpecified || data.User.Avatar.IsSpecified)
|
||||
{
|
||||
var before2 = user.Clone();
|
||||
await _userUpdatedEvent.InvokeAsync(before2, user).ConfigureAwait(false);
|
||||
await _userUpdatedEvent.InvokeAsync(before, user).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +88,7 @@ namespace Discord.WebSocket
|
||||
internal override void Update(ClientState state, PresenceModel model)
|
||||
{
|
||||
base.Update(state, model);
|
||||
GlobalUser.Update(state, model.User);
|
||||
if (model.Roles.IsSpecified)
|
||||
UpdateRoles(model.Roles.Value);
|
||||
if (model.Nick.IsSpecified)
|
||||
|
||||
Reference in New Issue
Block a user