using Catalogger.Backend.Cache; using Catalogger.Backend.Cache.InMemoryCache; using Catalogger.Backend.Database; using Catalogger.Backend.Extensions; using Catalogger.Backend.Services; using Remora.Discord.API.Abstractions.Gateway.Events; using Remora.Discord.API.Abstractions.Rest; using Remora.Discord.Extensions.Embeds; using Remora.Discord.Gateway.Responders; using Remora.Results; namespace Catalogger.Backend.Bot.Responders.Guilds; public class GuildMemberRemoveResponder( ILogger logger, DatabaseContext db, IMemberCache memberCache, UserCache userCache, WebhookExecutorService webhookExecutor, IDiscordRestGuildAPI guildApi) : IResponder { private readonly ILogger _logger = logger.ForContext(); public async Task RespondAsync(IGuildMemberRemove evt, CancellationToken ct = default) { try { var embed = new EmbedBuilder() .WithTitle("Member left") .WithAuthor(evt.User.Tag(), iconUrl: evt.User.AvatarUrl()) .WithColour(DiscordUtils.Orange) .WithDescription($"<@{evt.User.ID}>") .WithFooter($"ID: {evt.User.ID}") .WithCurrentTimestamp(); var member = await memberCache.TryGetAsync(evt.GuildID, evt.User.ID); if (member != null) { } return Result.Success; } finally { await memberCache.RemoveAsync(evt.GuildID, evt.User.ID); } } }