From 492283b9c1a6eee85ef727f78398e093fe3ad6a6 Mon Sep 17 00:00:00 2001 From: sam Date: Fri, 8 Nov 2024 19:39:36 +0100 Subject: [PATCH] feat: clean webhook cache upon leaving guild --- .../Api/GuildsController.Remove.cs | 8 ----- Catalogger.Backend/Api/GuildsController.cs | 2 -- .../Responders/Guilds/GuildCreateResponder.cs | 5 ++++ Catalogger.Backend/Database/Models/Guild.cs | 30 +++++++++++++++++++ 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/Catalogger.Backend/Api/GuildsController.Remove.cs b/Catalogger.Backend/Api/GuildsController.Remove.cs index b877d6a..1002efa 100644 --- a/Catalogger.Backend/Api/GuildsController.Remove.cs +++ b/Catalogger.Backend/Api/GuildsController.Remove.cs @@ -130,14 +130,6 @@ public partial class GuildsController guildId ); - // Clear out the caches for this guild - guildCache.Remove(guildId, out _); - emojiCache.Remove(guildId); - channelCache.RemoveGuild(guildId); - roleCache.RemoveGuild(guildId); - await memberCache.RemoveAllMembersAsync(guildId); - await inviteCache.RemoveAsync(guildId); - _logger.Information("Left guild {GuildId} and removed all data for it", guildId); return Ok(export); diff --git a/Catalogger.Backend/Api/GuildsController.cs b/Catalogger.Backend/Api/GuildsController.cs index e2445e1..f557f90 100644 --- a/Catalogger.Backend/Api/GuildsController.cs +++ b/Catalogger.Backend/Api/GuildsController.cs @@ -36,8 +36,6 @@ public partial class GuildsController( GuildRepository guildRepository, InviteRepository inviteRepository, WatchlistRepository watchlistRepository, - GuildCache guildCache, - EmojiCache emojiCache, ChannelCache channelCache, RoleCache roleCache, IMemberCache memberCache, diff --git a/Catalogger.Backend/Bot/Responders/Guilds/GuildCreateResponder.cs b/Catalogger.Backend/Bot/Responders/Guilds/GuildCreateResponder.cs index 789d072..9d5ac61 100644 --- a/Catalogger.Backend/Bot/Responders/Guilds/GuildCreateResponder.cs +++ b/Catalogger.Backend/Bot/Responders/Guilds/GuildCreateResponder.cs @@ -35,6 +35,7 @@ public class GuildCreateResponder( RoleCache roleCache, IMemberCache memberCache, IInviteCache inviteCache, + IWebhookCache webhookCache, WebhookExecutorService webhookExecutor, GuildFetchService guildFetchService ) : IResponder, IResponder @@ -114,6 +115,10 @@ public class GuildCreateResponder( await memberCache.RemoveAllMembersAsync(evt.ID); await inviteCache.RemoveAsync(evt.ID); + // Also clear the webhook cache + var guildConfig = await guildRepository.GetAsync(evt.ID); + await webhookCache.RemoveWebhooksAsync(guildConfig.Channels.AllChannels); + if (!wasCached || guild == null) { _logger.Information("Left uncached guild {GuildId}", evt.ID); diff --git a/Catalogger.Backend/Database/Models/Guild.cs b/Catalogger.Backend/Database/Models/Guild.cs index e27ea1b..afbd1cb 100644 --- a/Catalogger.Backend/Database/Models/Guild.cs +++ b/Catalogger.Backend/Database/Models/Guild.cs @@ -83,5 +83,35 @@ public class Guild public ulong MessageUpdate { get; set; } public ulong MessageDelete { get; set; } public ulong MessageDeleteBulk { get; set; } + + private ulong[] _allUnfilteredChannels => + [ + GuildUpdate, + GuildEmojisUpdate, + GuildRoleCreate, + GuildRoleUpdate, + GuildRoleDelete, + ChannelCreate, + ChannelUpdate, + ChannelDelete, + GuildMemberAdd, + GuildMemberUpdate, + GuildKeyRoleUpdate, + GuildMemberNickUpdate, + GuildMemberAvatarUpdate, + GuildMemberTimeout, + GuildMemberRemove, + GuildMemberKick, + GuildBanAdd, + GuildBanRemove, + InviteCreate, + InviteDelete, + MessageUpdate, + MessageDelete, + MessageDeleteBulk, + .. Redirects.Values, + ]; + + public ulong[] AllChannels => _allUnfilteredChannels.Where(c => c != 0).ToArray(); } }