Browse Source

Merge branch 'issues/274' into dev

pull/404/head
RogueException 8 years ago
parent
commit
392813998f
2 changed files with 17 additions and 12 deletions
  1. +16
    -12
      src/Discord.Net.WebSocket/DiscordSocketClient.cs
  2. +1
    -0
      src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs

+ 16
- 12
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -1434,6 +1434,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);
@@ -1448,25 +1449,28 @@ namespace Discord.WebSocket
return; return;
} }


SocketPresence before;
SocketPresence beforePresence;
SocketGlobalUser beforeGlobal;
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();
beforeGlobal = user.GlobalUser.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);
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 else
{ {
@@ -1474,14 +1478,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.GlobalUser.Clone();
user.Update(State, data); 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);
} }
} }
} }


+ 1
- 0
src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs View File

@@ -88,6 +88,7 @@ namespace Discord.WebSocket
internal override void Update(ClientState state, PresenceModel model) internal override void Update(ClientState state, PresenceModel model)
{ {
base.Update(state, model); base.Update(state, model);
GlobalUser.Update(state, model.User);
if (model.Roles.IsSpecified) if (model.Roles.IsSpecified)
UpdateRoles(model.Roles.Value); UpdateRoles(model.Roles.Value);
if (model.Nick.IsSpecified) if (model.Nick.IsSpecified)


Loading…
Cancel
Save