feat: also clear cache when leaving a guild without deleting data

This commit is contained in:
sam 2024-10-24 21:16:37 +02:00
parent 439051999f
commit ce323096e6
Signed by: sam
GPG key ID: 5F3C3C1B3166639D

View file

@ -31,11 +31,12 @@ public class GuildCreateResponder(
ILogger logger, ILogger logger,
DatabaseContext db, DatabaseContext db,
GuildCache guildCache, GuildCache guildCache,
RoleCache roleCache,
ChannelCache channelCache,
EmojiCache emojiCache, EmojiCache emojiCache,
WebhookExecutorService webhookExecutor, ChannelCache channelCache,
RoleCache roleCache,
IMemberCache memberCache, IMemberCache memberCache,
IInviteCache inviteCache,
WebhookExecutorService webhookExecutor,
GuildFetchService guildFetchService GuildFetchService guildFetchService
) : IResponder<IGuildCreate>, IResponder<IGuildDelete> ) : IResponder<IGuildCreate>, IResponder<IGuildDelete>
{ {
@ -102,20 +103,26 @@ public class GuildCreateResponder(
return Result.Success; return Result.Success;
} }
public Task<Result> RespondAsync(IGuildDelete evt, CancellationToken ct = default) public async Task<Result> RespondAsync(IGuildDelete evt, CancellationToken ct = default)
{ {
if (evt.IsUnavailable.OrDefault(false)) if (evt.IsUnavailable.OrDefault(false))
{ {
_logger.Debug("Guild {GuildId} became unavailable", evt.ID); _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 _); 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)) if (!guildCache.TryGet(evt.ID, out var guild))
{ {
_logger.Information("Left uncached guild {GuildId}", evt.ID); _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); _logger.Information("Left guild {GuildName} / {GuildId}", guild.Name, guild.ID);
@ -135,6 +142,6 @@ public class GuildCreateResponder(
.GetOrThrow() .GetOrThrow()
); );
return Task.FromResult(Result.Success); return Result.Success;
} }
} }