From 94fedf8340217732ef762305e7e318df5f8e5790 Mon Sep 17 00:00:00 2001 From: Daniel Baynton Date: Mon, 1 Feb 2021 23:16:38 +0000 Subject: [PATCH] Add optional predicate --- .../Entities/Guilds/SocketGuild.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs index f230af00d..0f6a7de34 100644 --- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs +++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs @@ -852,6 +852,10 @@ namespace Discord.WebSocket /// Clears this guild's user cache. /// public void ClearUserCache() => PurgeGuildUserCache(); + /// + /// Clears this guild's user cache. + /// + public void ClearUserCache(Func predicate) => PurgeGuildUserCache(predicate); internal SocketGuildUser AddOrUpdateUser(UserModel model) { if (_members.TryGetValue(model.Id, out SocketGuildUser member)) @@ -909,19 +913,23 @@ namespace Discord.WebSocket } internal void PurgeGuildUserCache() { - var members = Users; + PurgeGuildUserCache(x => true); + } + internal void PurgeGuildUserCache(Func predicate) + { + var members = Users.Where(predicate); var self = CurrentUser; - _members.Clear(); - if (self != null) - _members.TryAdd(self.Id, self); - - DownloadedMemberCount = _members.Count; foreach (var member in members) { if (member.Id != self?.Id) + { + _members.TryRemove(member.Id, out _); member.GlobalUser.RemoveRef(Discord); + } } + + DownloadedMemberCount = _members.Count; } ///