From 70e053dedac3b7656f412c5aec4f697e0211847c Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sat, 12 Nov 2022 11:35:00 +0100 Subject: [PATCH 1/8] First pass on properly restructuring the internal command interface --- .../java/xyz/dynxsty/dih4jda/DIH4JDA.java | 5 +- .../dynxsty/dih4jda/InteractionHandler.java | 93 +++++++++---------- .../java/xyz/dynxsty/dih4jda/SmartQueue.java | 16 ++-- .../dih4jda/events/DIH4JDAEventListener.java | 8 +- .../events/InsufficientPermissionsEvent.java | 6 +- .../dih4jda/events/InvalidRoleEvent.java | 6 +- .../dih4jda/events/InvalidUserEvent.java | 6 +- .../commands/ApplicationCommand.java | 40 ++++++++ .../interactions/commands/ContextCommand.java | 27 +----- ...actCommand.java => RestrictedCommand.java} | 24 +---- .../interactions/commands/SlashCommand.java | 52 ++++------- .../dynxsty/dih4jda/util/CommandUtils.java | 8 +- 12 files changed, 134 insertions(+), 157 deletions(-) create mode 100644 src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ApplicationCommand.java rename src/main/java/xyz/dynxsty/dih4jda/interactions/commands/{AbstractCommand.java => RestrictedCommand.java} (83%) diff --git a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java index 4dd908f3..7b9e7217 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java +++ b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java @@ -8,6 +8,7 @@ import xyz.dynxsty.dih4jda.exceptions.DIH4JDAException; import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; import xyz.dynxsty.dih4jda.interactions.commands.RegistrationType; +import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; import xyz.dynxsty.dih4jda.interactions.components.ButtonHandler; import xyz.dynxsty.dih4jda.interactions.components.EntitySelectMenuHandler; @@ -38,7 +39,7 @@ public class DIH4JDA extends ListenerAdapter { /** * The default {@link RegistrationType} which is used for queuing new commands. - * This can be overridden using {@link xyz.dynxsty.dih4jda.interactions.commands.AbstractCommand#setRegistrationType(RegistrationType)} + * This can be overridden using {@link xyz.dynxsty.dih4jda.interactions.commands.ApplicationCommand#setRegistrationType(RegistrationType)} */ public static RegistrationType defaultCommandType; @@ -157,7 +158,7 @@ public void addSlashCommands(SlashCommand... commands) { * * @param commands An array of commands to register. */ - public void addContextCommands(ContextCommand... commands) { + public void addContextCommands(ContextCommand... commands) { handler.contextCommands.addAll(List.of(commands)); } diff --git a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java index 0984be17..20a2d8ef 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java +++ b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java @@ -31,7 +31,8 @@ import xyz.dynxsty.dih4jda.events.ModalExceptionEvent; import xyz.dynxsty.dih4jda.exceptions.CommandNotRegisteredException; import xyz.dynxsty.dih4jda.exceptions.DIH4JDAException; -import xyz.dynxsty.dih4jda.interactions.commands.AbstractCommand; +import xyz.dynxsty.dih4jda.interactions.commands.ApplicationCommand; +import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import xyz.dynxsty.dih4jda.interactions.commands.AutoCompletable; import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; import xyz.dynxsty.dih4jda.interactions.commands.RegistrationType; @@ -77,7 +78,7 @@ public class InteractionHandler extends ListenerAdapter { } protected final Set slashCommands; - protected final Set contextCommands; + protected final Set> contextCommands; /** * The main {@link DIH4JDA} instance. */ @@ -166,10 +167,10 @@ public static Map getRetrievedCommands() { */ public void registerInteractions() throws ReflectiveOperationException { // retrieve (and smartqueue) guild commands - Pair, Set> data = new Pair<>(getSlashCommands(), getContextCommandData()); + Pair, Set>> data = new Pair<>(getSlashCommands(), getContextCommandData()); for (Guild guild : config.getJDA().getGuilds()) { guild.retrieveCommands().queue(existing -> { - Pair, Set> guildData = CommandUtils.filterByType(data, RegistrationType.GUILD); + Pair, Set>> guildData = CommandUtils.filterByType(data, RegistrationType.GUILD); existing.forEach(this::cacheCommand); // check if smart queuing is enabled if (config.isGuildSmartQueue()) { @@ -184,7 +185,7 @@ public void registerInteractions() throws ReflectiveOperationException { } // retrieve (and smartqueue) global commands config.getJDA().retrieveCommands().queue(existing -> { - Pair, Set> globalData = CommandUtils.filterByType(data, RegistrationType.GLOBAL); + Pair, Set>> globalData = CommandUtils.filterByType(data, RegistrationType.GLOBAL); existing.forEach(this::cacheCommand); // check if smart queuing is enabled if (config.isGlobalSmartQueue()) { @@ -212,8 +213,8 @@ public void registerInteractions() throws ReflectiveOperationException { * @param slashCommand A set of {@link SlashCommandData}. * @param contextCommands A set of {@link CommandData}, */ - private void upsert(@Nonnull JDA jda, @Nonnull Set slashCommand, @Nonnull Set contextCommands) { - slashCommand.forEach(data -> jda.upsertCommand(data.getSlashCommandData()).queue(this::cacheCommand)); + private void upsert(@Nonnull JDA jda, @Nonnull Set slashCommand, @Nonnull Set> contextCommands) { + slashCommand.forEach(data -> jda.upsertCommand(data.getCommandData()).queue(this::cacheCommand)); contextCommands.forEach(data -> jda.upsertCommand(data.getCommandData()).queue(this::cacheCommand)); } @@ -224,20 +225,20 @@ private void upsert(@Nonnull JDA jda, @Nonnull Set slashCommand, @ * @param slashCommands A set of {@link SlashCommandData}. * @param contextCommands A set of {@link CommandData}, */ - private void upsert(@Nonnull Guild guild, @Nonnull Set slashCommands, @Nonnull Set contextCommands) { + private void upsert(@Nonnull Guild guild, @Nonnull Set slashCommands, @Nonnull Set> contextCommands) { StringBuilder commandNames = new StringBuilder(); slashCommands.forEach(data -> { Pair pair = data.getRequiredGuilds(); if (pair.getFirst() == null) { - guild.upsertCommand(data.getSlashCommandData()).queue(this::cacheCommand); - commandNames.append(", /").append(data.getSlashCommandData().getName()); + guild.upsertCommand(data.getCommandData()).queue(this::cacheCommand); + commandNames.append(", /").append(data.getCommandData().getName()); } else { if (pair.getFirst()) { if (Arrays.asList(pair.getSecond()).contains(guild.getIdLong())) { - guild.upsertCommand(data.getSlashCommandData()).queue(this::cacheCommand); - commandNames.append(", /").append(data.getSlashCommandData().getName()); + guild.upsertCommand(data.getCommandData()).queue(this::cacheCommand); + commandNames.append(", /").append(data.getCommandData().getName()); } else { - DIH4JDALogger.info(DIH4JDALogger.Type.SLASH_COMMAND_SKIPPED, "Skipping Registration of /%s for Guild: %s", data.getSlashCommandData().getName(), guild.getName()); + DIH4JDALogger.info(DIH4JDALogger.Type.SLASH_COMMAND_SKIPPED, "Skipping Registration of /%s for Guild: %s", data.getCommandData().getName(), guild.getName()); } } } @@ -290,7 +291,7 @@ private void findContextCommands(String pkg) throws ReflectiveOperationException Set> subTypes = classes.getSubTypesOf(ContextCommand.class); for (Class subType : subTypes) { if (Checks.checkEmptyConstructor(subType)) { - contextCommands.add((ContextCommand) ClassUtils.getInstance(subType)); + contextCommands.add((ContextCommand) ClassUtils.getInstance(subType)); } else { DIH4JDALogger.error("Could not initialize %s! The class MUST contain a empty public constructor.", subType.getName()); } @@ -307,7 +308,7 @@ private void findContextCommands(String pkg) throws ReflectiveOperationException if (command != null) { SlashCommandData data = getBaseCommandData(command, command.getClass()); if (data != null) { - command.setSlashCommandData(data); + command.setCommandData(data); } if (command.getRegistrationType() != RegistrationType.GUILD && command.getRequiredGuilds().getFirst() != null && command.getRequiredGuilds().getSecond() != null && @@ -329,14 +330,14 @@ private void findContextCommands(String pkg) throws ReflectiveOperationException */ private void searchForAutoCompletable(@Nonnull SlashCommand command, @Nonnull Class clazz) { // check base command - String baseName = command.getSlashCommandData().getName(); + String baseName = command.getCommandData().getName(); if (Checks.checkImplementation(clazz, AutoCompletable.class)) { autoCompleteIndex.put(baseName, (AutoCompletable) command); } // check subcommands for (SlashCommand.Subcommand child : command.getSubcommands()) { if (Checks.checkImplementation(child.getClass(), AutoCompletable.class)) { - autoCompleteIndex.put(CommandUtils.buildCommandPath(baseName, child.getSubcommandData().getName()), (AutoCompletable) child); + autoCompleteIndex.put(CommandUtils.buildCommandPath(baseName, child.getCommandData().getName()), (AutoCompletable) child); } } // check subcommand groups @@ -345,7 +346,7 @@ private void searchForAutoCompletable(@Nonnull SlashCommand command, @Nonnull Cl // check subcommands for (SlashCommand.Subcommand child : childGroup.getSubcommands()) { if (Checks.checkImplementation(child.getClass(), AutoCompletable.class)) { - autoCompleteIndex.put(CommandUtils.buildCommandPath(baseName, groupName, child.getSubcommandData().getName()), (AutoCompletable) child); + autoCompleteIndex.put(CommandUtils.buildCommandPath(baseName, groupName, child.getCommandData().getName()), (AutoCompletable) child); } } } @@ -360,11 +361,11 @@ private void searchForAutoCompletable(@Nonnull SlashCommand command, @Nonnull Cl */ private @Nullable SlashCommandData getBaseCommandData(@Nonnull SlashCommand command, @Nonnull Class commandClass) { // find component (and modal) handlers - if (command.getSlashCommandData() == null) { + if (command.getCommandData() == null) { DIH4JDALogger.warn("Class %s is missing CommandData. It will be ignored.", commandClass.getName()); return null; } - SlashCommandData commandData = command.getSlashCommandData(); + SlashCommandData commandData = command.getCommandData(); if (command.getSubcommandGroups() != null && command.getSubcommandGroups().length != 0) { commandData.addSubcommandGroups(getSubcommandGroupData(command)); } @@ -374,7 +375,7 @@ private void searchForAutoCompletable(@Nonnull SlashCommand command, @Nonnull Cl if (command.getSubcommandGroups() != null && command.getSubcommandGroups().length == 0 && command.getSubcommands() != null && command.getSubcommands().length == 0) { slashCommandIndex.put(CommandUtils.buildCommandPath(commandData.getName()), command); - DIH4JDALogger.info(DIH4JDALogger.Type.SLASH_COMMAND_REGISTERED, "\t[*] Registered command: /%s (%s)", command.getSlashCommandData().getName(), command.getRegistrationType().name()); + DIH4JDALogger.info(DIH4JDALogger.Type.SLASH_COMMAND_REGISTERED, "\t[*] Registered command: /%s (%s)", command.getCommandData().getName(), command.getRegistrationType().name()); } return commandData; } @@ -417,19 +418,19 @@ private void searchForAutoCompletable(@Nonnull SlashCommand command, @Nonnull Cl Set subDataList = new HashSet<>(); for (SlashCommand.Subcommand subcommand : subcommands) { if (subcommand != null) { - if (subcommand.getSubcommandData() == null) { + if (subcommand.getCommandData() == null) { DIH4JDALogger.warn("Class %s is missing SubcommandData. It will be ignored.", subcommand.getClass().getSimpleName()); continue; } String commandPath; if (subGroupName == null) { - commandPath = CommandUtils.buildCommandPath(command.getSlashCommandData().getName(), subcommand.getSubcommandData().getName()); + commandPath = CommandUtils.buildCommandPath(command.getCommandData().getName(), subcommand.getCommandData().getName()); } else { - commandPath = CommandUtils.buildCommandPath(command.getSlashCommandData().getName(), subGroupName, subcommand.getSubcommandData().getName()); + commandPath = CommandUtils.buildCommandPath(command.getCommandData().getName(), subGroupName, subcommand.getCommandData().getName()); } subcommandIndex.put(commandPath, subcommand); DIH4JDALogger.info(DIH4JDALogger.Type.SLASH_COMMAND_REGISTERED, "\t[*] Registered command: /%s (%s)", commandPath, command.getRegistrationType().name()); - subDataList.add(subcommand.getSubcommandData()); + subDataList.add(subcommand.getCommandData()); } } return subDataList; @@ -439,9 +440,9 @@ private void searchForAutoCompletable(@Nonnull SlashCommand command, @Nonnull Cl * Gets all Guild Context commands registered in {@link InteractionHandler#findContextCommands(String)} and * returns their {@link CommandData} as a List. */ - private @Nonnull Set getContextCommandData() { - Set commands = new HashSet<>(); - for (ContextCommand context : contextCommands) { + private @Nonnull Set> getContextCommandData() { + Set> commands = new HashSet<>(); + for (ContextCommand context : contextCommands) { if (context != null) { CommandData data = getContextCommandData(context, context.getClass()); if (data != null) { @@ -465,22 +466,22 @@ private void searchForAutoCompletable(@Nonnull SlashCommand command, @Nonnull Cl * @param commandClass The base context command's class. * @return The new {@link CommandListUpdateAction}. */ - private @Nullable CommandData getContextCommandData(@Nonnull ContextCommand command, @Nonnull Class commandClass) { - if (command.getCommandData() == null) { + private @Nullable CommandData getContextCommandData(@Nonnull ContextCommand command, @Nonnull Class commandClass) { + CommandData data = command.getCommandData(); + if (data == null) { DIH4JDALogger.warn("Class %s is missing CommandData. It will be ignored.", commandClass.getName()); return null; } - CommandData commandData = command.getCommandData(); - if (commandData.getType() == Command.Type.MESSAGE) { - messageContextIndex.put(commandData.getName(), (ContextCommand.Message) command); - } else if (commandData.getType() == Command.Type.USER) { - userContextIndex.put(commandData.getName(), (ContextCommand.User) command); + if (data.getType() == Command.Type.MESSAGE) { + messageContextIndex.put(data.getName(), (ContextCommand.Message) command); + } else if (command.getCommandData().getType() == Command.Type.USER) { + userContextIndex.put(data.getName(), (ContextCommand.User) command); } else { - DIH4JDALogger.error("Invalid Command Type \"%s\" for Context Command! This command will be ignored.", commandData.getType()); + DIH4JDALogger.error("Invalid Command Type \"%s\" for Context Command! This command will be ignored.", data.getType()); return null; } - DIH4JDALogger.info(DIH4JDALogger.Type.CONTEXT_COMMAND_REGISTERED, "\t[*] Registered context command: %s (%s)", command.getCommandData().getName(), command.getRegistrationType().name()); - return commandData; + DIH4JDALogger.info(DIH4JDALogger.Type.CONTEXT_COMMAND_REGISTERED, "\t[*] Registered context command: %s (%s)", data.getName(), command.getRegistrationType().name()); + return data; } /** @@ -490,17 +491,15 @@ private void searchForAutoCompletable(@Nonnull SlashCommand command, @Nonnull Cl * @param event The {@link SlashCommandInteractionEvent} that was fired. */ private void handleSlashCommand(@Nonnull SlashCommandInteractionEvent event) throws CommandNotRegisteredException { - String path = event.getFullCommandName(); - SlashCommand command = slashCommandIndex.get(path); - SlashCommand.Subcommand subcommand = subcommandIndex.get(path); - if (command == null && subcommand == null) { + ApplicationCommand command = slashCommandIndex.containsKey(event.getFullCommandName()) ? + subcommandIndex.get(event.getFullCommandName()) : slashCommandIndex.get(event.getFullCommandName()); + if (command == null) { if (config.isThrowUnregisteredException()) { - throw new CommandNotRegisteredException(String.format("Slash Command \"%s\" is not registered.", path)); + throw new CommandNotRegisteredException(String.format("Slash Command \"%s\" is not registered.", event.getFullCommandName())); } } else { - AbstractCommand req = command != null ? command : subcommand.getParent(); - if (passesRequirements(event, req.getRequiredPermissions(), req.getRequiredUsers(), req.getRequiredRoles())) { - (command != null ? command : subcommand).execute(event); + if (passesRequirements(event, command.getRequiredPermissions(), command.getRequiredUsers(), command.getRequiredRoles())) { + command.execute(event); } } } @@ -545,7 +544,7 @@ private void handleMessageContextCommand(@Nonnull MessageContextInteractionEvent /** * Checks if the given {@link CommandInteraction} passes the - * {@link xyz.dynxsty.dih4jda.interactions.commands.AbstractCommand} requirements. + * {@link RestrictedCommand} requirements. * If not, this will then fire the corresponding event using {@link GenericDIH4JDAEvent#fire(GenericDIH4JDAEvent)} * * @param interaction The {@link CommandInteraction}. diff --git a/src/main/java/xyz/dynxsty/dih4jda/SmartQueue.java b/src/main/java/xyz/dynxsty/dih4jda/SmartQueue.java index 1b9e6147..4f1d188e 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/SmartQueue.java +++ b/src/main/java/xyz/dynxsty/dih4jda/SmartQueue.java @@ -35,10 +35,10 @@ */ public class SmartQueue { private final Set slashCommands; - private final Set contextCommands; + private final Set> contextCommands; private final boolean deleteUnknown; - protected SmartQueue(@Nonnull Set slashCommands, @Nonnull Set contextCommands, boolean deleteUnknown) { + protected SmartQueue(@Nonnull Set slashCommands, @Nonnull Set> contextCommands, boolean deleteUnknown) { this.slashCommands = slashCommands; this.contextCommands = contextCommands; this.deleteUnknown = deleteUnknown; @@ -51,7 +51,7 @@ protected SmartQueue(@Nonnull Set slashCommands, @Nonnull Set, Set> checkGlobal(@Nonnull JDA jda, @Nonnull List existing) { + protected @Nonnull Pair, Set>> checkGlobal(@Nonnull JDA jda, @Nonnull List existing) { if (!existing.isEmpty()) { return removeDuplicates(jda, existing, null); } @@ -65,7 +65,7 @@ protected SmartQueue(@Nonnull Set slashCommands, @Nonnull Set, Set> checkGuild(@Nonnull Guild guild, @Nonnull List existing) { + protected @Nonnull Pair, Set>> checkGuild(@Nonnull Guild guild, @Nonnull List existing) { if (!existing.isEmpty()) { return removeDuplicates(guild.getJDA(), existing, guild); } @@ -81,7 +81,7 @@ protected SmartQueue(@Nonnull Set slashCommands, @Nonnull Set, Set> removeDuplicates(@Nonnull JDA jda, @Nonnull final List existing, @Nullable Guild guild) { + private @Nonnull Pair, Set>> removeDuplicates(@Nonnull JDA jda, @Nonnull final List existing, @Nullable Guild guild) { List commands = new ArrayList<>(existing); boolean global = guild == null; String prefix = String.format("[%s] ", global ? "Global" : guild.getName()); @@ -89,12 +89,12 @@ protected SmartQueue(@Nonnull Set slashCommands, @Nonnull Set { if (contextCommands.stream().anyMatch(data -> CommandUtils.equals(cmd, data.getCommandData(), global)) || - slashCommands.stream().anyMatch(data -> CommandUtils.equals(cmd, data.getSlashCommandData(), global))) { + slashCommands.stream().anyMatch(data -> CommandUtils.equals(cmd, data.getCommandData(), global))) { // check for command in blacklisted guilds // this may be refactored soonTM, as its kinda clunky if (!global) { for (SlashCommand d : slashCommands) { - if (CommandUtils.equals(cmd, d.getSlashCommandData(), false)) { + if (CommandUtils.equals(cmd, d.getCommandData(), false)) { if (d.getRequiredGuilds().getFirst() == null) { return true; } else { @@ -121,7 +121,7 @@ protected SmartQueue(@Nonnull Set slashCommands, @Nonnull Set existing.stream().anyMatch(p -> CommandUtils.equals(p, data.getCommandData(), global))); - slashCommands.removeIf(data -> existing.stream().anyMatch(p -> CommandUtils.equals(p, data.getSlashCommandData(), global))); + slashCommands.removeIf(data -> existing.stream().anyMatch(p -> CommandUtils.equals(p, data.getCommandData(), global))); // remove unknown commands, if enabled if (!commands.isEmpty()) { for (Command command : commands) { diff --git a/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java b/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java index 3bdafb18..9353d07d 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java +++ b/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java @@ -4,7 +4,7 @@ import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.interactions.AutoCompleteQuery; -import xyz.dynxsty.dih4jda.interactions.commands.AbstractCommand; +import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import xyz.dynxsty.dih4jda.interactions.commands.AutoCompletable; import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; @@ -51,7 +51,7 @@ default void onModalException(ModalExceptionEvent event) {} * An event that gets fired when the user, which invoked the command, does NOT have one of the required permissions. * * @param event The {@link InsufficientPermissionsEvent} that was fired. - * @see AbstractCommand#setRequiredPermissions(Permission...) + * @see RestrictedCommand#setRequiredPermissions(Permission...) */ default void onInsufficientPermissions(InsufficientPermissionsEvent event) {} @@ -59,7 +59,7 @@ default void onInsufficientPermissions(InsufficientPermissionsEvent event) {} * An event that gets fired when the user, which invoked the command, is NOT allowed to use this command. * * @param event The {@link InvalidUserEvent} that was fired. - * @see AbstractCommand#setRequiredUsers(Long...) + * @see RestrictedCommand#setRequiredUsers(Long...) */ default void onInvalidUser(InvalidUserEvent event) {} @@ -67,7 +67,7 @@ default void onInvalidUser(InvalidUserEvent event) {} * An event that gets fired when the user, which invoked the command, does NOT have the required roles to use this command. * * @param event The {@link InvalidRoleEvent} that was fired. - * @see AbstractCommand#setRequiredRoles(Long...) + * @see RestrictedCommand#setRequiredRoles(Long...) */ default void onInvalidRole(InvalidRoleEvent event) {} } diff --git a/src/main/java/xyz/dynxsty/dih4jda/events/InsufficientPermissionsEvent.java b/src/main/java/xyz/dynxsty/dih4jda/events/InsufficientPermissionsEvent.java index a422ee6e..2357e692 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/events/InsufficientPermissionsEvent.java +++ b/src/main/java/xyz/dynxsty/dih4jda/events/InsufficientPermissionsEvent.java @@ -3,14 +3,14 @@ import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.interactions.commands.CommandInteraction; import xyz.dynxsty.dih4jda.DIH4JDA; -import xyz.dynxsty.dih4jda.interactions.commands.AbstractCommand; +import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import java.util.Set; /** * An event that gets fired when the user, which invoked the command, does NOT have one of the required permissions. * - * @see AbstractCommand#setRequiredPermissions(Permission...) + * @see RestrictedCommand#setRequiredPermissions(Permission...) */ public class InsufficientPermissionsEvent extends GenericDIH4JDAEvent { @@ -23,7 +23,7 @@ public InsufficientPermissionsEvent(DIH4JDA dih4jda, CommandInteraction interact /** * @return An immutable {@link Set} of all "required" permissions for the executed command. - * @see AbstractCommand#setRequiredPermissions(Permission...) + * @see RestrictedCommand#setRequiredPermissions(Permission...) */ public Set getPermissions() { return permissions; diff --git a/src/main/java/xyz/dynxsty/dih4jda/events/InvalidRoleEvent.java b/src/main/java/xyz/dynxsty/dih4jda/events/InvalidRoleEvent.java index 23eaae5c..c07a8428 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/events/InvalidRoleEvent.java +++ b/src/main/java/xyz/dynxsty/dih4jda/events/InvalidRoleEvent.java @@ -2,14 +2,14 @@ import net.dv8tion.jda.api.interactions.commands.CommandInteraction; import xyz.dynxsty.dih4jda.DIH4JDA; -import xyz.dynxsty.dih4jda.interactions.commands.AbstractCommand; +import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import java.util.Set; /** * An event that gets fired when the user, which invoked the command, does NOT have the required roles to use this command. * - * @see AbstractCommand#setRequiredRoles(Long...) + * @see RestrictedCommand#setRequiredRoles(Long...) */ public class InvalidRoleEvent extends GenericDIH4JDAEvent { @@ -22,7 +22,7 @@ public InvalidRoleEvent(DIH4JDA dih4jda, CommandInteraction interaction, Set getRoleIds() { return roleIds; diff --git a/src/main/java/xyz/dynxsty/dih4jda/events/InvalidUserEvent.java b/src/main/java/xyz/dynxsty/dih4jda/events/InvalidUserEvent.java index 9fff9360..295873b4 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/events/InvalidUserEvent.java +++ b/src/main/java/xyz/dynxsty/dih4jda/events/InvalidUserEvent.java @@ -2,14 +2,14 @@ import net.dv8tion.jda.api.interactions.commands.CommandInteraction; import xyz.dynxsty.dih4jda.DIH4JDA; -import xyz.dynxsty.dih4jda.interactions.commands.AbstractCommand; +import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import java.util.Set; /** * An event that gets fired when the user, which invoked the command, is NOT allowed to use this command. * - * @see AbstractCommand#setRequiredUsers(Long...) + * @see RestrictedCommand#setRequiredUsers(Long...) */ public class InvalidUserEvent extends GenericDIH4JDAEvent { @@ -22,7 +22,7 @@ public InvalidUserEvent(DIH4JDA dih4jda, CommandInteraction interaction, Set getUserIds() { return userIds; diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ApplicationCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ApplicationCommand.java new file mode 100644 index 00000000..c787cfbf --- /dev/null +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ApplicationCommand.java @@ -0,0 +1,40 @@ +package xyz.dynxsty.dih4jda.interactions.commands; + +import xyz.dynxsty.dih4jda.DIH4JDA; + +public abstract class ApplicationCommand extends RestrictedCommand implements ExecutableCommand { + + private RegistrationType registrationType = DIH4JDA.defaultCommandType; + private T data; + + /** + * Sets this commands' {@link E CommandData}. + * + * @param data The {@link E CommandData} which should be used for this application command. + */ + public final void setCommandData(T data) { + this.data = data; + } + + public final T getCommandData() { + return data; + } + + /** + * The {@link RegistrationType} the command got assigned. + * + * @return the {@link RegistrationType}. + */ + public RegistrationType getRegistrationType() { + return registrationType; + } + + /** + * How the command should be queued. This DOES NOT work with {@link SlashCommand.Subcommand}! + * + * @param type the {@link RegistrationType} to set. + */ + public void setRegistrationType(RegistrationType type) { + this.registrationType = type; + } +} diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java index 7fd41471..352e0e98 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java @@ -14,32 +14,11 @@ * @see ContextCommand.Message#execute * @since v1.5 */ -public class ContextCommand extends AbstractCommand { - private CommandData commandData = null; +public abstract class ContextCommand extends ApplicationCommand { private ContextCommand() {} - public CommandData getCommandData() { - return commandData; - } + public abstract static class User extends ContextCommand {} - /** - * Sets this commands' {@link CommandData}. - * - * @param commandData The corresponding {@link CommandData} which should be used for this context command. - * @see net.dv8tion.jda.api.interactions.commands.build.Commands#user(String) - * @see net.dv8tion.jda.api.interactions.commands.build.Commands#message(String) - */ - public void setCommandData(@Nonnull CommandData commandData) { - if (commandData.getType() == net.dv8tion.jda.api.interactions.commands.Command.Type.MESSAGE || - commandData.getType() == net.dv8tion.jda.api.interactions.commands.Command.Type.USER) { - this.commandData = commandData; - } else { - DIH4JDALogger.error(String.format("Invalid Command Type \"%s\" for Context Command! This command will be ignored.", commandData.getType())); - } - } - - public abstract static class User extends ContextCommand implements ExecutableCommand {} - - public abstract static class Message extends ContextCommand implements ExecutableCommand {} + public abstract static class Message extends ContextCommand {} } diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/AbstractCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java similarity index 83% rename from src/main/java/xyz/dynxsty/dih4jda/interactions/commands/AbstractCommand.java rename to src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java index 611bb4b4..82996d5b 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/AbstractCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java @@ -13,8 +13,7 @@ * * @since v1.6 */ -public abstract class AbstractCommand { - private RegistrationType type = DIH4JDA.defaultCommandType; +public abstract class RestrictedCommand { //The command requirements private Pair requiredGuilds = new Pair<>(null, null); @@ -22,24 +21,6 @@ public abstract class AbstractCommand { private Long[] requiredUsers = new Long[]{}; private Long[] requiredRoles = new Long[]{}; - /** - * The {@link RegistrationType} the command got assigned. - * - * @return the {@link RegistrationType}. - */ - public final RegistrationType getRegistrationType() { - return type; - } - - /** - * How the command should be queued. This DOES NOT work with {@link SlashCommand.Subcommand}! - * - * @param type the {@link RegistrationType} to set. - */ - public final void setRegistrationType(RegistrationType type) { - this.type = type; - } - /** * Allows a set of {@link Guild}s to update their Slash Commands. * @@ -50,9 +31,6 @@ public final void setRegistrationType(RegistrationType type) { * @param guilds An array of {@link Long}s. */ public final void setRequiredGuilds(boolean restrictQueue, Long... guilds) { - if (restrictQueue && type != RegistrationType.GUILD) { - throw new UnsupportedOperationException("Cannot restrict queue for Global Commands!"); - } requiredGuilds = new Pair<>(restrictQueue, guilds); } diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/SlashCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/SlashCommand.java index c1dd9a33..bb3d5e39 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/SlashCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/SlashCommand.java @@ -17,28 +17,13 @@ * * @since v1.5 */ -public abstract class SlashCommand extends AbstractCommand implements ExecutableCommand { - - private SlashCommandData data = null; +public abstract class SlashCommand extends ApplicationCommand { private Subcommand[] subcommands = new Subcommand[]{}; private SubcommandGroup[] subcommandGroups = new SubcommandGroup[]{}; protected SlashCommand() { } - public final SlashCommandData getSlashCommandData() { - return data; - } - - /** - * Sets this commands' {@link SlashCommandData}. - * - * @param commandData The {@link SlashCommandData} which should be used for this command. - */ - public final void setSlashCommandData(SlashCommandData commandData) { - this.data = commandData; - } - public final Subcommand[] getSubcommands() { return subcommands; } @@ -83,31 +68,16 @@ public void execute(SlashCommandInteractionEvent event) {} * @return The {@link Command} corresponding to this class. */ public @Nullable Command asCommand() { - if (data == null) return null; - return InteractionHandler.getRetrievedCommands().get(data.getName()); + if (getCommandData() == null) return null; + return InteractionHandler.getRetrievedCommands().get(getCommandData().getName()); } /** * Model class which represents a single Subcommand. */ - public abstract static class Subcommand implements ExecutableCommand { - private SubcommandData data = null; + public abstract static class Subcommand extends ApplicationCommand { private SlashCommand parent = null; - public final SubcommandData getSubcommandData() { - return data; - } - - /** - * Sets this subcommands' {@link SubcommandData}. - * - * @param data The {@link SubcommandData} which should be used for this subcommand. - * @see SubcommandData - */ - public final void setSubcommandData(SubcommandData data) { - this.data = data; - } - /** * Gets the {@link SlashCommand parent} for this subcommand. * @@ -124,16 +94,26 @@ public SlashCommand getParent() { * @return The {@link Command.Subcommand} corresponding to this class. */ public @Nullable Command.Subcommand asSubcommand() { - if (data == null) return null; + if (getCommandData() == null) return null; Command cmd = parent.asCommand(); if (cmd == null) return null; List subcommands = new ArrayList<>(cmd.getSubcommands()); cmd.getSubcommandGroups().forEach(g -> subcommands.addAll(g.getSubcommands())); return subcommands.stream() - .filter(c -> c.getName().equals(data.getName())) + .filter(c -> c.getName().equals(getCommandData().getName())) .findFirst() .orElse(null); } + + @Override + public void setRegistrationType(RegistrationType type) { + throw new UnsupportedOperationException("Cannot set RegistrationType on Subcommands!"); + } + + @Override + public RegistrationType getRegistrationType() { + throw new UnsupportedOperationException("Cannot get RegistrationType from Subcommands!"); + } } /** diff --git a/src/main/java/xyz/dynxsty/dih4jda/util/CommandUtils.java b/src/main/java/xyz/dynxsty/dih4jda/util/CommandUtils.java index 9142a337..b53edfbe 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/util/CommandUtils.java +++ b/src/main/java/xyz/dynxsty/dih4jda/util/CommandUtils.java @@ -159,10 +159,10 @@ public static boolean equals(@Nonnull Command command, Object data, boolean isGl * @return The formatted String. * @since v1.5 */ - public static @Nonnull String getNames(@Nonnull Set command, @Nonnull Set slash) { + public static @Nonnull String getNames(@Nonnull Set> command, @Nonnull Set slash) { StringBuilder names = new StringBuilder(); command.forEach(c -> names.append(", ").append(c.getCommandData().getName())); - slash.forEach(c -> names.append(", /").append(c.getSlashCommandData().getName())); + slash.forEach(c -> names.append(", /").append(c.getCommandData().getName())); return names.substring(2); } @@ -174,8 +174,8 @@ public static boolean equals(@Nonnull Command command, Object data, boolean isGl * @return The modified {@link Pair}. * @since v1.5.2 */ - public static @Nonnull Pair, Set> filterByType(@Nonnull Pair, - Set> pair, RegistrationType type) { + public static @Nonnull Pair, Set>> filterByType(@Nonnull Pair, + Set>> pair, RegistrationType type) { return new Pair<>( pair.getFirst().stream().filter(c -> c.getRegistrationType() == type).collect(Collectors.toSet()), pair.getSecond().stream().filter(c -> c.getRegistrationType() == type).collect(Collectors.toSet())); From 63a30d1a8c35f309a51077cd9cf0fe8d13902248 Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sat, 12 Nov 2022 12:20:24 +0100 Subject: [PATCH 2/8] Inverted stupid if-expression --- src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java index 20a2d8ef..fb37b4bf 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java +++ b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java @@ -492,7 +492,7 @@ private void searchForAutoCompletable(@Nonnull SlashCommand command, @Nonnull Cl */ private void handleSlashCommand(@Nonnull SlashCommandInteractionEvent event) throws CommandNotRegisteredException { ApplicationCommand command = slashCommandIndex.containsKey(event.getFullCommandName()) ? - subcommandIndex.get(event.getFullCommandName()) : slashCommandIndex.get(event.getFullCommandName()); + slashCommandIndex.get(event.getFullCommandName()) : subcommandIndex.get(event.getFullCommandName()); if (command == null) { if (config.isThrowUnregisteredException()) { throw new CommandNotRegisteredException(String.format("Slash Command \"%s\" is not registered.", event.getFullCommandName())); From 5b8ac132f40210798c4174ede79bf0f6fec28cb3 Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sat, 12 Nov 2022 12:23:02 +0100 Subject: [PATCH 3/8] optimized imports --- src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java | 1 - src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java | 2 +- .../java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java | 2 +- .../dynxsty/dih4jda/interactions/commands/ContextCommand.java | 3 --- .../dih4jda/interactions/commands/RestrictedCommand.java | 1 - src/test/java/com/dynxsty/tests/ComponentIdTest.java | 2 +- 6 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java index 7b9e7217..089ce817 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java +++ b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java @@ -8,7 +8,6 @@ import xyz.dynxsty.dih4jda.exceptions.DIH4JDAException; import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; import xyz.dynxsty.dih4jda.interactions.commands.RegistrationType; -import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; import xyz.dynxsty.dih4jda.interactions.components.ButtonHandler; import xyz.dynxsty.dih4jda.interactions.components.EntitySelectMenuHandler; diff --git a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java index fb37b4bf..a38d2d2a 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java +++ b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java @@ -32,10 +32,10 @@ import xyz.dynxsty.dih4jda.exceptions.CommandNotRegisteredException; import xyz.dynxsty.dih4jda.exceptions.DIH4JDAException; import xyz.dynxsty.dih4jda.interactions.commands.ApplicationCommand; -import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import xyz.dynxsty.dih4jda.interactions.commands.AutoCompletable; import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; import xyz.dynxsty.dih4jda.interactions.commands.RegistrationType; +import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; import xyz.dynxsty.dih4jda.interactions.components.ButtonHandler; import xyz.dynxsty.dih4jda.interactions.components.EntitySelectMenuHandler; diff --git a/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java b/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java index 9353d07d..edc0b1d5 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java +++ b/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java @@ -4,9 +4,9 @@ import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.interactions.AutoCompleteQuery; -import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import xyz.dynxsty.dih4jda.interactions.commands.AutoCompletable; import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; +import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; /** diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java index 352e0e98..b144de57 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java @@ -3,9 +3,6 @@ import net.dv8tion.jda.api.events.interaction.command.MessageContextInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.UserContextInteractionEvent; import net.dv8tion.jda.api.interactions.commands.build.CommandData; -import xyz.dynxsty.dih4jda.DIH4JDALogger; - -import javax.annotation.Nonnull; /** * Model class which represents a single Context Command. diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java index 82996d5b..9b0444e1 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java @@ -2,7 +2,6 @@ import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.Guild; -import xyz.dynxsty.dih4jda.DIH4JDA; import xyz.dynxsty.dih4jda.DIH4JDABuilder; import xyz.dynxsty.dih4jda.util.Pair; diff --git a/src/test/java/com/dynxsty/tests/ComponentIdTest.java b/src/test/java/com/dynxsty/tests/ComponentIdTest.java index d44088f4..ddb8f8ce 100644 --- a/src/test/java/com/dynxsty/tests/ComponentIdTest.java +++ b/src/test/java/com/dynxsty/tests/ComponentIdTest.java @@ -1,7 +1,7 @@ package com.dynxsty.tests; -import xyz.dynxsty.dih4jda.util.ComponentIdBuilder; import org.junit.jupiter.api.Test; +import xyz.dynxsty.dih4jda.util.ComponentIdBuilder; public class ComponentIdTest { @Test From 513786a75448c774da42c267efaa530f4ba70a59 Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sat, 12 Nov 2022 12:25:54 +0100 Subject: [PATCH 4/8] Sorted packages --- src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java | 9 +++++---- src/main/java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java | 2 +- .../java/xyz/dynxsty/dih4jda/InteractionHandler.java | 10 +++++----- src/main/java/xyz/dynxsty/dih4jda/SmartQueue.java | 4 ++-- .../dih4jda/events/AutoCompleteExceptionEvent.java | 2 +- .../dynxsty/dih4jda/events/CommandExceptionEvent.java | 4 ++-- .../dynxsty/dih4jda/events/DIH4JDAEventListener.java | 6 +++--- .../interactions/{commands => }/AutoCompletable.java | 2 +- .../interactions/commands/RestrictedCommand.java | 2 ++ .../commands/{ => application}/ApplicationCommand.java | 4 +++- .../commands/{ => application}/ContextCommand.java | 2 +- .../commands/{ => application}/RegistrationType.java | 2 +- .../commands/{ => application}/SlashCommand.java | 2 +- .../java/xyz/dynxsty/dih4jda/util/CommandUtils.java | 6 +++--- 14 files changed, 31 insertions(+), 26 deletions(-) rename src/main/java/xyz/dynxsty/dih4jda/interactions/{commands => }/AutoCompletable.java (97%) rename src/main/java/xyz/dynxsty/dih4jda/interactions/commands/{ => application}/ApplicationCommand.java (82%) rename src/main/java/xyz/dynxsty/dih4jda/interactions/commands/{ => application}/ContextCommand.java (91%) rename src/main/java/xyz/dynxsty/dih4jda/interactions/commands/{ => application}/RegistrationType.java (78%) rename src/main/java/xyz/dynxsty/dih4jda/interactions/commands/{ => application}/SlashCommand.java (98%) diff --git a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java index 089ce817..b0724116 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java +++ b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java @@ -6,9 +6,10 @@ import xyz.dynxsty.dih4jda.config.DIH4JDAConfig; import xyz.dynxsty.dih4jda.events.DIH4JDAEventListener; import xyz.dynxsty.dih4jda.exceptions.DIH4JDAException; -import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; -import xyz.dynxsty.dih4jda.interactions.commands.RegistrationType; -import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.ApplicationCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.ContextCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.RegistrationType; +import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand; import xyz.dynxsty.dih4jda.interactions.components.ButtonHandler; import xyz.dynxsty.dih4jda.interactions.components.EntitySelectMenuHandler; import xyz.dynxsty.dih4jda.interactions.components.ModalHandler; @@ -38,7 +39,7 @@ public class DIH4JDA extends ListenerAdapter { /** * The default {@link RegistrationType} which is used for queuing new commands. - * This can be overridden using {@link xyz.dynxsty.dih4jda.interactions.commands.ApplicationCommand#setRegistrationType(RegistrationType)} + * This can be overridden using {@link ApplicationCommand#setRegistrationType(RegistrationType)} */ public static RegistrationType defaultCommandType; diff --git a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java index 6e8e1fa3..2bbed160 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java +++ b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java @@ -5,7 +5,7 @@ import xyz.dynxsty.dih4jda.exceptions.CommandNotRegisteredException; import xyz.dynxsty.dih4jda.exceptions.DIH4JDAException; import xyz.dynxsty.dih4jda.exceptions.InvalidPackageException; -import xyz.dynxsty.dih4jda.interactions.commands.RegistrationType; +import xyz.dynxsty.dih4jda.interactions.commands.application.RegistrationType; import xyz.dynxsty.dih4jda.util.ClassWalker; import xyz.dynxsty.dih4jda.util.ClasspathHelper; diff --git a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java index a38d2d2a..1fe3f08e 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java +++ b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java @@ -31,12 +31,12 @@ import xyz.dynxsty.dih4jda.events.ModalExceptionEvent; import xyz.dynxsty.dih4jda.exceptions.CommandNotRegisteredException; import xyz.dynxsty.dih4jda.exceptions.DIH4JDAException; -import xyz.dynxsty.dih4jda.interactions.commands.ApplicationCommand; -import xyz.dynxsty.dih4jda.interactions.commands.AutoCompletable; -import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; -import xyz.dynxsty.dih4jda.interactions.commands.RegistrationType; +import xyz.dynxsty.dih4jda.interactions.commands.application.ApplicationCommand; +import xyz.dynxsty.dih4jda.interactions.AutoCompletable; +import xyz.dynxsty.dih4jda.interactions.commands.application.ContextCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.RegistrationType; import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; -import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand; import xyz.dynxsty.dih4jda.interactions.components.ButtonHandler; import xyz.dynxsty.dih4jda.interactions.components.EntitySelectMenuHandler; import xyz.dynxsty.dih4jda.interactions.components.ModalHandler; diff --git a/src/main/java/xyz/dynxsty/dih4jda/SmartQueue.java b/src/main/java/xyz/dynxsty/dih4jda/SmartQueue.java index 4f1d188e..f2191032 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/SmartQueue.java +++ b/src/main/java/xyz/dynxsty/dih4jda/SmartQueue.java @@ -5,8 +5,8 @@ import net.dv8tion.jda.api.interactions.commands.Command; import net.dv8tion.jda.api.interactions.commands.build.CommandData; import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData; -import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; -import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.ContextCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand; import xyz.dynxsty.dih4jda.util.CommandUtils; import xyz.dynxsty.dih4jda.util.Pair; diff --git a/src/main/java/xyz/dynxsty/dih4jda/events/AutoCompleteExceptionEvent.java b/src/main/java/xyz/dynxsty/dih4jda/events/AutoCompleteExceptionEvent.java index 7eb6809c..1219ae41 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/events/AutoCompleteExceptionEvent.java +++ b/src/main/java/xyz/dynxsty/dih4jda/events/AutoCompleteExceptionEvent.java @@ -4,7 +4,7 @@ import net.dv8tion.jda.api.interactions.AutoCompleteQuery; import net.dv8tion.jda.api.interactions.commands.CommandAutoCompleteInteraction; import xyz.dynxsty.dih4jda.DIH4JDA; -import xyz.dynxsty.dih4jda.interactions.commands.AutoCompletable; +import xyz.dynxsty.dih4jda.interactions.AutoCompletable; /** * An event that gets fired when an exception gets raised while handling an autocomplete interaction. diff --git a/src/main/java/xyz/dynxsty/dih4jda/events/CommandExceptionEvent.java b/src/main/java/xyz/dynxsty/dih4jda/events/CommandExceptionEvent.java index d14da680..51fd6fe5 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/events/CommandExceptionEvent.java +++ b/src/main/java/xyz/dynxsty/dih4jda/events/CommandExceptionEvent.java @@ -3,8 +3,8 @@ import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.interactions.commands.CommandInteraction; import xyz.dynxsty.dih4jda.DIH4JDA; -import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; -import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.ContextCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand; /** * An event that gets fired when an exception gets raised while executing any command. diff --git a/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java b/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java index edc0b1d5..87b15f41 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java +++ b/src/main/java/xyz/dynxsty/dih4jda/events/DIH4JDAEventListener.java @@ -4,10 +4,10 @@ import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.interactions.AutoCompleteQuery; -import xyz.dynxsty.dih4jda.interactions.commands.AutoCompletable; -import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; +import xyz.dynxsty.dih4jda.interactions.AutoCompletable; +import xyz.dynxsty.dih4jda.interactions.commands.application.ContextCommand; import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; -import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand; /** * An interface containing all events and their method that DIH4JDA can fire. diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/AutoCompletable.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/AutoCompletable.java similarity index 97% rename from src/main/java/xyz/dynxsty/dih4jda/interactions/commands/AutoCompletable.java rename to src/main/java/xyz/dynxsty/dih4jda/interactions/AutoCompletable.java index 2f798093..fbdafc56 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/AutoCompletable.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/AutoCompletable.java @@ -1,4 +1,4 @@ -package xyz.dynxsty.dih4jda.interactions.commands; +package xyz.dynxsty.dih4jda.interactions; import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent; import net.dv8tion.jda.api.interactions.AutoCompleteQuery; diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java index 9b0444e1..dc8205b0 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RestrictedCommand.java @@ -3,6 +3,8 @@ import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.Guild; import xyz.dynxsty.dih4jda.DIH4JDABuilder; +import xyz.dynxsty.dih4jda.interactions.commands.application.RegistrationType; +import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand; import xyz.dynxsty.dih4jda.util.Pair; import javax.annotation.Nonnull; diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ApplicationCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java similarity index 82% rename from src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ApplicationCommand.java rename to src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java index c787cfbf..dd3479cc 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ApplicationCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java @@ -1,6 +1,8 @@ -package xyz.dynxsty.dih4jda.interactions.commands; +package xyz.dynxsty.dih4jda.interactions.commands.application; import xyz.dynxsty.dih4jda.DIH4JDA; +import xyz.dynxsty.dih4jda.interactions.commands.ExecutableCommand; +import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; public abstract class ApplicationCommand extends RestrictedCommand implements ExecutableCommand { diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java similarity index 91% rename from src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java rename to src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java index b144de57..097fb490 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/ContextCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java @@ -1,4 +1,4 @@ -package xyz.dynxsty.dih4jda.interactions.commands; +package xyz.dynxsty.dih4jda.interactions.commands.application; import net.dv8tion.jda.api.events.interaction.command.MessageContextInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.UserContextInteractionEvent; diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RegistrationType.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/RegistrationType.java similarity index 78% rename from src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RegistrationType.java rename to src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/RegistrationType.java index 8a302399..1a62c0fa 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/RegistrationType.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/RegistrationType.java @@ -1,4 +1,4 @@ -package xyz.dynxsty.dih4jda.interactions.commands; +package xyz.dynxsty.dih4jda.interactions.commands.application; /** * Whether the command should be queued as a global- or as a guild command. diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/SlashCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/SlashCommand.java similarity index 98% rename from src/main/java/xyz/dynxsty/dih4jda/interactions/commands/SlashCommand.java rename to src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/SlashCommand.java index bb3d5e39..9d62d75e 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/SlashCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/SlashCommand.java @@ -1,4 +1,4 @@ -package xyz.dynxsty.dih4jda.interactions.commands; +package xyz.dynxsty.dih4jda.interactions.commands.application; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.interactions.commands.Command; diff --git a/src/main/java/xyz/dynxsty/dih4jda/util/CommandUtils.java b/src/main/java/xyz/dynxsty/dih4jda/util/CommandUtils.java index b53edfbe..901411a6 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/util/CommandUtils.java +++ b/src/main/java/xyz/dynxsty/dih4jda/util/CommandUtils.java @@ -7,9 +7,9 @@ import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData; import net.dv8tion.jda.api.interactions.commands.build.SubcommandData; import net.dv8tion.jda.api.interactions.commands.build.SubcommandGroupData; -import xyz.dynxsty.dih4jda.interactions.commands.ContextCommand; -import xyz.dynxsty.dih4jda.interactions.commands.RegistrationType; -import xyz.dynxsty.dih4jda.interactions.commands.SlashCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.ContextCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.RegistrationType; +import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand; import javax.annotation.Nonnull; import javax.annotation.Nullable; From e00ee2eb40a5f3e27a670d3b359c2e511b43c811 Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sat, 12 Nov 2022 12:39:45 +0100 Subject: [PATCH 5/8] Separated CommandData from RegistrationType to better work with Subcommands(`ApplicationCommand` => `BaseApplicationCommand`) --- .../java/xyz/dynxsty/dih4jda/DIH4JDA.java | 4 +-- .../dynxsty/dih4jda/InteractionHandler.java | 2 +- .../application/ApplicationCommand.java | 21 --------------- .../application/BaseApplicationCommand.java | 26 +++++++++++++++++++ .../commands/application/ContextCommand.java | 2 +- .../commands/application/SlashCommand.java | 12 +-------- 6 files changed, 31 insertions(+), 36 deletions(-) create mode 100644 src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java diff --git a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java index b0724116..df92a19b 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java +++ b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java @@ -6,7 +6,7 @@ import xyz.dynxsty.dih4jda.config.DIH4JDAConfig; import xyz.dynxsty.dih4jda.events.DIH4JDAEventListener; import xyz.dynxsty.dih4jda.exceptions.DIH4JDAException; -import xyz.dynxsty.dih4jda.interactions.commands.application.ApplicationCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.BaseApplicationCommand; import xyz.dynxsty.dih4jda.interactions.commands.application.ContextCommand; import xyz.dynxsty.dih4jda.interactions.commands.application.RegistrationType; import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand; @@ -39,7 +39,7 @@ public class DIH4JDA extends ListenerAdapter { /** * The default {@link RegistrationType} which is used for queuing new commands. - * This can be overridden using {@link ApplicationCommand#setRegistrationType(RegistrationType)} + * This can be overridden using {@link BaseApplicationCommand#setRegistrationType(RegistrationType)} */ public static RegistrationType defaultCommandType; diff --git a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java index 1fe3f08e..595d4ae0 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java +++ b/src/main/java/xyz/dynxsty/dih4jda/InteractionHandler.java @@ -31,9 +31,9 @@ import xyz.dynxsty.dih4jda.events.ModalExceptionEvent; import xyz.dynxsty.dih4jda.exceptions.CommandNotRegisteredException; import xyz.dynxsty.dih4jda.exceptions.DIH4JDAException; -import xyz.dynxsty.dih4jda.interactions.commands.application.ApplicationCommand; import xyz.dynxsty.dih4jda.interactions.AutoCompletable; import xyz.dynxsty.dih4jda.interactions.commands.application.ContextCommand; +import xyz.dynxsty.dih4jda.interactions.commands.application.ApplicationCommand; import xyz.dynxsty.dih4jda.interactions.commands.application.RegistrationType; import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand; diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java index dd3479cc..effdb5e2 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java @@ -1,12 +1,9 @@ package xyz.dynxsty.dih4jda.interactions.commands.application; -import xyz.dynxsty.dih4jda.DIH4JDA; import xyz.dynxsty.dih4jda.interactions.commands.ExecutableCommand; import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; public abstract class ApplicationCommand extends RestrictedCommand implements ExecutableCommand { - - private RegistrationType registrationType = DIH4JDA.defaultCommandType; private T data; /** @@ -21,22 +18,4 @@ public final void setCommandData(T data) { public final T getCommandData() { return data; } - - /** - * The {@link RegistrationType} the command got assigned. - * - * @return the {@link RegistrationType}. - */ - public RegistrationType getRegistrationType() { - return registrationType; - } - - /** - * How the command should be queued. This DOES NOT work with {@link SlashCommand.Subcommand}! - * - * @param type the {@link RegistrationType} to set. - */ - public void setRegistrationType(RegistrationType type) { - this.registrationType = type; - } } diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java new file mode 100644 index 00000000..d682b243 --- /dev/null +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java @@ -0,0 +1,26 @@ +package xyz.dynxsty.dih4jda.interactions.commands.application; + +import xyz.dynxsty.dih4jda.DIH4JDA; + +public abstract class BaseApplicationCommand extends ApplicationCommand { + + private RegistrationType registrationType = DIH4JDA.defaultCommandType; + + /** + * The {@link RegistrationType} the command got assigned. + * + * @return the {@link RegistrationType}. + */ + public final RegistrationType getRegistrationType() { + return registrationType; + } + + /** + * How the command should be queued. This DOES NOT work with {@link SlashCommand.Subcommand}! + * + * @param type the {@link RegistrationType} to set. + */ + public final void setRegistrationType(RegistrationType type) { + this.registrationType = type; + } +} diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java index 097fb490..d40e1b07 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java @@ -11,7 +11,7 @@ * @see ContextCommand.Message#execute * @since v1.5 */ -public abstract class ContextCommand extends ApplicationCommand { +public abstract class ContextCommand extends BaseApplicationCommand { private ContextCommand() {} diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/SlashCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/SlashCommand.java index 9d62d75e..8c72d08b 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/SlashCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/SlashCommand.java @@ -17,7 +17,7 @@ * * @since v1.5 */ -public abstract class SlashCommand extends ApplicationCommand { +public abstract class SlashCommand extends BaseApplicationCommand { private Subcommand[] subcommands = new Subcommand[]{}; private SubcommandGroup[] subcommandGroups = new SubcommandGroup[]{}; @@ -104,16 +104,6 @@ public SlashCommand getParent() { .findFirst() .orElse(null); } - - @Override - public void setRegistrationType(RegistrationType type) { - throw new UnsupportedOperationException("Cannot set RegistrationType on Subcommands!"); - } - - @Override - public RegistrationType getRegistrationType() { - throw new UnsupportedOperationException("Cannot get RegistrationType from Subcommands!"); - } } /** From d10e610512b1a1b4498a6792638d94fc9dcb0faa Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sat, 12 Nov 2022 12:48:28 +0100 Subject: [PATCH 6/8] Removed `DIH4JDABuilder#setDefaultCommandType`, made it static and moved it to `DIH4JDA#setDefaultRegistrationType` --- src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java | 15 ++++++++++++--- .../java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java | 11 +---------- .../application/BaseApplicationCommand.java | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java index df92a19b..eb531fbb 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java +++ b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java @@ -41,7 +41,7 @@ public class DIH4JDA extends ListenerAdapter { * The default {@link RegistrationType} which is used for queuing new commands. * This can be overridden using {@link BaseApplicationCommand#setRegistrationType(RegistrationType)} */ - public static RegistrationType defaultCommandType; + public static RegistrationType defaultRegistrationType = RegistrationType.GLOBAL; // Component Handler private static final Map, ButtonHandler> buttonHandlers; @@ -65,8 +65,7 @@ public class DIH4JDA extends ListenerAdapter { * * @param config The instance's configuration. */ - protected DIH4JDA(DIH4JDAConfig config) throws DIH4JDAException { - if (defaultCommandType == null) defaultCommandType = RegistrationType.GUILD; + protected DIH4JDA(@Nonnull DIH4JDAConfig config) throws DIH4JDAException { this.config = config; listeners = new HashSet<>(); DIH4JDALogger.blockedLogTypes = config.getBlockedLogTypes(); @@ -92,6 +91,16 @@ public void onReady(@Nonnull ReadyEvent event) { } } + /** + * Sets the default {@link RegistrationType} for all Commands. + * This is set to {@link RegistrationType#GLOBAL} if not set otherwise. + * + * @param type The {@link RegistrationType}. + */ + public static void setDefaultRegistrationType(RegistrationType type) { + DIH4JDA.defaultRegistrationType = type; + } + /** * Registers all Interactions and replaces the old ones. * Please note that global commands may need up to an hour before they're fully registered. diff --git a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java index 2bbed160..10f17ae7 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java +++ b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDABuilder.java @@ -1,5 +1,6 @@ package xyz.dynxsty.dih4jda; +import net.dv8tion.jda.annotations.ReplaceWith; import net.dv8tion.jda.api.JDA; import xyz.dynxsty.dih4jda.config.DIH4JDAConfig; import xyz.dynxsty.dih4jda.exceptions.CommandNotRegisteredException; @@ -111,16 +112,6 @@ private DIH4JDABuilder(@Nonnull JDA jda) { return this; } - /** - * Sets the default {@link RegistrationType} for all Commands. - * - * @param type The {@link RegistrationType}. - */ - public @Nonnull DIH4JDABuilder setDefaultCommandType(@Nonnull RegistrationType type) { - DIH4JDA.defaultCommandType = type; - return this; - } - /** * Disables deletion of unknown/unused commands when using SmartQueue. */ diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java index d682b243..4289a07a 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java @@ -4,7 +4,7 @@ public abstract class BaseApplicationCommand extends ApplicationCommand { - private RegistrationType registrationType = DIH4JDA.defaultCommandType; + private RegistrationType registrationType = DIH4JDA.defaultRegistrationType; /** * The {@link RegistrationType} the command got assigned. From 49dc5100899cc145fb0de9144f2450384e4e73f4 Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sat, 12 Nov 2022 12:49:56 +0100 Subject: [PATCH 7/8] Added static accessor for `DIH4JDA#defaultRegistrationType` --- src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java | 6 +++++- .../commands/application/BaseApplicationCommand.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java index eb531fbb..02a9245f 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java +++ b/src/main/java/xyz/dynxsty/dih4jda/DIH4JDA.java @@ -41,7 +41,7 @@ public class DIH4JDA extends ListenerAdapter { * The default {@link RegistrationType} which is used for queuing new commands. * This can be overridden using {@link BaseApplicationCommand#setRegistrationType(RegistrationType)} */ - public static RegistrationType defaultRegistrationType = RegistrationType.GLOBAL; + private static RegistrationType defaultRegistrationType = RegistrationType.GLOBAL; // Component Handler private static final Map, ButtonHandler> buttonHandlers; @@ -101,6 +101,10 @@ public static void setDefaultRegistrationType(RegistrationType type) { DIH4JDA.defaultRegistrationType = type; } + public static RegistrationType getDefaultRegistrationType() { + return defaultRegistrationType; + } + /** * Registers all Interactions and replaces the old ones. * Please note that global commands may need up to an hour before they're fully registered. diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java index 4289a07a..a3887e4c 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java @@ -4,7 +4,7 @@ public abstract class BaseApplicationCommand extends ApplicationCommand { - private RegistrationType registrationType = DIH4JDA.defaultRegistrationType; + private RegistrationType registrationType = DIH4JDA.getDefaultRegistrationType(); /** * The {@link RegistrationType} the command got assigned. From c5c90710282fb6296b17175685a9ccf00363b8f3 Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sat, 12 Nov 2022 13:13:29 +0100 Subject: [PATCH 8/8] Added some docs and cleaned some things up --- .../dynxsty/dih4jda/interactions/AutoCompletable.java | 2 +- .../commands/application/ApplicationCommand.java | 10 +++++++++- .../commands/application/BaseApplicationCommand.java | 10 +++++++++- .../commands/application/ContextCommand.java | 4 +++- .../components/EntitySelectMenuHandler.java | 2 +- .../dih4jda/interactions/components/ModalHandler.java | 2 +- .../components/StringSelectMenuHandler.java | 2 +- 7 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/AutoCompletable.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/AutoCompletable.java index fbdafc56..72a877c4 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/AutoCompletable.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/AutoCompletable.java @@ -13,7 +13,7 @@ * public class PingCommand extends SlashCommand implements AutoCompletable { * * public PingCommand() { - * setSlashCommandData(Commands.slash("ping", "Ping someone").addOption(OptionType.STRING, "user-id", "The user's id", true, true)); + * setCommandData(Commands.slash("ping", "Ping someone").addOption(OptionType.STRING, "user-id", "The user's id", true, true)); * } * * @Override diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java index effdb5e2..1012450b 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ApplicationCommand.java @@ -1,9 +1,17 @@ package xyz.dynxsty.dih4jda.interactions.commands.application; +import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent; import xyz.dynxsty.dih4jda.interactions.commands.ExecutableCommand; import xyz.dynxsty.dih4jda.interactions.commands.RestrictedCommand; -public abstract class ApplicationCommand extends RestrictedCommand implements ExecutableCommand { +/** + * Model class for all Application Commands. + * For top-level commands, see {@link BaseApplicationCommand} which features an additional {@link RegistrationType}. + * + * @param The event this class uses. + * @param The type of {@link net.dv8tion.jda.api.interactions.commands.build.CommandData} this class uses. + */ +public abstract class ApplicationCommand extends RestrictedCommand implements ExecutableCommand { private T data; /** diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java index a3887e4c..29a08552 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/BaseApplicationCommand.java @@ -1,8 +1,16 @@ package xyz.dynxsty.dih4jda.interactions.commands.application; +import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent; import xyz.dynxsty.dih4jda.DIH4JDA; -public abstract class BaseApplicationCommand extends ApplicationCommand { +/** + * An extension of {@link ApplicationCommand} which contains a {@link RegistrationType}. + * This abstract class is meant for top-level commands, which can be queued either per-guild or globally. + * + * @param The event this class uses. + * @param The type of {@link net.dv8tion.jda.api.interactions.commands.build.CommandData} this class uses. + */ +public abstract class BaseApplicationCommand extends ApplicationCommand { private RegistrationType registrationType = DIH4JDA.getDefaultRegistrationType(); diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java index d40e1b07..19708e4b 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/commands/application/ContextCommand.java @@ -1,5 +1,7 @@ package xyz.dynxsty.dih4jda.interactions.commands.application; +import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent; +import net.dv8tion.jda.api.events.interaction.command.GenericContextInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.MessageContextInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.UserContextInteractionEvent; import net.dv8tion.jda.api.interactions.commands.build.CommandData; @@ -11,7 +13,7 @@ * @see ContextCommand.Message#execute * @since v1.5 */ -public abstract class ContextCommand extends BaseApplicationCommand { +public abstract class ContextCommand extends BaseApplicationCommand { private ContextCommand() {} diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/components/EntitySelectMenuHandler.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/components/EntitySelectMenuHandler.java index 31d82c6a..000aeb54 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/components/EntitySelectMenuHandler.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/components/EntitySelectMenuHandler.java @@ -25,7 +25,7 @@ public interface EntitySelectMenuHandler { * public class TestCommand extends SlashCommand implements EntitySelectMenuHandler { * * public TestCommand() { - * setSlashCommandData(Commands.slash("test", "test description")); + * setCommandData(Commands.slash("test", "test description")); * } * * @Override diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/components/ModalHandler.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/components/ModalHandler.java index 77e6cf9b..7f41e803 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/components/ModalHandler.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/components/ModalHandler.java @@ -19,7 +19,7 @@ public interface ModalHandler { * public class TestCommand extends SlashCommand implements ModalHandler { * * public TestCommand() { - * setSlashCommandData(Commands.slash("test", "test description")); + * setCommandData(Commands.slash("test", "test description")); * } * * @Override diff --git a/src/main/java/xyz/dynxsty/dih4jda/interactions/components/StringSelectMenuHandler.java b/src/main/java/xyz/dynxsty/dih4jda/interactions/components/StringSelectMenuHandler.java index c1533da5..24bbed2e 100644 --- a/src/main/java/xyz/dynxsty/dih4jda/interactions/components/StringSelectMenuHandler.java +++ b/src/main/java/xyz/dynxsty/dih4jda/interactions/components/StringSelectMenuHandler.java @@ -26,7 +26,7 @@ public interface StringSelectMenuHandler { * public class TestCommand extends SlashCommand implements StringSelectMenuHandler { * * public TestCommand() { - * setSlashCommandData(Commands.slash("test", "test description")); + * setCommandData(Commands.slash("test", "test description")); * } * * @Override