diff --git a/src/main/java/tech/goodquestion/lembot/command/impl/CommandInfo.java b/src/main/java/tech/goodquestion/lembot/command/impl/CommandInfo.java index 0806dff..ea46f71 100644 --- a/src/main/java/tech/goodquestion/lembot/command/impl/CommandInfo.java +++ b/src/main/java/tech/goodquestion/lembot/command/impl/CommandInfo.java @@ -11,29 +11,19 @@ import tech.goodquestion.lembot.library.Helper; import java.awt.*; -import java.io.IOException; -import java.sql.SQLException; -import java.util.Set; +import java.util.*; + public class CommandInfo implements IBotCommand { public final static CommandManager commandManagerInstance = CommandManager.getInstance(); @Override - public void dispatch(Message message, TextChannel channel, Member sender, String[] args) throws IOException, SQLException { - final char commandPrefix = Config.getInstance().getBotConfig().getPrefix(); - + public void dispatch(Message message, TextChannel channel, Member sender, String[] args) { - Set commandList = commandManagerInstance.getHelpLists(); - // Die Commands, für die der User keine Rechte hat sollen nicht angezeigt werden - commandList.removeIf(commandName -> !commandManagerInstance.getCommand(commandName).isPermitted(sender)); - - String[] commandListArray = commandList.toArray(new String[0]); - - int commandsPerPage = 20; - int minPage = 0; - int maxPage = commandListArray.length / commandsPerPage; + final char commandPrefix = Config.getInstance().getBotConfig().getPrefix(); + // Wird als Embed ausgegeben final EmbedBuilder embedBuilder = new EmbedBuilder(); embedBuilder.setTitle("Command Info\n"); embedBuilder.setColor(Color.decode(EmbedColorHelper.HELP)); @@ -47,36 +37,57 @@ public void dispatch(Message message, TextChannel channel, Member sender, String "\n"+ "\n"; - if(args.length != 0 && !isNumeric(args[0])) { - // Die Information für einen bestimmten Command wird angefragt - - if(commandList.contains(args[0])) { - // Command existiert - IBotCommand command = commandManagerInstance.getCommand(args[0]); + // Alle commands + Map commandsMap = commandManagerInstance.getCommands(); + // Eine liste der Commands, auf die der User Zugriff hat + Set availableCommands = commandsMap.keySet(); - embedBuilder.addField(command.getName(), command.getDescription(), false); - } - } else { - // Kein bestimmter Command angegeben, es werden alle der angegebenen Seite (args[0]) angezeigt - int page; - if(args.length == 0) { - page = 0; - } else { - page = Integer.parseInt(args[0]) - 1; + // Prüft bei jedem Command, ob der User diesen ausführen darf + for(IBotCommand command : commandsMap.values()) { + if (!command.isPermitted(sender)) { + // Wenn der User keine Rechte für den Command hat, wird dieser aus dem Set entfernt + availableCommands.remove(command.getName()); } + } - if(!(page < minPage || page > maxPage)) { - page = 0; + + if(args.length != 0 && isNotNumeric(args[0])) { + // Die Information für einen bestimmten oder mehrere bestimmte Commands wird angefragt. + try { + availableCommands.removeIf(commandName -> !Arrays.asList(args).contains(commandName)); + } catch (Exception e) { + System.out.println(e.getMessage()); } + } + + // Es sollen alle Commands auf mehrere Seiten verteilt werden + int page; + int commandsPerPage = 20; + int minPage = 0; - int firstCommandNumber = page * commandsPerPage; - for(int commandNumber = firstCommandNumber; commandNumber < (firstCommandNumber + commandsPerPage); commandNumber++) { - IBotCommand command = commandManagerInstance.getCommand(commandListArray[commandNumber]); + // In ein Array umgewandelt, damit die Commands einer bestimmten Seite angezeigt werden + String[] availableCommandsArray = availableCommands.toArray(new String[0]); + // Ceiling round (immer aufrunden) + int maxPage = availableCommandsArray.length / commandsPerPage; - embedBuilder.addField(command.getName(), command.getDescription(), false); - } - embedBuilder.setFooter("Seite " + (page + 1) + " von " + (maxPage + 1) + ". ("+ commandPrefix + getName() +" [Seite])"); + // Prüft, ob eine gültige Seitenzahl vom User angegeben wird, wenn nicht, wird die erste Seite aufgerufen + if(args.length == 0 || isNotNumeric(args[args.length - 1])) { + page = 0; + } else { + page = Integer.parseInt(args[args.length-1]) - 1; + } + if(page < minPage || page > maxPage) { + page = 0; + } + + int firstCommandNumber = page * commandsPerPage; + // Die Commands der Seite werden nacheinander ausgegeben + for(int commandNumber = firstCommandNumber; commandNumber <= (firstCommandNumber + commandsPerPage) && commandNumber < availableCommandsArray.length; commandNumber++) { + IBotCommand command = commandManagerInstance.getCommand(availableCommandsArray[commandNumber]); + embedBuilder.addField(commandPrefix + command.getName(), command.getDescription(), false); } + embedBuilder.setFooter("Seite " + (page + 1) + " von " + (maxPage + 1) + ". ("+availableCommands.size()+" Commands. Syntax: "+ commandPrefix + getName() +" [Command Filter] [Seite])"); + embedBuilder.setDescription(description); Helper.sendEmbed(embedBuilder, message, false); } @@ -96,15 +107,15 @@ public boolean isPermitted(final Member member) { return true; } - private static boolean isNumeric(String strNum) { + private static boolean isNotNumeric(String strNum) { if (strNum == null) { - return false; + return true; } try { Integer.parseInt(strNum); } catch (NumberFormatException nfe) { - return false; + return true; } - return true; + return false; } } \ No newline at end of file diff --git a/src/main/java/tech/goodquestion/lembot/event/RaidDetection.java b/src/main/java/tech/goodquestion/lembot/event/RaidDetection.java index f12daf2..038a082 100644 --- a/src/main/java/tech/goodquestion/lembot/event/RaidDetection.java +++ b/src/main/java/tech/goodquestion/lembot/event/RaidDetection.java @@ -8,9 +8,6 @@ import tech.goodquestion.lembot.database.QueryHelper; import java.util.Objects; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; public final class RaidDetection extends ListenerAdapter { @@ -45,12 +42,12 @@ public void onGuildMemberJoin(@SuppressWarnings("null") final @NotNull GuildMemb */ - try (ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1)) { + /*try (ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1)) { final Runnable runnable = () -> isSameAttack = false; final int delay = 30; scheduler.schedule(runnable, delay, TimeUnit.MINUTES); - } + }*/ } } \ No newline at end of file