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
);
// 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);

View file

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

View file

@ -35,6 +35,7 @@ public class GuildCreateResponder(
RoleCache roleCache,
IMemberCache memberCache,
IInviteCache inviteCache,
IWebhookCache webhookCache,
WebhookExecutorService webhookExecutor,
GuildFetchService guildFetchService
) : IResponder<IGuildCreate>, IResponder<IGuildDelete>
@ -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);

View file

@ -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();
}
}