diff --git a/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/Discord4JRegistererStrategy.java b/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/Discord4JRegistererStrategy.java new file mode 100644 index 0000000..fea6e5c --- /dev/null +++ b/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/Discord4JRegistererStrategy.java @@ -0,0 +1,32 @@ +package net.tomatentum.marinara.wrapper.discord4j; + +import java.util.ArrayList; +import java.util.Set; + +import discord4j.core.GatewayDiscordClient; +import discord4j.discordjson.json.ApplicationCommandRequest; +import discord4j.rest.service.ApplicationService; +import net.tomatentum.marinara.wrapper.CommandRegisterer; +import net.tomatentum.marinara.wrapper.ServerCommandList; + +public class Discord4JRegistererStrategy implements CommandRegisterer.Strategy { + + private ApplicationService appService; + private long applicationId; + + public Discord4JRegistererStrategy(GatewayDiscordClient api) { + this.appService = api.getRestClient().getApplicationService(); + this.applicationId = api.getRestClient().getApplicationId().block(); + } + + @Override + public void registerServer(ServerCommandList commands) { + appService.bulkOverwriteGuildApplicationCommand(applicationId, commands.serverId(), new ArrayList<>(commands)); + + } + + @Override + public void registerGlobal(Set defs) { + appService.bulkOverwriteGlobalApplicationCommand(applicationId, new ArrayList<>(defs)); + } +} diff --git a/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/Discord4JWrapper.java b/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/Discord4JWrapper.java index 4490885..5908683 100644 --- a/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/Discord4JWrapper.java +++ b/wrapper/discord4j/src/main/java/net/tomatentum/marinara/wrapper/discord4j/Discord4JWrapper.java @@ -1,7 +1,5 @@ package net.tomatentum.marinara.wrapper.discord4j; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.function.Function; @@ -11,13 +9,11 @@ import discord4j.core.GatewayDiscordClient; import discord4j.core.event.domain.interaction.InteractionCreateEvent; import discord4j.core.object.command.ApplicationCommandInteractionOption; import discord4j.core.object.command.ApplicationCommandOption.Type; -import discord4j.discordjson.json.ApplicationCommandOptionChoiceData; -import discord4j.discordjson.json.ApplicationCommandOptionData; import discord4j.discordjson.json.ApplicationCommandRequest; -import net.tomatentum.marinara.interaction.commands.SlashCommandDefinition; import net.tomatentum.marinara.util.LoggerUtil; import net.tomatentum.marinara.wrapper.CommandConverter; +import net.tomatentum.marinara.wrapper.CommandRegisterer; import net.tomatentum.marinara.wrapper.ContextObjectProvider; import net.tomatentum.marinara.wrapper.IdentifierProvider; import net.tomatentum.marinara.wrapper.LibraryWrapper; @@ -37,16 +33,15 @@ public class Discord4JWrapper extends LibraryWrapper { .filter(o -> !o.getType().equals(Type.SUB_COMMAND) && !o.getType().equals(Type.SUB_COMMAND_GROUP)) .toList(); - private GatewayDiscordClient api; private Discord4JContextObjectProvider contextObjectProvider; - private CommandConverter commandConverter; + private CommandRegisterer commandRegisterer; private Logger logger = LoggerUtil.getLogger(getClass()); public Discord4JWrapper(GatewayDiscordClient api) { - this.api = api; this.contextObjectProvider = new Discord4JContextObjectProvider(); - this.commandConverter = CommandConverter.of(new Discord4JConverterSpec()); + var converter = CommandConverter.of(new Discord4JConverterSpec()); + this.commandRegisterer = CommandRegisterer.of(new Discord4JRegistererStrategy(api), converter); if (api != null) api.on(InteractionCreateEvent.class) @@ -58,26 +53,8 @@ public class Discord4JWrapper extends LibraryWrapper { } @Override - public void registerSlashCommands(SlashCommandDefinition[] defs) { - HashMap> serverCommands = new HashMap<>(); - List globalCommands = new ArrayList<>(); - long applicationId = api.getRestClient().getApplicationId().block(); - - for (SlashCommandDefinition slashCommandDefinition : defs) { - ApplicationCommandRequest request = this.commandConverter.convert(slashCommandDefinition); - if (slashCommandDefinition.rootIdentifier().serverIds().length > 0) { - for (long serverId : slashCommandDefinition.rootIdentifier().serverIds()) { - serverCommands.putIfAbsent(serverId, new ArrayList<>()); - serverCommands.get(serverId).add(request); - } - }else - globalCommands.add(request); - } - - for (long serverId : serverCommands.keySet()) { - api.getRestClient().getApplicationService().bulkOverwriteGuildApplicationCommand(applicationId, serverId, serverCommands.get(serverId)); - } - api.getRestClient().getApplicationService().bulkOverwriteGlobalApplicationCommand(applicationId, globalCommands); + public CommandRegisterer getRegisterer() { + return this.commandRegisterer; } @Override @@ -93,5 +70,5 @@ public class Discord4JWrapper extends LibraryWrapper { public ContextObjectProvider getContextObjectProvider() { return this.contextObjectProvider; } - + }