using Catalogger.Backend.Cache.InMemoryCache; using Catalogger.Backend.Database; using Catalogger.Backend.Database.Queries; using Catalogger.Backend.Extensions; using Catalogger.Backend.Services; using Remora.Discord.API.Abstractions.Gateway.Events; using Remora.Discord.Extensions.Embeds; using Remora.Discord.Gateway.Responders; using Remora.Results; namespace Catalogger.Backend.Bot.Responders.Roles; public class RoleCreateResponder( ILogger logger, DatabaseContext db, RoleCache roleCache, WebhookExecutorService webhookExecutor ) : IResponder { private readonly ILogger _logger = logger.ForContext(); public async Task RespondAsync(IGuildRoleCreate evt, CancellationToken ct = default) { _logger.Debug("Received new role {RoleId} in guild {GuildId}", evt.Role.ID, evt.GuildID); roleCache.Set(evt.Role, evt.GuildID); var guildConfig = await db.GetGuildAsync(evt.GuildID, ct); var embed = new EmbedBuilder() .WithTitle("Role created") .WithColour(DiscordUtils.Green) .WithDescription( $"**Name:** {evt.Role.Name}\n**Colour:** {evt.Role.Colour.ToPrettyString()}" + $"\n**Mentionable:** {evt.Role.IsMentionable}\n**Shown separately:** {evt.Role.IsHoisted}" ); if (!evt.Role.Permissions.Value.IsZero) { embed.AddField("Permissions", evt.Role.Permissions.ToPrettyString(), inline: false); } webhookExecutor.QueueLog( guildConfig, LogChannelType.GuildRoleCreate, embed.Build().GetOrThrow() ); return Result.Success; } }