private async Task ExecuteAction(MessageContext context, ModerationPunishment action, string reason, SocketGuildUser user = null) { user ??= context.socketServerUser ?? throw new ArgumentNullException($"Both {nameof(user)} and {nameof(context)}.{nameof(MessageContext.socketServerUser)} are null."); var embedBuilder = MopBot.GetEmbedBuilder(user.Guild) .WithAuthor(user) .WithDescription($"**Reason:** `{reason}`"); bool RequirePermission(DiscordPermission discordPermission) { if (!context.server.CurrentUser.HasChannelPermission(context.socketServerChannel, DiscordPermission.BanMembers)) { action = ModerationPunishment.Announce; embedBuilder.Title = $"{embedBuilder.Title}\r\n**Attempted to execute action '{action}', but the following permission was missing: `{DiscordPermission.BanMembers}`."; return(false); } return(true); } switch (action) { case ModerationPunishment.Kick: if (RequirePermission(DiscordPermission.KickMembers)) { await user.KickAsync(reason : reason); embedBuilder.Title = "User auto-kicked"; } break; case ModerationPunishment.Ban: if (RequirePermission(DiscordPermission.KickMembers)) { await user.BanAsync(reason : reason); embedBuilder.Title = "User auto-banned"; } break; } if (action == ModerationPunishment.Announce) { embedBuilder.Title = "User violation detected"; } var data = context.server.GetMemory().GetData <AutoModerationSystem, AutoModerationServerData>(); await context.socketTextChannel.SendMessageAsync(data.announcementPrefix, embed : embedBuilder.Build()); }
public async Task MentionSpamSetupCommand(ModerationPunishment moderationPunishment, uint minPingsForBan, byte pingCooldownInSeconds) { if (minPingsForBan < 3) { throw new BotError("For safety reasons, minimal amount of pings for a punishment must be at least `3`."); } if (pingCooldownInSeconds <= 0) { throw new BotError("Ping cooldown can't be `0` seconds."); } var data = Context.server.GetMemory().GetData <AutoModerationSystem, AutoModerationServerData>(); data.mentionSpamPunishment = moderationPunishment; data.minMentionsForAction = minPingsForBan; data.mentionCooldown = pingCooldownInSeconds; }
public async Task MentionSpamSetupCommand(ModerationPunishment moderationAction) { var data = Context.server.GetMemory().GetData <AutoModerationSystem, AutoModerationServerData>(); data.mentionSpamPunishment = moderationAction; }