feat: clean webhook cache upon leaving guild

This commit is contained in:
sam 2024-11-08 19:39:36 +01:00
parent 2deac26fc8
commit 492283b9c1
Signed by: sam
GPG key ID: 5F3C3C1B3166639D
4 changed files with 35 additions and 10 deletions

View file

@ -130,14 +130,6 @@ public partial class GuildsController
guildId 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); _logger.Information("Left guild {GuildId} and removed all data for it", guildId);
return Ok(export); return Ok(export);

View file

@ -36,8 +36,6 @@ public partial class GuildsController(
GuildRepository guildRepository, GuildRepository guildRepository,
InviteRepository inviteRepository, InviteRepository inviteRepository,
WatchlistRepository watchlistRepository, WatchlistRepository watchlistRepository,
GuildCache guildCache,
EmojiCache emojiCache,
ChannelCache channelCache, ChannelCache channelCache,
RoleCache roleCache, RoleCache roleCache,
IMemberCache memberCache, IMemberCache memberCache,

View file

@ -35,6 +35,7 @@ public class GuildCreateResponder(
RoleCache roleCache, RoleCache roleCache,
IMemberCache memberCache, IMemberCache memberCache,
IInviteCache inviteCache, IInviteCache inviteCache,
IWebhookCache webhookCache,
WebhookExecutorService webhookExecutor, WebhookExecutorService webhookExecutor,
GuildFetchService guildFetchService GuildFetchService guildFetchService
) : IResponder<IGuildCreate>, IResponder<IGuildDelete> ) : IResponder<IGuildCreate>, IResponder<IGuildDelete>
@ -114,6 +115,10 @@ public class GuildCreateResponder(
await memberCache.RemoveAllMembersAsync(evt.ID); await memberCache.RemoveAllMembersAsync(evt.ID);
await inviteCache.RemoveAsync(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) if (!wasCached || guild == null)
{ {
_logger.Information("Left uncached guild {GuildId}", evt.ID); _logger.Information("Left uncached guild {GuildId}", evt.ID);

View file

@ -83,5 +83,35 @@ public class Guild
public ulong MessageUpdate { get; set; } public ulong MessageUpdate { get; set; }
public ulong MessageDelete { get; set; } public ulong MessageDelete { get; set; }
public ulong MessageDeleteBulk { 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();
} }
} }