From 591f2750c52f25e2479fc230704804ee53480714 Mon Sep 17 00:00:00 2001 From: p5nbTgip0r Date: Sun, 3 Jan 2021 22:37:02 -0800 Subject: [PATCH] Register `ChannelArgument` and `UserArgument` as parsers for JDA --- .../jda/JDACommandManager.java | 17 ++++++++++++++ .../jda/parsers/ChannelArgument.java | 22 ++++++++++++------- .../jda/parsers/UserArgument.java | 7 +++++- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/JDACommandManager.java b/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/JDACommandManager.java index fd52a7ec..6eed10ca 100644 --- a/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/JDACommandManager.java +++ b/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/JDACommandManager.java @@ -27,14 +27,21 @@ import cloud.commandframework.CommandManager; import cloud.commandframework.CommandTree; import cloud.commandframework.execution.CommandExecutionCoordinator; import cloud.commandframework.internal.CommandRegistrationHandler; +import cloud.commandframework.jda.parsers.ChannelArgument; +import cloud.commandframework.jda.parsers.UserArgument; import cloud.commandframework.meta.CommandMeta; import cloud.commandframework.meta.SimpleCommandMeta; +import io.leangen.geantyref.TypeToken; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.entities.MessageChannel; +import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.Arrays; +import java.util.HashSet; import java.util.function.BiFunction; import java.util.function.Function; @@ -94,6 +101,16 @@ public class JDACommandManager extends CommandManager { /* Register JDA Preprocessor */ this.registerCommandPreProcessor(new JDACommandPreprocessor<>(this)); + + /* Register JDA Parsers */ + this.getParserRegistry().registerParserSupplier(TypeToken.get(User.class), parserParameters -> + new UserArgument.UserParser<>( + new HashSet<>(Arrays.asList(UserArgument.ParserMode.values())) + )); + this.getParserRegistry().registerParserSupplier(TypeToken.get(MessageChannel.class), parserParameters -> + new ChannelArgument.MessageParser<>( + new HashSet<>(Arrays.asList(ChannelArgument.ParserMode.values())) + )); } /** diff --git a/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/parsers/ChannelArgument.java b/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/parsers/ChannelArgument.java index d4518e1c..7e5a9bb2 100644 --- a/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/parsers/ChannelArgument.java +++ b/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/parsers/ChannelArgument.java @@ -34,9 +34,10 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import org.checkerframework.checker.nullness.qual.NonNull; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Queue; +import java.util.Set; /** * Command Argument for {@link MessageChannel} @@ -46,11 +47,11 @@ import java.util.Queue; @SuppressWarnings("unused") public final class ChannelArgument extends CommandArgument { - private final List modes; + private final Set modes; private ChannelArgument( final boolean required, final @NonNull String name, - final @NonNull List modes + final @NonNull Set modes ) { super(required, name, new MessageParser<>(modes), MessageChannel.class); this.modes = modes; @@ -94,7 +95,7 @@ public final class ChannelArgument extends CommandArgument * * @return List of Modes */ - public @NotNull List getModes() { + public @NotNull Set getModes() { return modes; } @@ -108,7 +109,7 @@ public final class ChannelArgument extends CommandArgument public static final class Builder extends CommandArgument.Builder { - private List modes = new ArrayList<>(); + private Set modes = new HashSet<>(); private Builder(final @NonNull String name) { super(MessageChannel.class, name); @@ -120,7 +121,7 @@ public final class ChannelArgument extends CommandArgument * @param modes List of Modes * @return Builder instance */ - public @NonNull Builder withParsers(final @NonNull List modes) { + public @NonNull Builder withParsers(final @NonNull Set modes) { this.modes = modes; return this; } @@ -140,9 +141,14 @@ public final class ChannelArgument extends CommandArgument public static final class MessageParser implements ArgumentParser { - private final List modes; + private final Set modes; - private MessageParser(final @NonNull List modes) { + /** + * Construct a new argument parser for {@link MessageChannel} + * + * @param modes List of parsing modes to use when parsing + */ + public MessageParser(final @NonNull Set modes) { this.modes = modes; } diff --git a/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/parsers/UserArgument.java b/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/parsers/UserArgument.java index 09f768ab..05e286ba 100644 --- a/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/parsers/UserArgument.java +++ b/cloud-discord/cloud-jda/src/main/java/cloud/commandframework/jda/parsers/UserArgument.java @@ -154,7 +154,12 @@ public final class UserArgument extends CommandArgument { private final Set modes; - private UserParser(final @NonNull Set modes) { + /** + * Construct a new argument parser for {@link User} + * + * @param modes List of parsing modes to use when parsing + */ + public UserParser(final @NonNull Set modes) { this.modes = modes; }