From 60d947249b66150c027129033c5d2cc3755e19f9 Mon Sep 17 00:00:00 2001 From: mathias Date: Sun, 3 Oct 2021 19:09:25 +0200 Subject: [PATCH] Created ResponderContext#runCommand to run a specific command --- .../http/contexts/ResponderContext.java | 46 +++++++++++++++++++ 1 file changed, 46 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 9664234..db17070 100644 --- a/src/main/java/de/gnmyt/autoresponder/http/contexts/ResponderContext.java +++ b/src/main/java/de/gnmyt/autoresponder/http/contexts/ResponderContext.java @@ -6,10 +6,15 @@ 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.ResponderChatCommand; import de.gnmyt.autoresponder.commands.ResponderCommand; +import de.gnmyt.autoresponder.commands.ResponderGroupCommand; +import de.gnmyt.autoresponder.commands.annotations.CommandInfo; import de.gnmyt.autoresponder.commands.usage.UsageElement; import de.gnmyt.autoresponder.commands.usage.UsageException; import de.gnmyt.autoresponder.commands.usage.UsageType; +import de.gnmyt.autoresponder.entities.ChatCommand; +import de.gnmyt.autoresponder.entities.GroupCommand; import de.gnmyt.autoresponder.event.chat.ChatMessageReceivedEvent; import de.gnmyt.autoresponder.event.group.GroupMessageReceivedEvent; import de.gnmyt.autoresponder.http.controller.HttpResponseController; @@ -93,6 +98,47 @@ public class ResponderContext extends SimpleHttpHandler { } } + /** + * Runs the command + * + * @param appPackageName The package name of the responder app + * @param messengerPackageName The package name of your whatsapp instance + * @param sender The sender of the message + * @param commandMessage The message without the prefix + * @param isGroup true if the provided message has been sent in a group, otherwise false + * @param groupParticipant (Optional) The group participant + * @param ruleId The id of the rule that has been executed + * @param controller The response controller of the executed request + */ + public void runCommand(String appPackageName, String messengerPackageName, String sender, String commandMessage, boolean isGroup, + String groupParticipant, int ruleId, HttpResponseController controller) { + for (ResponderCommand command : responder.getCommands()) { + CommandInfo info = command.getClass().getAnnotation(CommandInfo.class); + + if ((command instanceof ResponderGroupCommand) && !isGroup || !(command instanceof ResponderGroupCommand) && isGroup) + continue; + + String foundTrigger = null; + for (String currentTrigger : info.triggers()) + if (commandMessage.split(" ")[0].equalsIgnoreCase(currentTrigger)) foundTrigger = currentTrigger; + + if (foundTrigger == null) continue; + + Arguments arguments = handleUsage(command, foundTrigger, commandMessage, controller); + + if (arguments == null) return; + + if (command instanceof ResponderGroupCommand) { + ((ResponderGroupCommand) command) + .execute(new GroupCommand(controller, appPackageName, messengerPackageName, ruleId, sender, commandMessage, + groupParticipant), arguments); + } else if (command instanceof ResponderChatCommand) { + ((ResponderChatCommand) command) + .execute(new ChatCommand(controller, appPackageName, messengerPackageName, ruleId, sender, commandMessage), arguments); + } + } + } + /** * Handles the usage of a command *