From f855e60343890e4357e603b25f3ba4b2b79c47e6 Mon Sep 17 00:00:00 2001 From: Hammy Date: Sat, 25 Sep 2021 04:42:27 +0100 Subject: [PATCH] Create SlashCommandHandler to decouple loading/registering commands and handling them --- .../me/goudham/command/CommandHandler.java | 7 +++++ .../me/goudham/command/CommandManager.java | 2 -- .../goudham/command/SlashCommandHandler.java | 31 +++++++++++++++++++ .../goudham/command/SlashCommandManager.java | 22 +------------ .../listener/SlashCommandListener.java | 10 +++--- 5 files changed, 44 insertions(+), 28 deletions(-) create mode 100644 src/main/java/me/goudham/command/CommandHandler.java create mode 100644 src/main/java/me/goudham/command/SlashCommandHandler.java diff --git a/src/main/java/me/goudham/command/CommandHandler.java b/src/main/java/me/goudham/command/CommandHandler.java new file mode 100644 index 00000000..3c25c5f9 --- /dev/null +++ b/src/main/java/me/goudham/command/CommandHandler.java @@ -0,0 +1,7 @@ +package me.goudham.command; + +import net.dv8tion.jda.api.events.Event; + +public interface CommandHandler { + void handle(Event event); +} diff --git a/src/main/java/me/goudham/command/CommandManager.java b/src/main/java/me/goudham/command/CommandManager.java index b3355771..53df1031 100644 --- a/src/main/java/me/goudham/command/CommandManager.java +++ b/src/main/java/me/goudham/command/CommandManager.java @@ -1,10 +1,8 @@ package me.goudham.command; import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; public interface CommandManager { void populateCommandMap(); void registerSlashCommands(Guild guild); - void handleSlashCommandEvent(SlashCommandEvent slashCommandEvent); } diff --git a/src/main/java/me/goudham/command/SlashCommandHandler.java b/src/main/java/me/goudham/command/SlashCommandHandler.java new file mode 100644 index 00000000..11fc9aa0 --- /dev/null +++ b/src/main/java/me/goudham/command/SlashCommandHandler.java @@ -0,0 +1,31 @@ +package me.goudham.command; + +import io.micronaut.inject.ExecutableMethod; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import java.util.Map; +import net.dv8tion.jda.api.events.Event; +import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; +import net.dv8tion.jda.internal.utils.tuple.Pair; + +@Singleton +public class SlashCommandHandler implements CommandHandler { + private final Map>> commandMap; + + @Inject + public SlashCommandHandler(Map>> commandMap) { + this.commandMap = commandMap; + } + + @Override + public void handle(Event event) { + SlashCommandEvent slashCommandEvent = (SlashCommandEvent) event; + String commandPath = slashCommandEvent.getCommandPath(); + + Pair> slashCommandPair = commandMap.get(commandPath); + Object slashCommandBean = slashCommandPair.getLeft(); + ExecutableMethod slashCommandMethod = slashCommandPair.getRight(); + + slashCommandMethod.invoke(slashCommandBean, slashCommandEvent); + } +} diff --git a/src/main/java/me/goudham/command/SlashCommandManager.java b/src/main/java/me/goudham/command/SlashCommandManager.java index 3ea35186..f8ce0228 100644 --- a/src/main/java/me/goudham/command/SlashCommandManager.java +++ b/src/main/java/me/goudham/command/SlashCommandManager.java @@ -1,35 +1,26 @@ package me.goudham.command; import io.micronaut.context.annotation.Value; -import io.micronaut.core.annotation.Introspected; -import io.micronaut.inject.ExecutableMethod; import jakarta.inject.Inject; import jakarta.inject.Singleton; import java.util.List; -import java.util.Map; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.interactions.commands.build.CommandData; import net.dv8tion.jda.api.requests.restaction.CommandListUpdateAction; -import net.dv8tion.jda.internal.utils.tuple.Pair; @Singleton -@Introspected public class SlashCommandManager implements CommandManager { - private final Map>> commandMap; private final boolean registerCommandsGlobally; private final boolean registerCommandsForGuild; private final CommandLoader commandLoader; private final JDA jda; @Inject - public SlashCommandManager(Map>> commandMap, - @Value("${bot.config.registerCommandsGlobally}") boolean registerCommandsGlobally, + public SlashCommandManager(@Value("${bot.config.registerCommandsGlobally}") boolean registerCommandsGlobally, @Value("${bot.config.registerCommandsForGuild}") boolean registerCommandsForGuild, CommandLoader commandLoader, JDA jda) { - this.commandMap = commandMap; this.registerCommandsGlobally = registerCommandsGlobally; this.registerCommandsForGuild = registerCommandsForGuild; this.commandLoader = commandLoader; @@ -52,15 +43,4 @@ public class SlashCommandManager implements CommandManager { commands.addCommands(registeredSlashCommands).queue(); } } - - @Override - public void handleSlashCommandEvent(SlashCommandEvent slashCommandEvent) { - String commandPath = slashCommandEvent.getCommandPath(); - - Pair> slashCommandPair = commandMap.get(commandPath); - Object slashCommandBean = slashCommandPair.getLeft(); - ExecutableMethod slashCommandMethod = slashCommandPair.getRight(); - - slashCommandMethod.invoke(slashCommandBean, slashCommandEvent); - } } diff --git a/src/main/java/me/goudham/listener/SlashCommandListener.java b/src/main/java/me/goudham/listener/SlashCommandListener.java index 8c1f0c06..d03455b9 100644 --- a/src/main/java/me/goudham/listener/SlashCommandListener.java +++ b/src/main/java/me/goudham/listener/SlashCommandListener.java @@ -2,23 +2,23 @@ package me.goudham.listener; import jakarta.inject.Inject; import jakarta.inject.Singleton; -import me.goudham.command.CommandManager; +import me.goudham.command.CommandHandler; import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.jetbrains.annotations.NotNull; @Singleton public class SlashCommandListener extends ListenerAdapter { - private final CommandManager commandManager; + private final CommandHandler commandHandler; @Inject - public SlashCommandListener(CommandManager commandManager) { - this.commandManager = commandManager; + public SlashCommandListener(CommandHandler commandHandler) { + this.commandHandler = commandHandler; } @Override public void onSlashCommand(@NotNull SlashCommandEvent event) { if (event.getGuild() == null) return; - commandManager.handleSlashCommandEvent(event); + commandHandler.handle(event); } }