@@ -46,6 +46,12 @@ namespace Discord.WebSocket | |||||
private bool _guildSubscriptions; | private bool _guildSubscriptions; | ||||
private GatewayIntents? _gatewayIntents; | private GatewayIntents? _gatewayIntents; | ||||
// temporary for debugging | |||||
public string GetDebugOutput() | |||||
{ | |||||
return $"Guilds: {State.Guilds.Count}, Channels: {State.Channels.Count}, DM Channels: {State.DMChannels.Count}, Private Channels: {State.PrivateChannels.Count}, Group Channels: {State.GroupChannels.Count}, Global Users: {State.Users.Count}, Guild Users: {Guilds.Sum(x => x.Users.Count)}"; | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// Provides access to a REST-only client with a shared state from this client. | /// Provides access to a REST-only client with a shared state from this client. | ||||
/// </summary> | /// </summary> | ||||
@@ -914,17 +914,15 @@ namespace Discord.WebSocket | |||||
internal void PurgeGuildUserCache() => PurgeGuildUserCache(x => true); | internal void PurgeGuildUserCache() => PurgeGuildUserCache(x => true); | ||||
internal void PurgeGuildUserCache(Func<SocketGuildUser, bool> predicate) | internal void PurgeGuildUserCache(Func<SocketGuildUser, bool> predicate) | ||||
{ | { | ||||
var members = Users.Where(predicate); | |||||
var self = CurrentUser; | |||||
var membersToPurge = Users.Where(x => predicate.Invoke(x) && x?.Id != Discord.CurrentUser.Id); | |||||
var membersToKeep = Users.Where(x => !predicate.Invoke(x) || x?.Id == Discord.CurrentUser.Id); | |||||
foreach (var member in members) | |||||
{ | |||||
if (member.Id != self?.Id) | |||||
{ | |||||
_members.TryRemove(member.Id, out _); | |||||
foreach (var member in membersToPurge) | |||||
if(_members.TryRemove(member.Id, out _)) | |||||
member.GlobalUser.RemoveRef(Discord); | member.GlobalUser.RemoveRef(Discord); | ||||
} | |||||
} | |||||
foreach (var member in membersToKeep) | |||||
_members.TryAdd(member.Id, member); | |||||
DownloadedMemberCount = _members.Count; | DownloadedMemberCount = _members.Count; | ||||
} | } | ||||
@@ -44,7 +44,7 @@ namespace Discord.WebSocket | |||||
{ | { | ||||
lock (_lockObj) | lock (_lockObj) | ||||
{ | { | ||||
if (--_references <= 0) | |||||
if (--_references <= 1) | |||||
discord.RemoveUser(Id); | discord.RemoveUser(Id); | ||||
} | } | ||||
} | } | ||||