From 8ad5885303464567189abe6e77854ed3b195b34a Mon Sep 17 00:00:00 2001 From: mathias Date: Sun, 3 Oct 2021 19:08:42 +0200 Subject: [PATCH] Created ResponderContext#handleUsage to handle the usage of a command --- .../http/contexts/ResponderContext.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/main/java/de/gnmyt/autoresponder/http/contexts/ResponderContext.java b/src/main/java/de/gnmyt/autoresponder/http/contexts/ResponderContext.java index d8be06a..9664234 100644 --- a/src/main/java/de/gnmyt/autoresponder/http/contexts/ResponderContext.java +++ b/src/main/java/de/gnmyt/autoresponder/http/contexts/ResponderContext.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import de.gnmyt.autoresponder.SimpleAutoResponder; +import de.gnmyt.autoresponder.commands.Arguments; import de.gnmyt.autoresponder.commands.ResponderCommand; import de.gnmyt.autoresponder.commands.usage.UsageElement; import de.gnmyt.autoresponder.commands.usage.UsageException; @@ -16,6 +17,7 @@ import de.gnmyt.autoresponder.http.handler.SimpleHttpHandler; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.concurrent.CompletableFuture; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -91,6 +93,37 @@ public class ResponderContext extends SimpleHttpHandler { } } + /** + * Handles the usage of a command + * + * @param command The command you want to check + * @param foundTrigger The command trigger + * @param commandMessage The command message + * @param controller The {@link HttpResponseController} to reply to possible errors + * @return the arguments of the usage + */ + public Arguments handleUsage(ResponderCommand command, String foundTrigger, String commandMessage, HttpResponseController controller) { + ArrayList providedUsage; + HashMap arguments = new HashMap<>(); + if (command.getRequiredElements().size() > 0) { + try { + if (commandMessage.length() <= foundTrigger.length() + 1) + throw new UsageException(USAGE_NOT_COMPLETE, "The provided usage is not complete", null); + + providedUsage = validateUsage(command, commandMessage.substring(foundTrigger.length() + 1)); + } catch (UsageException e) { + sendUsageErrorReply(e, controller); + return null; + } + + for (int i = 0; i < command.getUsageElements().size(); i++) { + arguments.put(command.getUsageElements().get(i).getName(), providedUsage.get(i)); + } + } + + return new Arguments(arguments); + } + /** * Gets the full message in parts (splits with spaces and quotation marks) *