From b2046cc9777ed22ee16173f20d47d52791daca64 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Fri, 9 Dec 2022 21:15:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BC=D0=B5=D0=B6=D1=83=D1=82=D0=BE=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=20AnswerCheck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quarkus/core/GeneralAutoResponder.java | 2 +- .../core/action/AnswerCheckAction.java | 18 +++++++- .../quarkus/core/unit/AnswerCheck.java | 44 +++++++++++++++++-- .../simple/core/GeneralAutoResponder.java | 2 +- .../simple/core/action/AnswerCheckAction.java | 21 ++++++++- .../simple/core/unit/AnswerCheck.java | 39 ++++++++++++++++ pom.xml | 2 +- 7 files changed, 117 insertions(+), 11 deletions(-) diff --git a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/GeneralAutoResponder.java b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/GeneralAutoResponder.java index ad9ba80..aead876 100644 --- a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/GeneralAutoResponder.java +++ b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/GeneralAutoResponder.java @@ -53,7 +53,7 @@ public class GeneralAutoResponder { } private void init(Sending sending) { - actionUnitMap.put(TypeUnit.CHECK, new AnswerCheckAction<>()); + actionUnitMap.put(TypeUnit.CHECK, new AnswerCheckAction<>(sending)); actionUnitMap.put(TypeUnit.TEXT, new AnswerTextAction(sending)); actionUnitMap.put(TypeUnit.REPLACE_CMD, new ReplaceCmdAction()); } diff --git a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/action/AnswerCheckAction.java b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/action/AnswerCheckAction.java index d2cb4d6..c60e7f9 100644 --- a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/action/AnswerCheckAction.java +++ b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/action/AnswerCheckAction.java @@ -1,6 +1,7 @@ package dev.struchkov.godfather.quarkus.core.action; import dev.struchkov.godfather.main.domain.content.Message; +import dev.struchkov.godfather.quarkus.context.service.Sending; import dev.struchkov.godfather.quarkus.core.unit.AnswerCheck; import dev.struchkov.godfather.quarkus.core.unit.MainUnit; import dev.struchkov.godfather.quarkus.core.unit.UnitRequest; @@ -8,7 +9,7 @@ import io.smallrye.mutiny.Uni; import java.util.Objects; -import static dev.struchkov.haiti.utils.Checker.checkNotNull; +import static dev.struchkov.haiti.utils.Checker.checkTrue; /** * Обработчик Unit-а {@link AnswerCheck}. @@ -17,15 +18,28 @@ import static dev.struchkov.haiti.utils.Checker.checkNotNull; */ public class AnswerCheckAction implements ActionUnit, M> { + private final Sending sending; + + public AnswerCheckAction(Sending sending) { + this.sending = sending; + } + @Override public Uni> action(UnitRequest, M> unitRequest) { final AnswerCheck unit = unitRequest.getUnit(); final M message = unitRequest.getMessage(); return unit.getCheck().checked(message) + .onItem().call(checkValue -> { + if (checkTrue(checkValue)) { + return sending.send(message.getPersonId(), unit.getIntermediateAnswerIfTrue()); + } else { + return sending.send(message.getPersonId(), unit.getIntermediateAnswerIfFalse()); + } + }) .onItem().transform( checkValue -> { - if (checkNotNull(checkValue) && checkValue) { + if (checkTrue(checkValue)) { return UnitRequest.of(Objects.requireNonNullElse(unit.getUnitTrue(), unit), message); } else { return UnitRequest.of(Objects.requireNonNullElse(unit.getUnitFalse(), unit), message); diff --git a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/unit/AnswerCheck.java b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/unit/AnswerCheck.java index 244e8b2..1a02186 100644 --- a/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/unit/AnswerCheck.java +++ b/bot-core/bot-core-quarkus/src/main/java/dev/struchkov/godfather/quarkus/core/unit/AnswerCheck.java @@ -3,6 +3,7 @@ package dev.struchkov.godfather.quarkus.core.unit; import dev.struchkov.autoresponder.entity.KeyWord; import dev.struchkov.godfather.main.core.unit.TypeUnit; import dev.struchkov.godfather.main.core.unit.UnitActiveType; +import dev.struchkov.godfather.main.domain.BoxAnswer; import dev.struchkov.godfather.main.domain.content.Message; import dev.struchkov.godfather.quarkus.context.service.Accessibility; import dev.struchkov.godfather.quarkus.core.unit.func.CheckData; @@ -14,9 +15,6 @@ import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Collectors; -import static dev.struchkov.godfather.exception.UnitConfigException.unitConfigException; -import static dev.struchkov.haiti.utils.Inspector.isAnyNotNull; - /** * Обработчик запроса, который реализует конструкцию IF в сценарии. * @@ -34,6 +32,16 @@ public class AnswerCheck extends MainUnit { */ private final MainUnit unitFalse; + /** + * Временный ответ. Отправляется сразу после проверки условия, если оно true. Предполагается, что после условия следующий Unit может долго обрабатывать какой-то результат. Поэтому можно передать пользователю какое-то сообщение, наподобие: "Подождите идет обработка". + */ + private final BoxAnswer intermediateAnswerIfTrue; + + /** + * Промежуточный ответ. Отправляется сразу после проверки условия, если оно false. Предполагается, что после условия следующий Unit может долго обрабатывать какой-то результат. Поэтому можно передать пользователю какое-то сообщение, наподобие: "Подождите идет обработка". + */ + private final BoxAnswer intermediateAnswerIfFalse; + /** * Условие проверки. */ @@ -58,6 +66,8 @@ public class AnswerCheck extends MainUnit { unitTrue = builder.unitTrue; unitFalse = builder.unitFalse; check = builder.check; + intermediateAnswerIfTrue = builder.intermediateAnswerIfTrue; + intermediateAnswerIfFalse = builder.intermediateAnswerIfFalse; } public static Builder builder() { @@ -76,6 +86,14 @@ public class AnswerCheck extends MainUnit { return check; } + public BoxAnswer getIntermediateAnswerIfTrue() { + return intermediateAnswerIfTrue; + } + + public BoxAnswer getIntermediateAnswerIfFalse() { + return intermediateAnswerIfFalse; + } + public static final class Builder { private String name = UUID.randomUUID().toString(); private String description; @@ -95,6 +113,8 @@ public class AnswerCheck extends MainUnit { private MainUnit unitTrue; private MainUnit unitFalse; private CheckData check; + private BoxAnswer intermediateAnswerIfFalse; + private BoxAnswer intermediateAnswerIfTrue; private Builder() { } @@ -212,9 +232,25 @@ public class AnswerCheck extends MainUnit { return this; } + public Builder intermediateAnswer(BoxAnswer val) { + intermediateAnswerIfTrue = val; + intermediateAnswerIfFalse = val; + return this; + } + + public Builder intermediateAnswerIfTrue(BoxAnswer val) { + intermediateAnswerIfTrue = val; + return this; + } + + public Builder intermediateAnswerIfFalse(BoxAnswer val) { + intermediateAnswerIfFalse = val; + return this; + } + public AnswerCheck build() { // isNotNull(check, unitConfigException("Необходимо установить параметр проверки.")); - isAnyNotNull(unitConfigException("Необходимо задать хотя бы один unit результата проверки.")); +// isAnyNotNull(unitConfigException("Необходимо задать хотя бы один unit результата проверки.")); return new AnswerCheck<>(this); } diff --git a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/GeneralAutoResponder.java b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/GeneralAutoResponder.java index 6891cb2..0f1a710 100644 --- a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/GeneralAutoResponder.java +++ b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/GeneralAutoResponder.java @@ -46,7 +46,7 @@ public class GeneralAutoResponder { } private void init(Sending sending) { - actionUnitMap.put(TypeUnit.CHECK, new AnswerCheckAction<>()); + actionUnitMap.put(TypeUnit.CHECK, new AnswerCheckAction<>(sending)); actionUnitMap.put(TypeUnit.TEXT, new AnswerTextAction(sending)); actionUnitMap.put(TypeUnit.REPLACE_CMD, new ReplaceCmdAction()); } diff --git a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/action/AnswerCheckAction.java b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/action/AnswerCheckAction.java index b57575b..a8f7035 100644 --- a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/action/AnswerCheckAction.java +++ b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/action/AnswerCheckAction.java @@ -1,6 +1,8 @@ package dev.struchkov.godfather.simple.core.action; +import dev.struchkov.godfather.main.domain.BoxAnswer; import dev.struchkov.godfather.main.domain.content.Message; +import dev.struchkov.godfather.simple.context.service.Sending; import dev.struchkov.godfather.simple.core.unit.AnswerCheck; import dev.struchkov.godfather.simple.core.unit.MainUnit; import dev.struchkov.godfather.simple.core.unit.UnitRequest; @@ -9,6 +11,8 @@ import org.slf4j.LoggerFactory; import java.util.Objects; +import static dev.struchkov.haiti.utils.Checker.checkNull; + /** * Обработчик Unit-а {@link AnswerCheck}. * @@ -18,19 +22,32 @@ public class AnswerCheckAction implements ActionUnit action(UnitRequest, M> unitRequest) { final AnswerCheck unit = unitRequest.getUnit(); + log.debug("Началась обработка unit: {}.", unit.getName()); + final M message = unitRequest.getMessage(); MainUnit unitAnswer; if (unit.getCheck().checked(message)) { - log.info("Проверка пройдена"); + log.debug("Unit: {}. Проверка пройдена", unit.getName()); + final BoxAnswer answerIfTrue = unit.getIntermediateAnswerIfTrue(); + if (checkNull(answerIfTrue)) sending.send(message.getPersonId(), answerIfTrue); unitAnswer = unit.getUnitTrue(); } else { - log.info("Проверка не пройдена"); + log.debug("Unit: {}. Проверка НЕ пройдена", unit.getName()); + final BoxAnswer answerIfFalse = unit.getIntermediateAnswerIfFalse(); + if (checkNull(answerIfFalse)) sending.send(message.getPersonId(), answerIfFalse); unitAnswer = unit.getUnitFalse(); } + log.debug("Завершилась обработка unit: {}.", unit.getName()); return UnitRequest.of(Objects.requireNonNullElse(unitAnswer, unit), message); } } diff --git a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/unit/AnswerCheck.java b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/unit/AnswerCheck.java index d5fbe6c..41ecb91 100644 --- a/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/unit/AnswerCheck.java +++ b/bot-core/bot-core-simple/src/main/java/dev/struchkov/godfather/simple/core/unit/AnswerCheck.java @@ -3,6 +3,7 @@ package dev.struchkov.godfather.simple.core.unit; import dev.struchkov.autoresponder.entity.KeyWord; import dev.struchkov.godfather.main.core.unit.TypeUnit; import dev.struchkov.godfather.main.core.unit.UnitActiveType; +import dev.struchkov.godfather.main.domain.BoxAnswer; import dev.struchkov.godfather.main.domain.content.Message; import dev.struchkov.godfather.simple.context.service.Accessibility; import dev.struchkov.godfather.simple.core.unit.func.CheckData; @@ -36,6 +37,16 @@ public class AnswerCheck extends MainUnit { */ private final CheckData check; + /** + * Временный ответ. Отправляется сразу после проверки условия, если оно true. Предполагается, что после условия следующий Unit может долго обрабатывать какой-то результат. Поэтому можно передать пользователю какое-то сообщение, наподобие: "Подождите идет обработка". + */ + private final BoxAnswer intermediateAnswerIfTrue; + + /** + * Промежуточный ответ. Отправляется сразу после проверки условия, если оно false. Предполагается, что после условия следующий Unit может долго обрабатывать какой-то результат. Поэтому можно передать пользователю какое-то сообщение, наподобие: "Подождите идет обработка". + */ + private final BoxAnswer intermediateAnswerIfFalse; + private AnswerCheck(Builder builder) { super( builder.name, @@ -55,6 +66,8 @@ public class AnswerCheck extends MainUnit { unitTrue = builder.unitTrue; unitFalse = builder.unitFalse; check = builder.check; + intermediateAnswerIfTrue = builder.intermediateAnswerIfTrue; + intermediateAnswerIfFalse = builder.intermediateAnswerIfFalse; } public static Builder builder() { @@ -73,6 +86,14 @@ public class AnswerCheck extends MainUnit { return check; } + public BoxAnswer getIntermediateAnswerIfTrue() { + return intermediateAnswerIfTrue; + } + + public BoxAnswer getIntermediateAnswerIfFalse() { + return intermediateAnswerIfFalse; + } + public static final class Builder { private String name = UUID.randomUUID().toString(); private String description; @@ -92,6 +113,8 @@ public class AnswerCheck extends MainUnit { private MainUnit unitTrue; private MainUnit unitFalse; private CheckData check; + private BoxAnswer intermediateAnswerIfFalse; + private BoxAnswer intermediateAnswerIfTrue; private Builder() { } @@ -209,6 +232,22 @@ public class AnswerCheck extends MainUnit { return this; } + public Builder intermediateAnswer(BoxAnswer val) { + intermediateAnswerIfTrue = val; + intermediateAnswerIfFalse = val; + return this; + } + + public Builder intermediateAnswerIfTrue(BoxAnswer val) { + intermediateAnswerIfTrue = val; + return this; + } + + public Builder intermediateAnswerIfFalse(BoxAnswer val) { + intermediateAnswerIfFalse = val; + return this; + } + public AnswerCheck build() { // isNotNull(check, unitConfigException("Необходимо установить параметр проверки.")); // Inspector.isAnyNotNull(unitConfigException("Необходимо задать хотя бы один unit результата проверки.")); diff --git a/pom.xml b/pom.xml index 15f7cdf..18d77a3 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ ${project.version} 3.5.0 - 1.4.0 + 2.2.0 2.2 2.0.1.Final