Move guild presence updates to GuildMemberUpdated. Filter duplicate UserUpdated events.

This commit is contained in:
RogueException
2017-04-01 15:05:51 -03:00
parent 004bb4cae0
commit fd72583a75
9 changed files with 82 additions and 58 deletions

View File

@@ -1336,14 +1336,30 @@ namespace Discord.WebSocket
var user = guild.GetUser(data.User.Id);
if (user == null)
guild.AddOrUpdateUser(data);
user = guild.AddOrUpdateUser(data);
else
{
var globalBefore = user.GlobalUser.Clone();
if (user.GlobalUser.Update(State, data.User))
{
//Global data was updated, trigger UserUpdated
await TimedInvokeAsync(_userUpdatedEvent, nameof(UserUpdated), globalBefore, user).ConfigureAwait(false);
}
}
var before = user.Clone();
user.Update(State, data, true);
await TimedInvokeAsync(_guildMemberUpdatedEvent, nameof(GuildMemberUpdated), before, user).ConfigureAwait(false);
}
else
{
//TODO: Add as part of friends list update
/*var globalUser = GetOrCreateUser(State, data.User);
var before = globalUser.Clone();
globalUser.Update(State, data.User);
globalUser.Update(State, data);
await TimedInvokeAsync(_userUpdatedEvent, nameof(UserUpdated), before, globalUser).ConfigureAwait(false);*/
}
var globalUser = GetOrCreateUser(State, data.User); //TODO: Memory leak, users removed from friends list will never RemoveRef.
var before = globalUser.Clone();
globalUser.Update(State, data);
await TimedInvokeAsync(_userUpdatedEvent, nameof(UserUpdated), before, globalUser).ConfigureAwait(false);
}
break;
case "TYPING_START":