From cc87a3ef355a3614cb5dbbe79e8972a582cc46aa Mon Sep 17 00:00:00 2001 From: "Sindre G. Langhus" Date: Wed, 3 May 2017 23:01:31 +0200 Subject: [PATCH] Made GetOrCreateUser always call AddRef and added check to PRESENCE_UPDATE to avoid readding users who have been removed from guilds --- src/Discord.Net.WebSocket/DiscordSocketClient.cs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 5e19e14e6..fcff186b0 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -271,12 +271,9 @@ namespace Discord.WebSocket } internal SocketGlobalUser GetOrCreateUser(ClientState state, Discord.API.User model) { - return state.GetOrAddUser(model.Id, x => - { - var user = SocketGlobalUser.Create(this, state, model); - user.GlobalUser.AddRef(); - return user; - }); + var user = state.GetOrAddUser(model.Id, x => SocketGlobalUser.Create(this, state, model)); + user.GlobalUser.AddRef(); + return user; } internal SocketGlobalUser GetOrCreateSelfUser(ClientState state, Discord.API.User model) { @@ -1328,7 +1325,13 @@ namespace Discord.WebSocket var user = guild.GetUser(data.User.Id); if (user == null) + { + if (data.Status == UserStatus.Offline) + { + return; + } user = guild.AddOrUpdateUser(data); + } else { var globalBefore = user.GlobalUser.Clone();