From ce323096e64b16da549b95c9f2354cfc7d40e23d Mon Sep 17 00:00:00 2001 From: sam Date: Thu, 24 Oct 2024 21:16:37 +0200 Subject: [PATCH] feat: also clear cache when leaving a guild without deleting data --- .../Responders/Guilds/GuildCreateResponder.cs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Catalogger.Backend/Bot/Responders/Guilds/GuildCreateResponder.cs b/Catalogger.Backend/Bot/Responders/Guilds/GuildCreateResponder.cs index 5abc461..db1dbd7 100644 --- a/Catalogger.Backend/Bot/Responders/Guilds/GuildCreateResponder.cs +++ b/Catalogger.Backend/Bot/Responders/Guilds/GuildCreateResponder.cs @@ -31,11 +31,12 @@ public class GuildCreateResponder( ILogger logger, DatabaseContext db, GuildCache guildCache, - RoleCache roleCache, - ChannelCache channelCache, EmojiCache emojiCache, - WebhookExecutorService webhookExecutor, + ChannelCache channelCache, + RoleCache roleCache, IMemberCache memberCache, + IInviteCache inviteCache, + WebhookExecutorService webhookExecutor, GuildFetchService guildFetchService ) : IResponder, IResponder { @@ -102,20 +103,26 @@ public class GuildCreateResponder( return Result.Success; } - public Task RespondAsync(IGuildDelete evt, CancellationToken ct = default) + public async Task RespondAsync(IGuildDelete evt, CancellationToken ct = default) { if (evt.IsUnavailable.OrDefault(false)) { _logger.Debug("Guild {GuildId} became unavailable", evt.ID); - return Task.FromResult(Result.Success); + return Result.Success; } + // Clear the cache for this guild guildCache.Remove(evt.ID, out _); + emojiCache.Remove(evt.ID); + channelCache.RemoveGuild(evt.ID); + roleCache.RemoveGuild(evt.ID); + await memberCache.RemoveAllMembersAsync(evt.ID); + await inviteCache.RemoveAsync(evt.ID); if (!guildCache.TryGet(evt.ID, out var guild)) { _logger.Information("Left uncached guild {GuildId}", evt.ID); - return Task.FromResult(Result.Success); + return Result.Success; } _logger.Information("Left guild {GuildName} / {GuildId}", guild.Name, guild.ID); @@ -135,6 +142,6 @@ public class GuildCreateResponder( .GetOrThrow() ); - return Task.FromResult(Result.Success); + return Result.Success; } }