feat: clean webhook cache upon leaving guild
This commit is contained in:
parent
2deac26fc8
commit
492283b9c1
4 changed files with 35 additions and 10 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue