From ba55956bbfb4a8ee336a99816a4eb9bf9eceb145 Mon Sep 17 00:00:00 2001 From: Stijn Date: Wed, 9 Mar 2022 22:37:44 +0100 Subject: [PATCH] Hopefully finished help command --- .../alttd/commandManager/CommandManager.java | 7 +++ .../alttd/commandManager/DiscordCommand.java | 11 +++- .../commandManager/commands/CommandHelp.java | 56 +++++++++++++++++-- .../java/com/alttd/config/MessagesConfig.java | 6 ++ .../alttd/permissions/PermissionManager.java | 20 ++----- src/main/java/com/alttd/util/Util.java | 15 +++++ 6 files changed, 91 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/alttd/util/Util.java diff --git a/src/main/java/com/alttd/commandManager/CommandManager.java b/src/main/java/com/alttd/commandManager/CommandManager.java index 6c6ea54..28cbb23 100644 --- a/src/main/java/com/alttd/commandManager/CommandManager.java +++ b/src/main/java/com/alttd/commandManager/CommandManager.java @@ -27,4 +27,11 @@ public class CommandManager extends ListenerAdapter { String[] args = Arrays.copyOfRange(s, 1, s.length); } + public List getCommands() { + return commands; + } + + public String getPrefix(long guildId) { + return commandPrefixes.getOrDefault(guildId, "!"); + } } diff --git a/src/main/java/com/alttd/commandManager/DiscordCommand.java b/src/main/java/com/alttd/commandManager/DiscordCommand.java index 1ca468b..021a0f3 100644 --- a/src/main/java/com/alttd/commandManager/DiscordCommand.java +++ b/src/main/java/com/alttd/commandManager/DiscordCommand.java @@ -1,6 +1,7 @@ package com.alttd.commandManager; import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.User; import java.util.List; @@ -13,12 +14,16 @@ public abstract class DiscordCommand { return "command." + getName(); } - public abstract String execute(String[] args, Member commandSource); + public abstract String execute(String[] args, Member commandSource, TextChannel textChannel); - public abstract String execute(String[] args, User commandSource); + public abstract String execute(String[] args, User commandSource, TextChannel textChannel); public abstract String getHelpMessage(); - public abstract List getAlias(); + public String getExtendedHelpMessage() { + return getHelpMessage(); + } + + public abstract List getAliases(); } diff --git a/src/main/java/com/alttd/commandManager/commands/CommandHelp.java b/src/main/java/com/alttd/commandManager/commands/CommandHelp.java index 52ff4b8..4f20133 100644 --- a/src/main/java/com/alttd/commandManager/commands/CommandHelp.java +++ b/src/main/java/com/alttd/commandManager/commands/CommandHelp.java @@ -1,26 +1,72 @@ package com.alttd.commandManager.commands; +import com.alttd.AltitudeBot; +import com.alttd.commandManager.CommandManager; import com.alttd.commandManager.DiscordCommand; import com.alttd.config.MessagesConfig; +import com.alttd.permissions.PermissionManager; +import com.alttd.templates.Parser; +import com.alttd.templates.Template; +import com.alttd.util.Logger; +import com.alttd.util.Util; import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.PrivateChannel; +import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.User; import java.util.List; +import java.util.Optional; public class CommandHelp extends DiscordCommand { + + private final CommandManager commandManager; + + public CommandHelp(CommandManager commandManager) { + this.commandManager = commandManager; + } + @Override public String getName() { return "help"; } @Override - public String execute(String[] args, Member commandSource) { - return null; + public String execute(String[] args, Member commandSource, TextChannel textChannel) { + return execute(args, textChannel, commandSource.getIdLong(), textChannel.getGuild().getIdLong(), Util.getGroupIds(commandSource)); } @Override - public String execute(String[] args, User commandSource) { - return null; + public String execute(String[] args, User commandSource, TextChannel textChannel) { + if (!(textChannel instanceof PrivateChannel)) + Logger.warning("Using User when executing command on Member: % Command: %", commandSource.getAsMention(), getName()); + return execute(args, textChannel, commandSource.getIdLong(), 0, null); + } + + public String execute(String[] args, TextChannel textChannel, long userId, long guildId, List groupIds) { + PermissionManager permissionManager = AltitudeBot.getInstance().getPermissionManager(); + StringBuilder helpMessage = new StringBuilder(); + if (args.length == 0) { + commandManager.getCommands().stream() + .filter(command -> permissionManager.hasPermission( + textChannel, + userId, + groupIds, + command.getPermission())) + .forEach(command -> helpMessage.append(command.getHelpMessage())); + } else { + String arg = args[0].toLowerCase(); + Optional first = commandManager.getCommands().stream() + .filter(command -> command.getName().equals(arg) + || command.getAliases().contains(arg)).findFirst(); + if (first.isEmpty()) + return Parser.parse(MessagesConfig.INVALID_COMMAND_ARGS, + Template.of("args", arg), + Template.of("command", getName()), + Template.of("prefix", commandManager.getPrefix(guildId))); + DiscordCommand discordCommand = first.get(); + helpMessage.append(discordCommand.getExtendedHelpMessage()); + } + return Parser.parse(MessagesConfig.HELP_MESSAGE_TEMPLATE, Template.of("commands", helpMessage.toString())); } @Override @@ -29,7 +75,7 @@ public class CommandHelp extends DiscordCommand { } @Override - public List getAlias() { + public List getAliases() { return null; } } diff --git a/src/main/java/com/alttd/config/MessagesConfig.java b/src/main/java/com/alttd/config/MessagesConfig.java index a1a2e75..608d844 100644 --- a/src/main/java/com/alttd/config/MessagesConfig.java +++ b/src/main/java/com/alttd/config/MessagesConfig.java @@ -21,4 +21,10 @@ public class MessagesConfig extends AbstractConfig { HELP_MESSAGE_TEMPLATE = messagesConfig.getString("help.message-template", HELP_MESSAGE_TEMPLATE); } + public static String INVALID_COMMAND = " is not a valid command."; + public static String INVALID_COMMAND_ARGS = "`` is/are not valid argument(s) for ``.\nFor more info see help "; + private static void loadInvalidCommands() { + + } + } diff --git a/src/main/java/com/alttd/permissions/PermissionManager.java b/src/main/java/com/alttd/permissions/PermissionManager.java index d3678a3..fa37ac3 100644 --- a/src/main/java/com/alttd/permissions/PermissionManager.java +++ b/src/main/java/com/alttd/permissions/PermissionManager.java @@ -24,28 +24,16 @@ public class PermissionManager { this.privateEnabledCommands = privateEnabledCommands; } - public boolean hasPermission(TextChannel textChannel, User user, String permission) { + public boolean hasPermission(TextChannel textChannel, long userId, List groupIds, String permission) { permission = permission.toLowerCase(); if (textChannel instanceof PrivateChannel) { if (isDisabled(privateEnabledCommands, permission)) return false; - return hasPermission(user.getIdLong(), null, permission); } else { - Logger.warning("Using user for Guild channel % ", textChannel.getAsMention()); - return false; + if (isDisabled(channelEnabledCommands.get(textChannel.getIdLong()), permission.toLowerCase())) + return false; } - } - - public boolean hasPermission(TextChannel textChannel, Member member, String permission) { - permission = permission.toLowerCase(); - if (isDisabled(channelEnabledCommands.get(textChannel.getIdLong()), permission.toLowerCase())) - return false; - return hasPermission( - member.getIdLong(), - member.getRoles().stream() - .map(Role::getIdLong) - .collect(Collectors.toList()), - permission); + return hasPermission(userId, groupIds, permission); } private boolean isDisabled(List enabledCommandList, String permission) { diff --git a/src/main/java/com/alttd/util/Util.java b/src/main/java/com/alttd/util/Util.java new file mode 100644 index 0000000..0a76f13 --- /dev/null +++ b/src/main/java/com/alttd/util/Util.java @@ -0,0 +1,15 @@ +package com.alttd.util; + +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.Role; + +import java.util.List; +import java.util.stream.Collectors; + +public class Util { + public static List getGroupIds(Member member) { + return member.getRoles().stream() + .map(Role::getIdLong) + .collect(Collectors.toList()); + } +}