This commit is contained in:
parent
5379471aea
commit
6e55bee09e
@ -0,0 +1,39 @@
|
|||||||
|
package dev.struchkov.godfather.quarkus.core.action;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.main.domain.content.Message;
|
||||||
|
import dev.struchkov.godfather.quarkus.core.Responder;
|
||||||
|
import dev.struchkov.godfather.quarkus.domain.unit.MainUnit;
|
||||||
|
import dev.struchkov.godfather.quarkus.domain.unit.SwitchUnit;
|
||||||
|
import dev.struchkov.godfather.quarkus.domain.unit.UnitRequest;
|
||||||
|
import io.smallrye.mutiny.Uni;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
||||||
|
|
||||||
|
public class SwitchUnitAction implements ActionUnit<SwitchUnit<Message>, Message> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Uni<UnitRequest<MainUnit, Message>> action(UnitRequest<SwitchUnit<Message>, Message> unitRequest) {
|
||||||
|
final Message message = unitRequest.getMessage();
|
||||||
|
final Set<MainUnit<Message>> nextUnits = unitRequest.getUnit().getNextUnits();
|
||||||
|
return Responder.nextUnit(message, nextUnits)
|
||||||
|
.map(nextUnit -> {
|
||||||
|
if (checkNotNull(nextUnit)) {
|
||||||
|
return UnitRequest.of(nextUnit, message);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUnitType() {
|
||||||
|
return SwitchUnit.TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<Message> getMessageType() {
|
||||||
|
return Message.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,201 @@
|
|||||||
|
package dev.struchkov.godfather.quarkus.domain.unit;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.main.domain.content.Message;
|
||||||
|
import dev.struchkov.godfather.main.domain.unit.KeyWord;
|
||||||
|
import dev.struchkov.godfather.main.domain.unit.UnitActiveType;
|
||||||
|
import dev.struchkov.godfather.quarkus.domain.BoxAnswer;
|
||||||
|
import dev.struchkov.godfather.quarkus.domain.unit.func.CallBackConsumer;
|
||||||
|
import dev.struchkov.godfather.quarkus.domain.unit.func.ProcessingData;
|
||||||
|
import dev.struchkov.godfather.quarkus.domain.unit.func.UniPredicate;
|
||||||
|
import io.smallrye.mutiny.Uni;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class SwitchUnit<M extends Message> extends MainUnit<M> {
|
||||||
|
|
||||||
|
public static final String TYPE = "SWITCH_UNIT";
|
||||||
|
|
||||||
|
private SwitchUnit(Builder<M> builder) {
|
||||||
|
super(
|
||||||
|
builder.name,
|
||||||
|
builder.triggerWords,
|
||||||
|
builder.triggerPhrases,
|
||||||
|
builder.triggerPatterns,
|
||||||
|
builder.triggerCheck,
|
||||||
|
builder.matchThreshold,
|
||||||
|
builder.priority,
|
||||||
|
builder.nextUnits,
|
||||||
|
builder.description,
|
||||||
|
TYPE,
|
||||||
|
builder.activeType,
|
||||||
|
builder.notSaveHistory
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <M extends Message> SwitchUnit.Builder<M> builder() {
|
||||||
|
return new SwitchUnit.Builder<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class Builder<M extends Message> {
|
||||||
|
|
||||||
|
private String name = UUID.randomUUID().toString();
|
||||||
|
private String description;
|
||||||
|
private Set<MainUnit<M>> nextUnits;
|
||||||
|
|
||||||
|
private Set<KeyWord> triggerWords;
|
||||||
|
private Set<String> triggerPhrases;
|
||||||
|
private UniPredicate<M> triggerCheck;
|
||||||
|
private Set<Pattern> triggerPatterns;
|
||||||
|
|
||||||
|
private Integer matchThreshold;
|
||||||
|
private Integer priority;
|
||||||
|
|
||||||
|
private UnitActiveType activeType;
|
||||||
|
private boolean notSaveHistory;
|
||||||
|
|
||||||
|
private ProcessingData<M> boxAnswer;
|
||||||
|
private CallBackConsumer callBack;
|
||||||
|
|
||||||
|
private Builder() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> name(String name) {
|
||||||
|
this.name = name;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> description(String description) {
|
||||||
|
this.description = description;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> answer(Consumer<M> answer) {
|
||||||
|
this.boxAnswer = message -> {
|
||||||
|
answer.accept(message);
|
||||||
|
return Uni.createFrom().nullItem();
|
||||||
|
};
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> answer(Function<M, Uni<BoxAnswer>> answer) {
|
||||||
|
this.boxAnswer = answer::apply;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> answer(Supplier<BoxAnswer> answer) {
|
||||||
|
this.boxAnswer = message -> Uni.createFrom().item(answer.get());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> callBack(CallBackConsumer callBack) {
|
||||||
|
this.callBack = callBack;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> triggerWords(Set<KeyWord> val) {
|
||||||
|
if (triggerWords == null) {
|
||||||
|
triggerWords = new HashSet<>();
|
||||||
|
}
|
||||||
|
triggerWords.addAll(val);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> triggerWord(KeyWord val) {
|
||||||
|
if (triggerWords == null) {
|
||||||
|
triggerWords = new HashSet<>();
|
||||||
|
}
|
||||||
|
triggerWords.add(val);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> triggerStringWords(Set<String> val) {
|
||||||
|
if (triggerWords == null) {
|
||||||
|
triggerWords = new HashSet<>();
|
||||||
|
}
|
||||||
|
triggerWords.addAll(val.stream().map(KeyWord::of).collect(Collectors.toSet()));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> triggerWord(String val) {
|
||||||
|
if (triggerWords == null) {
|
||||||
|
triggerWords = new HashSet<>();
|
||||||
|
}
|
||||||
|
triggerWords.add(KeyWord.of(val));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> triggerPhrase(String... val) {
|
||||||
|
if (triggerPhrases == null) {
|
||||||
|
triggerPhrases = new HashSet<>();
|
||||||
|
}
|
||||||
|
if (val.length == 1) {
|
||||||
|
triggerPhrases.add(val[0]);
|
||||||
|
} else {
|
||||||
|
triggerPhrases.addAll(Set.of(val));
|
||||||
|
}
|
||||||
|
triggerPhrases.addAll(List.of(val));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> triggerPattern(Pattern... val) {
|
||||||
|
if (triggerPatterns == null) {
|
||||||
|
triggerPatterns = new HashSet<>();
|
||||||
|
}
|
||||||
|
if (val.length == 1) {
|
||||||
|
triggerPatterns.add(val[0]);
|
||||||
|
} else {
|
||||||
|
triggerPatterns.addAll(Set.of(val));
|
||||||
|
}
|
||||||
|
triggerPatterns.addAll(Set.of(val));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> triggerCheck(UniPredicate<M> trigger) {
|
||||||
|
triggerCheck = trigger;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> matchThreshold(Integer val) {
|
||||||
|
matchThreshold = val;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> priority(Integer val) {
|
||||||
|
priority = val;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> next(MainUnit<M> val) {
|
||||||
|
if (nextUnits == null) {
|
||||||
|
nextUnits = new HashSet<>();
|
||||||
|
}
|
||||||
|
nextUnits.add(val);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> notSaveHistory() {
|
||||||
|
notSaveHistory = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit.Builder<M> activeType(UnitActiveType val) {
|
||||||
|
activeType = val;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SwitchUnit<M> build() {
|
||||||
|
// isNotNull(boxAnswer, UnitConfigException.unitConfigException("BoxAnswer обязательный параметр юнита"));
|
||||||
|
return new SwitchUnit<>(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user