[AB-225] adding parameter handler for messages

reworking parameter handling in command received handler
adding string parameter handler to explicitly parse strings
This commit is contained in:
Sheldan
2021-04-07 23:16:25 +02:00
parent c56a037d28
commit 400181a280
62 changed files with 815 additions and 153 deletions

View File

@@ -6,7 +6,9 @@ import lombok.Setter;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Getter
@Setter
@@ -25,4 +27,8 @@ public class Parameter implements Serializable {
private Boolean templated = false;
@Builder.Default
private List<ParameterValidator> validators = new ArrayList<>();
@Builder.Default
private Map<String, Object> additionalInfo = new HashMap<>();
public static final String ADDITIONAL_TYPES_KEY = "ADDITIONAL_TYPES";
}

View File

@@ -0,0 +1,13 @@
package dev.sheldan.abstracto.core.command.config;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class ParseResult {
private Parameter parameter;
private Object result;
}

View File

@@ -1,5 +1,5 @@
package dev.sheldan.abstracto.core.command.execution;
public enum ParameterPieceType {
STRING, ATTACHMENT
STRING, ATTACHMENT, REFERENCED_MESSAGE
}

View File

@@ -17,6 +17,13 @@ public class UnParsedCommandParameter {
this.parameters = new ArrayList<>();
Matcher m = SPLIT_REGEX.matcher(parameters);
boolean skippedCommand = false;
if(message.getReferencedMessage() != null) {
this.parameters.add(UnparsedCommandParameterPiece
.builder()
.value(message.getReferencedMessage())
.type(ParameterPieceType.REFERENCED_MESSAGE)
.build());
}
while (m.find()) {
if(!skippedCommand) {
skippedCommand = true;
@@ -35,7 +42,11 @@ public class UnParsedCommandParameter {
}
}
message.getAttachments().forEach(attachment ->
this.parameters.add(UnparsedCommandParameterPiece.builder().value(attachment).type(ParameterPieceType.ATTACHMENT).build()));
this.parameters.add(UnparsedCommandParameterPiece
.builder()
.value(attachment)
.type(ParameterPieceType.ATTACHMENT)
.build()));
}
private List<UnparsedCommandParameterPiece> parameters;
}

View File

@@ -1,6 +1,8 @@
package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import net.dv8tion.jda.api.entities.Message;
@@ -9,7 +11,7 @@ import java.util.concurrent.CompletableFuture;
public interface CommandParameterHandler {
boolean handles(Class clazz);
default boolean async() { return false; }
default Object handle(UnparsedCommandParameterPiece input, CommandParameterIterators iterators, Class clazz, Message context) { return new Object();}
default CompletableFuture<Object> handleAsync(UnparsedCommandParameterPiece input, CommandParameterIterators iterators, Class clazz, Message context) { return CompletableFuture.completedFuture(null); }
default Object handle(UnparsedCommandParameterPiece input, CommandParameterIterators iterators, Parameter param, Message context, Command command) { return new Object();}
default CompletableFuture<Object> handleAsync(UnparsedCommandParameterPiece input, CommandParameterIterators iterators, Parameter param, Message context, Command command) { return CompletableFuture.completedFuture(null); }
Integer getPriority();
}

View File

@@ -0,0 +1,10 @@
package dev.sheldan.abstracto.core.command.handler.parameter;
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class CombinedParameter {
}

View File

@@ -0,0 +1,6 @@
package dev.sheldan.abstracto.core.command.handler.provided;
import dev.sheldan.abstracto.core.command.handler.CommandParameterHandler;
public interface CombinedParametersHandler extends CommandParameterHandler {
}

View File

@@ -0,0 +1,6 @@
package dev.sheldan.abstracto.core.command.handler.provided;
import dev.sheldan.abstracto.core.command.handler.CommandParameterHandler;
public interface MessageParameterHandler extends CommandParameterHandler {
}

View File

@@ -0,0 +1,6 @@
package dev.sheldan.abstracto.core.command.handler.provided;
import dev.sheldan.abstracto.core.command.handler.CommandParameterHandler;
public interface StringParameterHandler extends CommandParameterHandler {
}

View File

@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.core.command.service;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.condition.ConditionResult;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.Parameters;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter;
@@ -28,4 +29,5 @@ public interface CommandService {
ConditionResult isCommandExecutable(Command command, CommandContext commandContext);
UnParsedCommandParameter getUnParsedCommandParameter(String messageContent, Message message);
CompletableFuture<Parameters> getParametersForCommand(String commandName, Message messageContainingContent);
Parameter cloneParameter(Parameter parameter);
}