From 74f6e07c19cf7cc1fab148b50995caac0f89ee94 Mon Sep 17 00:00:00 2001 From: mathias Date: Sun, 3 Oct 2021 21:36:53 +0200 Subject: [PATCH] Added the "locked channel" functionality --- .../http/contexts/ResponderContext.java | 40 +++++++++++++++++++ 1 file changed, 40 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 691adc4..3dd11f7 100644 --- a/src/main/java/de/gnmyt/autoresponder/http/contexts/ResponderContext.java +++ b/src/main/java/de/gnmyt/autoresponder/http/contexts/ResponderContext.java @@ -15,6 +15,7 @@ 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.entities.LockedChannel; import de.gnmyt.autoresponder.event.ResponderEvent; import de.gnmyt.autoresponder.event.chat.ChatMessageReceivedEvent; import de.gnmyt.autoresponder.event.group.GroupMessageReceivedEvent; @@ -25,6 +26,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -32,6 +34,8 @@ import static de.gnmyt.autoresponder.commands.usage.UsageExceptionType.*; public class ResponderContext extends SimpleHttpHandler { + public final ArrayList LOCKED_CHANNELS = new ArrayList<>(); + private final ObjectMapper mapper = new ObjectMapper(); private final SimpleAutoResponder responder; @@ -74,6 +78,8 @@ public class ResponderContext extends SimpleHttpHandler { ResponderEvent event = getEvent(appPackageName, messengerPackageName, sender, message, isGroup, groupParticipant, ruleId, controller); + if (executeUnlockAction(event)) return; + if (message.startsWith(responder.getPrefix()) && runCommand(appPackageName, messengerPackageName, sender, message.substring(responder.getPrefix().length()), isGroup, groupParticipant, ruleId, controller)) return; @@ -83,6 +89,40 @@ public class ResponderContext extends SimpleHttpHandler { if (!controller.isResponseSent()) sendNotFoundReply(isGroup ? groupParticipant : sender, message, controller); } + /** + * Executes the unlock action + * + * @param event The event given by the request + * @return true if the channel was locked, otherwise false + */ + public boolean executeUnlockAction(ResponderEvent event) { + for (int i = 0; i < LOCKED_CHANNELS.size(); i++) { + LockedChannel lockedChannel = LOCKED_CHANNELS.get(i); + + if (!((lockedChannel.isGroup() && event instanceof GroupMessageReceivedEvent) + || (!lockedChannel.isGroup() && event instanceof ChatMessageReceivedEvent))) + continue; + + if (lockedChannel.isGroup()) { + if (lockedChannel.getGroupName().equals(((GroupMessageReceivedEvent) event).getGroup()) + && lockedChannel.getGroupName().equals(((GroupMessageReceivedEvent) event).getSender())) { + ((Consumer) lockedChannel.getConsumer()).accept(((GroupMessageReceivedEvent) event)); + LOCKED_CHANNELS.remove(i); + return true; + } + } else { + if (lockedChannel.getSender().equals(((ChatMessageReceivedEvent) event).getSender())) { + ((Consumer) lockedChannel.getConsumer()).accept((ChatMessageReceivedEvent) event); + LOCKED_CHANNELS.remove(i); + return true; + } + } + + } + return false; + } + + /** * Triggers the correct event *