refactor(Discord4J): implement CommandRegisterer refactor
This commit is contained in:
parent
203498de68
commit
bae077654e
@ -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<ApplicationCommandRequest> {
|
||||||
|
|
||||||
|
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<ApplicationCommandRequest> commands) {
|
||||||
|
appService.bulkOverwriteGuildApplicationCommand(applicationId, commands.serverId(), new ArrayList<>(commands));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerGlobal(Set<ApplicationCommandRequest> defs) {
|
||||||
|
appService.bulkOverwriteGlobalApplicationCommand(applicationId, new ArrayList<>(defs));
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,5 @@
|
|||||||
package net.tomatentum.marinara.wrapper.discord4j;
|
package net.tomatentum.marinara.wrapper.discord4j;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
@ -11,13 +9,11 @@ import discord4j.core.GatewayDiscordClient;
|
|||||||
import discord4j.core.event.domain.interaction.InteractionCreateEvent;
|
import discord4j.core.event.domain.interaction.InteractionCreateEvent;
|
||||||
import discord4j.core.object.command.ApplicationCommandInteractionOption;
|
import discord4j.core.object.command.ApplicationCommandInteractionOption;
|
||||||
import discord4j.core.object.command.ApplicationCommandOption.Type;
|
import discord4j.core.object.command.ApplicationCommandOption.Type;
|
||||||
import discord4j.discordjson.json.ApplicationCommandOptionChoiceData;
|
|
||||||
import discord4j.discordjson.json.ApplicationCommandOptionData;
|
|
||||||
import discord4j.discordjson.json.ApplicationCommandRequest;
|
import discord4j.discordjson.json.ApplicationCommandRequest;
|
||||||
|
|
||||||
import net.tomatentum.marinara.interaction.commands.SlashCommandDefinition;
|
|
||||||
import net.tomatentum.marinara.util.LoggerUtil;
|
import net.tomatentum.marinara.util.LoggerUtil;
|
||||||
import net.tomatentum.marinara.wrapper.CommandConverter;
|
import net.tomatentum.marinara.wrapper.CommandConverter;
|
||||||
|
import net.tomatentum.marinara.wrapper.CommandRegisterer;
|
||||||
import net.tomatentum.marinara.wrapper.ContextObjectProvider;
|
import net.tomatentum.marinara.wrapper.ContextObjectProvider;
|
||||||
import net.tomatentum.marinara.wrapper.IdentifierProvider;
|
import net.tomatentum.marinara.wrapper.IdentifierProvider;
|
||||||
import net.tomatentum.marinara.wrapper.LibraryWrapper;
|
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))
|
.filter(o -> !o.getType().equals(Type.SUB_COMMAND) && !o.getType().equals(Type.SUB_COMMAND_GROUP))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
private GatewayDiscordClient api;
|
|
||||||
private Discord4JContextObjectProvider contextObjectProvider;
|
private Discord4JContextObjectProvider contextObjectProvider;
|
||||||
private CommandConverter<ApplicationCommandRequest, ApplicationCommandOptionData, ApplicationCommandOptionChoiceData> commandConverter;
|
private CommandRegisterer<ApplicationCommandRequest> commandRegisterer;
|
||||||
|
|
||||||
private Logger logger = LoggerUtil.getLogger(getClass());
|
private Logger logger = LoggerUtil.getLogger(getClass());
|
||||||
|
|
||||||
public Discord4JWrapper(GatewayDiscordClient api) {
|
public Discord4JWrapper(GatewayDiscordClient api) {
|
||||||
this.api = api;
|
|
||||||
this.contextObjectProvider = new Discord4JContextObjectProvider();
|
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)
|
if (api != null)
|
||||||
api.on(InteractionCreateEvent.class)
|
api.on(InteractionCreateEvent.class)
|
||||||
@ -58,26 +53,8 @@ public class Discord4JWrapper extends LibraryWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerSlashCommands(SlashCommandDefinition[] defs) {
|
public CommandRegisterer<?> getRegisterer() {
|
||||||
HashMap<Long, List<ApplicationCommandRequest>> serverCommands = new HashMap<>();
|
return this.commandRegisterer;
|
||||||
List<ApplicationCommandRequest> 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -93,5 +70,5 @@ public class Discord4JWrapper extends LibraryWrapper {
|
|||||||
public ContextObjectProvider getContextObjectProvider() {
|
public ContextObjectProvider getContextObjectProvider() {
|
||||||
return this.contextObjectProvider;
|
return this.contextObjectProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user