From 720761e7a0ffe371de68b45d07b40c8214ea5611 Mon Sep 17 00:00:00 2001 From: Hammy Date: Wed, 22 Sep 2021 02:32:33 +0100 Subject: [PATCH] Ensure that commandMap is injected in --- .../java/me/goudham/command/CommandLoader.java | 5 +---- .../me/goudham/command/SlashCommandLoader.java | 16 +++++++++------- .../me/goudham/command/SlashCommandManager.java | 8 ++++---- src/main/java/me/goudham/config/BotConfig.java | 9 +++++++++ 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/main/java/me/goudham/command/CommandLoader.java b/src/main/java/me/goudham/command/CommandLoader.java index c3778254..feb80586 100644 --- a/src/main/java/me/goudham/command/CommandLoader.java +++ b/src/main/java/me/goudham/command/CommandLoader.java @@ -1,11 +1,8 @@ package me.goudham.command; -import io.micronaut.inject.ExecutableMethod; import java.util.List; -import java.util.Map; import net.dv8tion.jda.api.interactions.commands.build.CommandData; -import net.dv8tion.jda.internal.utils.tuple.Pair; public interface CommandLoader { - List loadIntoMapAndReturnCommands(Map>> commandMap); + List loadCommands(); } diff --git a/src/main/java/me/goudham/command/SlashCommandLoader.java b/src/main/java/me/goudham/command/SlashCommandLoader.java index c0e6b383..60d0d6f6 100644 --- a/src/main/java/me/goudham/command/SlashCommandLoader.java +++ b/src/main/java/me/goudham/command/SlashCommandLoader.java @@ -1,6 +1,5 @@ package me.goudham.command; -import io.micronaut.context.ApplicationContext; import io.micronaut.context.BeanContext; import io.micronaut.core.annotation.AnnotationValue; import io.micronaut.core.beans.BeanIntrospection; @@ -34,15 +33,17 @@ import net.dv8tion.jda.internal.utils.tuple.Pair; @Singleton public class SlashCommandLoader implements CommandLoader { + private final Map>> commandMap; private final BeanContext beanContext; @Inject - public SlashCommandLoader(BeanContext beanContext, ApplicationContext applicationContext) { + public SlashCommandLoader(Map>> commandMap, BeanContext beanContext) { + this.commandMap = commandMap; this.beanContext = beanContext; } @Override - public List loadIntoMapAndReturnCommands(Map>> commandMap) { + public List loadCommands() { Map commandDataMap = new HashMap<>(); List commandDataList = new ArrayList<>(); Collection> slashCommandIntrospections = BeanIntrospector.forClassLoader(ClassLoader.getSystemClassLoader()).findIntrospections(SlashCommand.class); @@ -71,7 +72,7 @@ public class SlashCommandLoader implements CommandLoader { if (subCommandGroups.length < 1 && !noHandleMethod) { List optionData = loadOptions(slashCommand); if (optionData != null) commandData.addOptions(optionData); - storeIntoCommandMap(commandMap, slashCommandIntrospection, name, "handle"); + storeIntoCommandMap(slashCommandIntrospection, name, "handle"); } else { List subCommandList = new ArrayList<>(); for (BeanMethod subCommandMethod : subCommands) { @@ -81,7 +82,7 @@ public class SlashCommandLoader implements CommandLoader { subCommandList.add(subcommandData); String subCommandPath = name + "/" + subcommandData.getName(); - storeIntoCommandMap(commandMap, slashCommandIntrospection, subCommandPath, subCommandMethod.getName()); + storeIntoCommandMap(slashCommandIntrospection, subCommandPath, subCommandMethod.getName()); } } commandData.addSubcommands(subCommandList); @@ -113,7 +114,7 @@ public class SlashCommandLoader implements CommandLoader { subCommandList.add(subcommandData); String subCommandPath = parent + "/" + name + "/" + subcommandData.getName(); - storeIntoCommandMap(commandMap, subCommandGroupIntrospection, subCommandPath, subCommandMethod.getName()); + storeIntoCommandMap(subCommandGroupIntrospection, subCommandPath, subCommandMethod.getName()); } } subcommandGroupData.addSubcommands(subCommandList); @@ -123,6 +124,7 @@ public class SlashCommandLoader implements CommandLoader { } } + commandDataMap.clear(); return commandDataList; } @@ -205,7 +207,7 @@ public class SlashCommandLoader implements CommandLoader { return null; } - private void storeIntoCommandMap(Map>> commandMap, BeanIntrospection beanIntrospection, String commandPath, String methodName) { + private void storeIntoCommandMap(BeanIntrospection beanIntrospection, String commandPath, String methodName) { Class clazz = beanIntrospection.getBeanType(); Object beanInstance = beanContext.getBean(clazz); diff --git a/src/main/java/me/goudham/command/SlashCommandManager.java b/src/main/java/me/goudham/command/SlashCommandManager.java index 49982ded..a113a917 100644 --- a/src/main/java/me/goudham/command/SlashCommandManager.java +++ b/src/main/java/me/goudham/command/SlashCommandManager.java @@ -4,7 +4,6 @@ import io.micronaut.core.annotation.Introspected; import io.micronaut.inject.ExecutableMethod; import jakarta.inject.Inject; import jakarta.inject.Singleton; -import java.util.HashMap; import java.util.List; import java.util.Map; import net.dv8tion.jda.api.entities.Guild; @@ -16,18 +15,19 @@ import net.dv8tion.jda.internal.utils.tuple.Pair; @Singleton @Introspected public class SlashCommandManager implements CommandManager { - private final Map>> commandMap = new HashMap<>(); + private final Map>> commandMap; private final CommandLoader commandLoader; @Inject - public SlashCommandManager(CommandLoader commandLoader) { + public SlashCommandManager(Map>> commandMap, CommandLoader commandLoader) { + this.commandMap = commandMap; this.commandLoader = commandLoader; } @Override public void registerSlashCommands(Guild guild) { CommandListUpdateAction commands = guild.updateCommands(); - List commandDataList = commandLoader.loadIntoMapAndReturnCommands(commandMap); + List commandDataList = commandLoader.loadCommands(); commands.addCommands(commandDataList).queue(); } diff --git a/src/main/java/me/goudham/config/BotConfig.java b/src/main/java/me/goudham/config/BotConfig.java index c8169062..3d6e5fec 100644 --- a/src/main/java/me/goudham/config/BotConfig.java +++ b/src/main/java/me/goudham/config/BotConfig.java @@ -4,9 +4,12 @@ import io.micronaut.context.annotation.Factory; import io.micronaut.context.annotation.Value; import io.micronaut.core.annotation.Introspected; import io.micronaut.core.annotation.Order; +import io.micronaut.inject.ExecutableMethod; import jakarta.inject.Inject; import jakarta.inject.Singleton; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.security.auth.login.LoginException; import me.goudham.listener.OnReadyListener; import net.dv8tion.jda.api.JDA; @@ -15,6 +18,7 @@ import net.dv8tion.jda.api.entities.Activity; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.requests.GatewayIntent; import net.dv8tion.jda.api.utils.cache.CacheFlag; +import net.dv8tion.jda.internal.utils.tuple.Pair; @Factory @Introspected @@ -22,6 +26,11 @@ public class BotConfig { private final String token; private final String guildId; + @Singleton + public Map>> commandMap() { + return new HashMap<>(); + } + @Inject public BotConfig(@Value("${bot.token}") String token, @Value("${bot.guild.id}") String guildId) {