diff --git a/src/main/java/de/progen_bot/commands/moderator/CommandWarn.java b/src/main/java/de/progen_bot/commands/moderator/CommandWarn.java new file mode 100644 index 0000000..322e8e8 --- /dev/null +++ b/src/main/java/de/progen_bot/commands/moderator/CommandWarn.java @@ -0,0 +1,83 @@ +package de.progen_bot.commands.moderator; + +import java.awt.Color; +import java.time.Instant; +import java.util.List; +import java.util.Arrays; + +import de.progen_bot.command.CommandHandler; +import de.progen_bot.command.CommandManager.ParsedCommandString; +import de.progen_bot.core.Main; +import de.progen_bot.db.dao.warnlist.WarnListDaoImpl; +import de.progen_bot.db.entities.config.GuildConfiguration; +import de.progen_bot.permissions.AccessLevel; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import org.w3c.dom.Text; + + +public class CommandWarn extends CommandHandler { + private static final String WARN = "WARN"; + private static final String EXECUTOR = "Executor"; + private static final String VICTIM = "Victim"; + private static final String REASON = "Reason"; + private static final String CHANNEL = "Channel"; + + public CommandWarn() { + super("warn", "warn ", "Warn a user"); + } + + private MessageEmbed getWarnEmbed(MessageReceivedEvent event, String reason){ + return new EmbedBuilder() + .setColor(Color.ORANGE) + .setTitle(WARN) + .addField(VICTIM, event.getMessage().getMentionedUsers().get(0).getAsMention(), true) + .addField(EXECUTOR, event.getMember().getAsMention(), true) + .setDescription(event.getMessageId()) + .addField(REASON, reason, false) + .addField(CHANNEL, event.getTextChannel().getAsMention(), false) + .setTimestamp(Instant.now()).build(); + } + + @Override + public void execute(ParsedCommandString parsedCommand, MessageReceivedEvent event, GuildConfiguration configuration) { + + JDA jda = Main.getJda(); + + TextChannel warnChannel = jda.getTextChannelById(configuration.getLogChannelID()); + Member warned; + if (event.getMessage().getMentionedUsers().size() == 1) { + warned = event.getMessage().getMentionedMembers().get(0); + } else { + event.getChannel().sendMessage(new EmbedBuilder().setColor(Color.red).setDescription("No user found").build()) + .queue(); + return; + } + + if (parsedCommand.getArgs().length <= 1) { + event.getChannel().sendMessage(new EmbedBuilder().setColor(Color.red).setDescription("No reason found").build()) + .queue(); + return; + } + + String reason = String.join(" ", Arrays.copyOfRange(parsedCommand.getArgs(), 1, parsedCommand.getArgs().length)); + + final MessageEmbed eb = getWarnEmbed(event, reason); + if(eb == null) + return; + + warnChannel.sendMessage(eb).queue(); + + WarnListDaoImpl dao = new WarnListDaoImpl(); + dao.insertWarn(warned, reason); + } + + @Override + public AccessLevel getAccessLevel() { + return AccessLevel.MODERATOR; + } +} diff --git a/src/main/java/de/progen_bot/commands/moderator/CommandWarnDelete.java b/src/main/java/de/progen_bot/commands/moderator/CommandWarnDelete.java new file mode 100644 index 0000000..c53f8fe --- /dev/null +++ b/src/main/java/de/progen_bot/commands/moderator/CommandWarnDelete.java @@ -0,0 +1,80 @@ +package de.progen_bot.commands.moderator; + +import de.progen_bot.command.CommandHandler; +import de.progen_bot.command.CommandManager; +import de.progen_bot.core.Main; +import de.progen_bot.db.dao.warnlist.WarnListDaoImpl; +import de.progen_bot.db.entities.config.GuildConfiguration; +import de.progen_bot.permissions.AccessLevel; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; + +import java.awt.Color; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; + +public class CommandWarnDelete extends CommandHandler { + private static final String DELETE = "Warn Delete"; + private static final String EXECUTOR = "Executor"; + private static final String PARDON = "Member"; + private static final String WARN = "Warn"; + public CommandWarnDelete() { + super("warndelete", "warndelete ", "Delete warn of a user"); + } + + private MessageEmbed getDeleteEmbed(MessageReceivedEvent event, String reason){ + return new EmbedBuilder() + .setColor(Color.green) + .setTitle(DELETE) + .addField(PARDON, event.getMessage().getMentionedUsers().get(0).getAsMention(), true) + .addField(EXECUTOR, event.getMember().getAsMention(), true) + .setDescription(event.getMessageId()) + .addField(WARN, reason, false) + .setTimestamp(Instant.now()) + .build(); + } + + + @Override + public void execute(CommandManager.ParsedCommandString parsedCommand, MessageReceivedEvent event, + GuildConfiguration configuration) { + + + JDA jda = Main.getJda(); + TextChannel warnDeleteChannel = jda.getTextChannelById(configuration.getLogChannelID()); + + if (event.getMember() == null) + return; + + if (event.getMessage().getMentionedMembers().isEmpty()) { + event.getTextChannel().sendMessage(super.messageGenerators.generateErrorMsg("No user found")).queue(); + return; + } + + if (parsedCommand.getArgs().length <= 1) { + event.getChannel() + .sendMessage(new EmbedBuilder().setColor(Color.red).setDescription("No reason found").build()) + .queue(); + return; + } + + String reason = String.join(" ", Arrays.copyOfRange(parsedCommand.getArgs(), 1, parsedCommand.getArgs().length)); + + new WarnListDaoImpl().deleteWarn(event.getMember(), reason); + + final MessageEmbed eb = getDeleteEmbed(event, reason); + if(eb == null) + return; + + warnDeleteChannel.sendMessage(eb).queue(); + } + + @Override + public AccessLevel getAccessLevel() { + return AccessLevel.MODERATOR; + } +} diff --git a/src/main/java/de/progen_bot/commands/moderator/blacklist/CommandBan.java b/src/main/java/de/progen_bot/commands/moderator/blacklist/CommandBan.java new file mode 100644 index 0000000..7e490e3 --- /dev/null +++ b/src/main/java/de/progen_bot/commands/moderator/blacklist/CommandBan.java @@ -0,0 +1,93 @@ +package de.progen_bot.commands.moderator.blacklist; + +import de.progen_bot.command.CommandHandler; +import de.progen_bot.command.CommandManager; +import de.progen_bot.core.Main; +import de.progen_bot.db.entities.config.GuildConfiguration; +import de.progen_bot.permissions.AccessLevel; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.exceptions.InsufficientPermissionException; + +import java.awt.*; +import java.time.Instant; +import java.util.List; + +public class CommandBan extends CommandHandler { + private static final String BAN = "BAN"; + private static final String EXECUTOR = "Executor"; + private static final String VICTIM = "Victim"; + private static final String REASON = "Reason"; + private static final String CHANNEL = "Channel"; + + public CommandBan() { + super("ban", "ban ", "Ban a user from this Server"); + } + + private static MessageEmbed getBanEmbed(MessageReceivedEvent event, String reason) { + return new EmbedBuilder().setColor(Color.red).setTitle(BAN) + .addField(VICTIM, event.getMessage().getMentionedUsers().get(0).getAsMention(), true) + .addField(EXECUTOR, event.getMember().getAsMention(), true).setDescription(event.getMessageId()) + .addField(CHANNEL, event.getTextChannel().getAsMention(), false) + .addField(REASON, reason, false).setTimestamp(Instant.now()).build(); + } + + @Override + public void execute(CommandManager.ParsedCommandString parsedCommand, MessageReceivedEvent event, GuildConfiguration configuration) { + + JDA jda = Main.getJda(); + TextChannel banChannel = jda.getTextChannelById(configuration.getLogChannelID()); + + Member selfMember = event.getMember(); + + if (selfMember == null) + return; + + final List argsWithoutMention = parsedCommand.getArgsAsList().subList(1, + parsedCommand.getArgsAsList().size()); + + String reason; + if (argsWithoutMention.isEmpty()) + reason = "No reason"; + else + reason = String.join(" ", argsWithoutMention); + + final MessageEmbed eb = getBanEmbed(event, reason); + if (eb == null) + return; + + if (parsedCommand.getArgs().length > 0) { + User user = event.getJDA().retrieveUserById(event.getMessage().getMentionedUsers().get(0).getId()) + .complete(); + + if (user == null) { + System.out.println("unknown user"); + return; + } + + if (user == null){ + user.openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage(eb).queue()); + }else { + System.out.println("Cannot deliver message to user. The direct message function seems to be deactivated,"); + } + + try { + event.getGuild().ban(user, 7, reason).queue(v -> { + banChannel.sendMessage(eb); + }); + } catch (InsufficientPermissionException e) { + event.getTextChannel().sendMessage(super.messageGenerators.generateErrorMsg("Failed to ban user " + event.getMember().getAsMention())); + } + } + } + + @Override + public AccessLevel getAccessLevel() { + return AccessLevel.MODERATOR; + } +} diff --git a/src/main/java/de/progen_bot/commands/moderator/blacklist/CommandKick.java b/src/main/java/de/progen_bot/commands/moderator/blacklist/CommandKick.java new file mode 100644 index 0000000..11dd2cf --- /dev/null +++ b/src/main/java/de/progen_bot/commands/moderator/blacklist/CommandKick.java @@ -0,0 +1,75 @@ +package de.progen_bot.commands.moderator.blacklist; + +import de.progen_bot.command.CommandHandler; +import de.progen_bot.command.CommandManager; +import de.progen_bot.core.Main; +import de.progen_bot.db.entities.config.GuildConfiguration; +import de.progen_bot.permissions.AccessLevel; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.*; +import net.dv8tion.jda.api.events.guild.invite.GuildInviteCreateEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.requests.restaction.InviteAction; + +import javax.annotation.Nonnull; +import java.awt.*; +import java.time.Instant; +import java.util.List; + + +public class CommandKick extends CommandHandler { + private static final String KICK = "KICK"; + private static final String EXECUTOR = "Executor"; + private static final String VICTIM = "Victim"; + private static final String REASON = "Reason"; + private static final String CHANNEL = "Channel"; + + public CommandKick() { + super("kick" , "kick <@user> " , "Kick a user from this server"); + } + + private MessageEmbed getKickEmbed(MessageReceivedEvent event, String reason) { + if (event.getMember() == null) + return null; + + return new EmbedBuilder() + .setColor(Color.MAGENTA) + .setTitle(KICK) + .addField(VICTIM, event.getMessage().getMentionedMembers().get(0).getAsMention(), true) + .addField(EXECUTOR, event.getMember().getAsMention(),true) + .setDescription(event.getMessageId()) + .addField(CHANNEL, event.getTextChannel().getAsMention(), false) + .addField(REASON, reason, false) + .setTimestamp(Instant.now()).build(); + } + + @Override + public void execute(CommandManager.ParsedCommandString parsedCommand , MessageReceivedEvent event , GuildConfiguration configuration) { + final List argsWithoutMention = parsedCommand.getArgsAsList().subList(1, parsedCommand.getArgsAsList().size()); + + JDA jda = Main.getJda(); + TextChannel kickChannel = jda.getTextChannelById(configuration.getLogChannelID()); + + String reason; + if (argsWithoutMention.isEmpty()) + reason = "No reason"; + else + reason = String.join(" ", argsWithoutMention); + + final MessageEmbed eb = this.getKickEmbed(event, reason); + if (eb == null) + return; + kickChannel.sendMessage(eb); + event.getMessage().getMentionedUsers().get(0).openPrivateChannel().queue( + privateChannel -> privateChannel.sendMessage(eb).queue() + ); + final Member target = event.getMessage().getMentionedMembers().get(0); + event.getGuild().kick(target).queue(); + } + + @Override + public AccessLevel getAccessLevel() { + return AccessLevel.MODERATOR; + } +}