Added the "locked channel" functionality
This commit is contained in:
parent
47a2de60ac
commit
74f6e07c19
@ -15,6 +15,7 @@ import de.gnmyt.autoresponder.commands.usage.UsageException;
|
|||||||
import de.gnmyt.autoresponder.commands.usage.UsageType;
|
import de.gnmyt.autoresponder.commands.usage.UsageType;
|
||||||
import de.gnmyt.autoresponder.entities.ChatCommand;
|
import de.gnmyt.autoresponder.entities.ChatCommand;
|
||||||
import de.gnmyt.autoresponder.entities.GroupCommand;
|
import de.gnmyt.autoresponder.entities.GroupCommand;
|
||||||
|
import de.gnmyt.autoresponder.entities.LockedChannel;
|
||||||
import de.gnmyt.autoresponder.event.ResponderEvent;
|
import de.gnmyt.autoresponder.event.ResponderEvent;
|
||||||
import de.gnmyt.autoresponder.event.chat.ChatMessageReceivedEvent;
|
import de.gnmyt.autoresponder.event.chat.ChatMessageReceivedEvent;
|
||||||
import de.gnmyt.autoresponder.event.group.GroupMessageReceivedEvent;
|
import de.gnmyt.autoresponder.event.group.GroupMessageReceivedEvent;
|
||||||
@ -25,6 +26,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -32,6 +34,8 @@ import static de.gnmyt.autoresponder.commands.usage.UsageExceptionType.*;
|
|||||||
|
|
||||||
public class ResponderContext extends SimpleHttpHandler {
|
public class ResponderContext extends SimpleHttpHandler {
|
||||||
|
|
||||||
|
public final ArrayList<LockedChannel> LOCKED_CHANNELS = new ArrayList<>();
|
||||||
|
|
||||||
private final ObjectMapper mapper = new ObjectMapper();
|
private final ObjectMapper mapper = new ObjectMapper();
|
||||||
private final SimpleAutoResponder responder;
|
private final SimpleAutoResponder responder;
|
||||||
|
|
||||||
@ -74,6 +78,8 @@ public class ResponderContext extends SimpleHttpHandler {
|
|||||||
|
|
||||||
ResponderEvent event = getEvent(appPackageName, messengerPackageName, sender, message, isGroup, groupParticipant, ruleId, controller);
|
ResponderEvent event = getEvent(appPackageName, messengerPackageName, sender, message, isGroup, groupParticipant, ruleId, controller);
|
||||||
|
|
||||||
|
if (executeUnlockAction(event)) return;
|
||||||
|
|
||||||
if (message.startsWith(responder.getPrefix())
|
if (message.startsWith(responder.getPrefix())
|
||||||
&& runCommand(appPackageName, messengerPackageName, sender, message.substring(responder.getPrefix().length()), isGroup,
|
&& runCommand(appPackageName, messengerPackageName, sender, message.substring(responder.getPrefix().length()), isGroup,
|
||||||
groupParticipant, ruleId, controller)) return;
|
groupParticipant, ruleId, controller)) return;
|
||||||
@ -83,6 +89,40 @@ public class ResponderContext extends SimpleHttpHandler {
|
|||||||
if (!controller.isResponseSent()) sendNotFoundReply(isGroup ? groupParticipant : sender, message, controller);
|
if (!controller.isResponseSent()) sendNotFoundReply(isGroup ? groupParticipant : sender, message, controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes the unlock action
|
||||||
|
*
|
||||||
|
* @param event The event given by the request
|
||||||
|
* @return <code>true</code> 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<GroupMessageReceivedEvent>) lockedChannel.getConsumer()).accept(((GroupMessageReceivedEvent) event));
|
||||||
|
LOCKED_CHANNELS.remove(i);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (lockedChannel.getSender().equals(((ChatMessageReceivedEvent) event).getSender())) {
|
||||||
|
((Consumer<ChatMessageReceivedEvent>) lockedChannel.getConsumer()).accept((ChatMessageReceivedEvent) event);
|
||||||
|
LOCKED_CHANNELS.remove(i);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Triggers the correct event
|
* Triggers the correct event
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user