Ejemplo n.º 1
0
        public static async Task <EmbedBuilder> CreateGuildAuditLogEmbed(this GuildLevelAuditLogConfig config, IUser actor, RestAction action, IServiceProvider provider)
        {
            var translator = provider.GetService <Translator>();

            await translator.SetContext(config.GuildId);

            EmbedBuilder embed = CreateBasicEmbed(action, provider, actor);

            if (actor != null)
            {
                embed.WithThumbnailUrl(actor.GetAvatarOrDefaultUrl());
            }

            embed.WithTitle(translator.T().NotificationGuildAuditLogTitle());

            switch (action)
            {
            case RestAction.Created:
                embed.WithDescription(translator.T().NotificationGuildAuditLogInternalCreate(translator.T().Enum(config.GuildAuditLogEvent), actor));
                break;

            case RestAction.Updated:
                embed.WithDescription(translator.T().NotificationGuildAuditLogInternalUpdate(translator.T().Enum(config.GuildAuditLogEvent), actor));
                break;

            case RestAction.Deleted:
                return(embed.WithDescription(translator.T().NotificationGuildAuditLogInternalDelete(translator.T().Enum(config.GuildAuditLogEvent), actor)));
            }

            embed.AddField(translator.T().Channel(), $"<#{config.ChannelId}>", false);

            if (config.PingRoles.Length > 0)
            {
                embed.AddField(translator.T().NotificationGuildAuditLogMentionRoles(), string.Join(" ", config.PingRoles.Select(x => $"<@&{x}>")), false);
            }

            return(embed);
        }
Ejemplo n.º 2
0
        private async Task AnnounceGuildAuditLog(GuildLevelAuditLogConfig config, IUser actor, RestAction action)
        {
            using var scope = _serviceProvider.CreateScope();

            _logger.LogInformation($"Announcing guild auditlog {config.GuildId}/{config.GuildAuditLogEvent} ({config.Id}).");

            GuildConfig guildConfig = await GuildConfigRepository.CreateDefault(scope.ServiceProvider).GetGuildConfig(config.GuildId);

            if (!string.IsNullOrEmpty(guildConfig.ModInternalNotificationWebhook))
            {
                _logger.LogInformation($"Sending internal webhook for guild auditlog {config.GuildId}/{config.GuildAuditLogEvent} ({config.Id}) to {guildConfig.ModInternalNotificationWebhook}.");

                try
                {
                    EmbedBuilder embed = await config.CreateGuildAuditLogEmbed(actor, action, scope.ServiceProvider);

                    await _discordAPI.ExecuteWebhook(guildConfig.ModInternalNotificationWebhook, embed.Build());
                }
                catch (Exception e)
                {
                    _logger.LogError(e, $"Error while announcing guild auditlog {config.GuildId}/{config.GuildAuditLogEvent} ({config.Id}) to {guildConfig.ModInternalNotificationWebhook}.");
                }
            }
        }