From 28564384609daf7362365238e390e11678368026 Mon Sep 17 00:00:00 2001 From: Pingex Date: Sat, 7 May 2016 21:02:41 +0200 Subject: [PATCH] List of commands command and command description. --- .../java/net/pingex/discordbot/Command.java | 5 ++ .../discordbot/InternalCommandsModule.java | 51 ++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/pingex/discordbot/Command.java b/src/main/java/net/pingex/discordbot/Command.java index 29d55b7..e40c216 100644 --- a/src/main/java/net/pingex/discordbot/Command.java +++ b/src/main/java/net/pingex/discordbot/Command.java @@ -28,4 +28,9 @@ public @interface Command * Default permission for this command */ DefaultPermission permission() default DefaultPermission.EVERYONE; + + /** + * Description of the command + */ + String description() default "No description provided for this command."; } diff --git a/src/main/java/net/pingex/discordbot/InternalCommandsModule.java b/src/main/java/net/pingex/discordbot/InternalCommandsModule.java index 0cd84d4..c743d34 100644 --- a/src/main/java/net/pingex/discordbot/InternalCommandsModule.java +++ b/src/main/java/net/pingex/discordbot/InternalCommandsModule.java @@ -2,8 +2,7 @@ package net.pingex.discordbot; import sx.blah.discord.api.IDiscordClient; import sx.blah.discord.handle.impl.events.MessageReceivedEvent; - -import java.util.HashMap; +import java.util.Map; /** * Internal commands of the bot, such as `help`, and so on @@ -45,4 +44,52 @@ class InternalCommandsModule extends AbstractModule return toReturn.toString(); } + + /** + * List all commands registered + * @param page Page number + * @return String representation of this command + */ + @Command(shorthand = "list", description = "List all commands available to you.") + public String list(MessageReceivedEvent event, int page) + { + Map commands = CommandDispatcher.getInstance().getCommandList(); + Map shorthands = CommandDispatcher.getInstance().getShortList(); + + int pagesCount = (int) Math.ceil(commands.size()/10.0); + if(page > pagesCount || page <= 0) + return "Page doesn't exist. " + pagesCount + " pages are available."; + + StringBuffer toReturn = new StringBuffer("List of commands "); + toReturn.append("(page ").append(page).append("/").append(pagesCount).append(")\n"); + + int pos = 1; + for(Map.Entry i : commands.entrySet()) + { + if(pos > page*10-10 && pos <= page*10) + { + toReturn.append("- ").append(i.getKey()); + for(Class j : i.getValue().getMethod().getParameterTypes()) + if(j != MessageReceivedEvent.class) + toReturn.append(" <").append(j.getName()).append(">"); + toReturn.append("\t\t").append(i.getValue().getMethod().getAnnotation(Command.class).description()); + + // Shorthand + if(shorthands.containsValue(i.getKey())) + { + toReturn.append(" (shorthand: "); + for(Map.Entry j : shorthands.entrySet()) + if(j.getValue().equals(i.getKey())) + { + toReturn.append(j.getKey()); + break; + } + toReturn.append(")"); + } + toReturn.append("\n"); + } + pos++; + } + return toReturn.toString(); + } }