| @@ -852,6 +852,10 @@ namespace Discord.WebSocket | |||||
| /// Clears this guild's user cache. | /// Clears this guild's user cache. | ||||
| /// </summary> | /// </summary> | ||||
| public void ClearUserCache() => PurgeGuildUserCache(); | public void ClearUserCache() => PurgeGuildUserCache(); | ||||
| /// <summary> | |||||
| /// Clears this guild's user cache. | |||||
| /// </summary> | |||||
| public void ClearUserCache(Func<SocketGuildUser, bool> predicate) => PurgeGuildUserCache(predicate); | |||||
| internal SocketGuildUser AddOrUpdateUser(UserModel model) | internal SocketGuildUser AddOrUpdateUser(UserModel model) | ||||
| { | { | ||||
| if (_members.TryGetValue(model.Id, out SocketGuildUser member)) | if (_members.TryGetValue(model.Id, out SocketGuildUser member)) | ||||
| @@ -909,19 +913,23 @@ namespace Discord.WebSocket | |||||
| } | } | ||||
| internal void PurgeGuildUserCache() | internal void PurgeGuildUserCache() | ||||
| { | { | ||||
| var members = Users; | |||||
| PurgeGuildUserCache(x => true); | |||||
| } | |||||
| internal void PurgeGuildUserCache(Func<SocketGuildUser, bool> predicate) | |||||
| { | |||||
| var members = Users.Where(predicate); | |||||
| var self = CurrentUser; | var self = CurrentUser; | ||||
| _members.Clear(); | |||||
| if (self != null) | |||||
| _members.TryAdd(self.Id, self); | |||||
| DownloadedMemberCount = _members.Count; | |||||
| foreach (var member in members) | foreach (var member in members) | ||||
| { | { | ||||
| if (member.Id != self?.Id) | if (member.Id != self?.Id) | ||||
| { | |||||
| _members.TryRemove(member.Id, out _); | |||||
| member.GlobalUser.RemoveRef(Discord); | member.GlobalUser.RemoveRef(Discord); | ||||
| } | |||||
| } | } | ||||
| DownloadedMemberCount = _members.Count; | |||||
| } | } | ||||
| /// <summary> | /// <summary> | ||||