From cb1f489960f964708ba31df4fb4ef8fd3aaf9b9a Mon Sep 17 00:00:00 2001 From: Quin Lynch <49576606+quinchs@users.noreply.github.com> Date: Mon, 6 Dec 2021 17:26:53 -0400 Subject: [PATCH] Ensure User Left Event (#349) --- .../BaseSocketClient.Events.cs | 4 ++-- src/Discord.Net.WebSocket/DiscordSocketClient.cs | 16 +++++----------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs index 91fb24021..88b05552f 100644 --- a/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs +++ b/src/Discord.Net.WebSocket/BaseSocketClient.Events.cs @@ -424,12 +424,12 @@ namespace Discord.WebSocket } internal readonly AsyncEvent> _userJoinedEvent = new AsyncEvent>(); /// Fired when a user leaves a guild. - public event Func UserLeft + public event Func UserLeft { add { _userLeftEvent.Add(value); } remove { _userLeftEvent.Remove(value); } } - internal readonly AsyncEvent> _userLeftEvent = new AsyncEvent>(); + internal readonly AsyncEvent> _userLeftEvent = new AsyncEvent>(); /// Fired when a user is banned from a guild. public event Func UserBanned { diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index eb64b5173..f1c191d6b 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -1300,7 +1300,7 @@ namespace Discord.WebSocket var guild = State.GetGuild(data.GuildId); if (guild != null) { - var user = guild.RemoveUser(data.User.Id); + SocketUser user = guild.RemoveUser(data.User.Id); guild.MemberCount--; if (!guild.IsSynced) @@ -1309,16 +1309,10 @@ namespace Discord.WebSocket return; } - if (user != null) - await TimedInvokeAsync(_userLeftEvent, nameof(UserLeft), user).ConfigureAwait(false); - else - { - if (!guild.HasAllMembers) - await IncompleteGuildUserAsync(type, data.User.Id, data.GuildId).ConfigureAwait(false); - else - await UnknownGuildUserAsync(type, data.User.Id, data.GuildId).ConfigureAwait(false); - return; - } + if(user == null) + user = SocketGlobalUser.Create(this, State, data.User); + + await TimedInvokeAsync(_userLeftEvent, nameof(UserLeft), user).ConfigureAwait(false); } else {