From 40fd76590f64ea7f9c27304b4425d84f7cbf158e Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Sun, 26 Mar 2023 17:42:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BE=D1=82=20=D1=82=D0=B5=D0=BB=D0=B5=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B4=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B6=D0=BA=D0=B8=20=D0=BC=D0=B8=D0=BA=D1=80=D0=BE?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D0=BD=D0=BE=D0=B9=20=D0=B0?= =?UTF-8?q?=D1=80=D1=85=D0=B8=D1=82=D0=B5=D0=BA=D1=82=D1=83=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 12 ++- .../main/consumer/MessageChatMailConvert.java | 2 +- .../main/consumer/MessageMailConvert.java | 2 +- .../consumer/EventDistributorService.java | 79 +++---------------- .../consumer/EventDistributorService.java | 38 ++++----- .../telegram-context-main/pom.xml | 2 +- .../context/service/TelegramSending.java | 2 + .../telegram-context-simple/pom.xml | 9 ++- .../context/service/EventDistributor.java | 3 +- .../simple/context/service/TelegramBot.java | 3 +- .../context/service/TelegramSending.java | 5 +- telegram-core/telegram-core-quarkus/pom.xml | 8 +- .../core/handler/PreCheckoutQueryHandler.java | 11 +-- .../core/handler/PreCheckoutQueryHandler.java | 10 ++- telegram-domain/telegram-domain-main/pom.xml | 4 + .../attachment/ButtonClickAttachment.java | 54 ++++--------- .../domain/attachment/CommandAttachment.java | 36 ++------- .../domain/attachment/ContactAttachment.java | 57 ++----------- .../domain/attachment/DocumentAttachment.java | 41 ++-------- .../domain/attachment/LinkAttachment.java | 22 +++--- .../telegram/domain/attachment/Picture.java | 45 ++--------- .../attachment/PictureGroupAttachment.java | 17 ++-- .../deser/TelegramAttachmentDeserializer.java | 45 +++++++++++ .../quarkus/sender/TelegramSender.java | 24 ++++++ .../simple/sender/TelegramSender.java | 16 ++++ 25 files changed, 215 insertions(+), 332 deletions(-) create mode 100644 telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramAttachmentDeserializer.java diff --git a/pom.xml b/pom.xml index 1a896b2..b5eaab1 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ UTF-8 UTF-8 - 0.0.54 + 0.0.55-SNAPSHOT 6.3.0 @@ -46,7 +46,7 @@ 2.30.1 - 2.6.0 + 2.7.2 3.10.1 @@ -267,6 +267,14 @@ smallrye-mutiny-vertx-core ${smallrye.mutiny.vertx.core.version} + + + + com.fasterxml.jackson.core + jackson-databind + 2.14.2 + + diff --git a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageChatMailConvert.java b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageChatMailConvert.java index fba2b82..7b227aa 100644 --- a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageChatMailConvert.java +++ b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageChatMailConvert.java @@ -84,7 +84,7 @@ public final class MessageChatMailConvert { return picture; }).toList(); - attachment.setPictureSizes(pictures); + attachment.setPictures(pictures); return Optional.of(attachment); } diff --git a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageMailConvert.java b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageMailConvert.java index 26157b1..e0e0c1e 100644 --- a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageMailConvert.java +++ b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageMailConvert.java @@ -83,7 +83,7 @@ public final class MessageMailConvert { return picture; }).toList(); - attachment.setPictureSizes(pictures); + attachment.setPictures(pictures); return Optional.of(attachment); } diff --git a/telegram-consumer/telegram-consumer-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/consumer/EventDistributorService.java b/telegram-consumer/telegram-consumer-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/consumer/EventDistributorService.java index 4170354..7abe83c 100644 --- a/telegram-consumer/telegram-consumer-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/consumer/EventDistributorService.java +++ b/telegram-consumer/telegram-consumer-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/consumer/EventDistributorService.java @@ -1,7 +1,8 @@ package dev.struchkov.godfather.telegram.quarkus.consumer; +import dev.struchkov.godfather.main.domain.EventContainer; import dev.struchkov.godfather.main.domain.content.Mail; -import dev.struchkov.godfather.quarkus.context.service.EventHandler; +import dev.struchkov.godfather.quarkus.context.service.EventDispatching; import dev.struchkov.godfather.telegram.domain.event.Subscribe; import dev.struchkov.godfather.telegram.domain.event.Unsubscribe; import dev.struchkov.godfather.telegram.main.consumer.CallbackQueryConvert; @@ -10,7 +11,6 @@ import dev.struchkov.godfather.telegram.main.consumer.SubscribeConvert; import dev.struchkov.godfather.telegram.main.consumer.UnsubscribeConvert; import dev.struchkov.godfather.telegram.quarkus.context.service.EventDistributor; import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramConnect; -import io.smallrye.mutiny.Multi; import io.smallrye.mutiny.Uni; import org.jetbrains.annotations.NotNull; import org.telegram.telegrambots.meta.api.objects.CallbackQuery; @@ -22,11 +22,6 @@ import org.telegram.telegrambots.meta.api.objects.inlinequery.InlineQuery; import org.telegram.telegrambots.meta.api.objects.payments.PreCheckoutQuery; import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; - -import static dev.struchkov.haiti.utils.Checker.checkNotNull; /** * TODO: Добавить описание класса. @@ -35,10 +30,10 @@ import static dev.struchkov.haiti.utils.Checker.checkNotNull; */ public class EventDistributorService implements EventDistributor { - private final Map> eventHandlerMap; + private final EventDispatching eventDispatching; - public EventDistributorService(TelegramConnect telegramConnect, List eventProviders) { - this.eventHandlerMap = eventProviders.stream().collect(Collectors.groupingBy(EventHandler::getEventType)); + public EventDistributorService(TelegramConnect telegramConnect, EventDispatching eventDispatching) { + this.eventDispatching = eventDispatching; telegramConnect.initEventDistributor(this); } @@ -54,77 +49,33 @@ public class EventDistributorService implements EventDistributor { // запросы к боту из чатов: https://core.telegram.org/bots/inline if (update.hasInlineQuery()) { - final Optional> optHandlers = getHandler(inlineQuery.getClass().getSimpleName()); - if (optHandlers.isPresent()) { - return Multi.createFrom().iterable(optHandlers.get()) - .onItem().transformToUni( - eventHandler -> eventHandler.handle(inlineQuery) - ).concatenate().collect().asList().replaceWithVoid(); - } - return Uni.createFrom().voidItem(); + return Uni.createFrom().item(new EventContainer<>(InlineQuery.class, inlineQuery)); } if (update.hasPreCheckoutQuery()) { - final Optional> optHandlers = getHandler(preCheckoutQuery.getClass().getName()); - if (optHandlers.isPresent()) { - return Multi.createFrom().iterable(optHandlers.get()) - .onItem().transformToUni( - eventHandler -> eventHandler.handle(preCheckoutQuery) - ).concatenate().collect().asList().replaceWithVoid(); - } - return Uni.createFrom().voidItem(); + return Uni.createFrom().item(new EventContainer<>(PreCheckoutQuery.class, preCheckoutQuery)); } if (update.hasMessage()) { - final Optional> optHandlers = getHandler(Mail.class.getName()); - if (optHandlers.isPresent()) { - return Multi.createFrom().iterable(optHandlers.get()) - .onItem().transformToUni( - eventHandler -> eventHandler.handle(MessageMailConvert.apply(message)) - ).concatenate().collect().asList().replaceWithVoid(); - } - return Uni.createFrom().voidItem(); + return Uni.createFrom().item(new EventContainer<>(Mail.class, MessageMailConvert.apply(message))); } if (update.hasCallbackQuery()) { - final Optional> optHandlers = getHandler(Mail.class.getName()); - if (optHandlers.isPresent()) { - return Multi.createFrom().iterable(optHandlers.get()) - .onItem().transformToUni( - eventHandler -> eventHandler.handle(CallbackQueryConvert.apply(callbackQuery)) - ).concatenate().collect().asList().replaceWithVoid(); - } - return Uni.createFrom().voidItem(); + return Uni.createFrom().item(new EventContainer<>(Mail.class, CallbackQueryConvert.apply(callbackQuery))); } if (update.hasMyChatMember()) { final ChatMemberUpdated chatMember = update.getMyChatMember(); if ("kicked".equals(chatMember.getNewChatMember().getStatus())) { - - final Optional> optHandlers = getHandler(Unsubscribe.class.getName()); - if (optHandlers.isPresent()) { - return Multi.createFrom().iterable(optHandlers.get()) - .onItem().transformToUni( - eventHandler -> eventHandler.handle(UnsubscribeConvert.apply(chatMember)) - ).concatenate().collect().asList().replaceWithVoid(); - } - return Uni.createFrom().voidItem(); + return Uni.createFrom().item(new EventContainer<>(Unsubscribe.class, UnsubscribeConvert.apply(chatMember))); } if ("member".equals(chatMember.getNewChatMember().getStatus())) { - final Optional> optHandlers = getHandler(Subscribe.class.getName()); - if (optHandlers.isPresent()) { - return Multi.createFrom().iterable(optHandlers.get()) - .onItem().transformToUni( - eventHandler -> eventHandler.handle(SubscribeConvert.apply(chatMember)) - ).concatenate().collect().asList().replaceWithVoid(); - } - return Uni.createFrom().voidItem(); + return Uni.createFrom().item(new EventContainer<>(Subscribe.class, SubscribeConvert.apply(chatMember))); } } - - return Uni.createFrom().voidItem(); + return Uni.createFrom().nullItem(); } - ); + ).onItem().ifNotNull().transformToUni(eventDispatching::dispatch); } private boolean isEvent(Message message) { @@ -148,8 +99,4 @@ public class EventDistributorService implements EventDistributor { } } - private Optional> getHandler(String type) { - return Optional.ofNullable(eventHandlerMap.get(type)); - } - } diff --git a/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java b/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java index 487aba9..eb26e3f 100644 --- a/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java +++ b/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java @@ -1,8 +1,9 @@ package dev.struchkov.godfather.telegram.simple.consumer; +import dev.struchkov.godfather.main.domain.EventContainer; import dev.struchkov.godfather.main.domain.content.ChatMail; import dev.struchkov.godfather.main.domain.content.Mail; -import dev.struchkov.godfather.simple.context.service.EventHandler; +import dev.struchkov.godfather.simple.context.service.EventDispatching; import dev.struchkov.godfather.telegram.domain.event.Subscribe; import dev.struchkov.godfather.telegram.domain.event.Unsubscribe; import dev.struchkov.godfather.telegram.main.consumer.CallbackQueryConvert; @@ -18,13 +19,11 @@ import org.telegram.telegrambots.meta.api.objects.ChatMemberUpdated; import org.telegram.telegrambots.meta.api.objects.Message; import org.telegram.telegrambots.meta.api.objects.Update; import org.telegram.telegrambots.meta.api.objects.User; +import org.telegram.telegrambots.meta.api.objects.inlinequery.ChosenInlineQuery; import org.telegram.telegrambots.meta.api.objects.inlinequery.InlineQuery; import org.telegram.telegrambots.meta.api.objects.payments.PreCheckoutQuery; import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; import static dev.struchkov.haiti.utils.Checker.checkNotBlank; import static dev.struchkov.haiti.utils.Checker.checkNotNull; @@ -36,10 +35,10 @@ import static dev.struchkov.haiti.utils.Checker.checkNotNull; */ public class EventDistributorService implements EventDistributor { - private final Map> eventProviderMap; + private final EventDispatching eventDispatching; - public EventDistributorService(TelegramConnect telegramConnect, List eventProviders) { - this.eventProviderMap = eventProviders.stream().collect(Collectors.groupingBy(EventHandler::getEventType)); + public EventDistributorService(TelegramConnect telegramConnect, EventDispatching eventDispatching) { + this.eventDispatching = eventDispatching; telegramConnect.initEventDistributor(this); } @@ -51,12 +50,16 @@ public class EventDistributorService implements EventDistributor { final InlineQuery inlineQuery = update.getInlineQuery(); if (update.hasInlineQuery()) { - getHandler(inlineQuery.getClass().getSimpleName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(inlineQuery))); + eventDispatching.dispatch(new EventContainer<>(InlineQuery.class, inlineQuery)); return; } + if (update.hasChosenInlineQuery()) { + eventDispatching.dispatch(new EventContainer<>(ChosenInlineQuery.class, update.getChosenInlineQuery())); + } + if (update.hasPreCheckoutQuery()) { - getHandler(preCheckoutQuery.getClass().getSimpleName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(preCheckoutQuery))); + eventDispatching.dispatch(new EventContainer<>(PreCheckoutQuery.class, preCheckoutQuery)); return; } @@ -71,11 +74,13 @@ public class EventDistributorService implements EventDistributor { if (update.hasMyChatMember()) { final ChatMemberUpdated chatMember = update.getMyChatMember(); if ("kicked".equals(chatMember.getNewChatMember().getStatus())) { - getHandler(Unsubscribe.class.getSimpleName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(UnsubscribeConvert.apply(chatMember)))); + final Unsubscribe unsubscribe = UnsubscribeConvert.apply(chatMember); + eventDispatching.dispatch(new EventContainer<>(Unsubscribe.class, unsubscribe)); return; } if ("member".equals(chatMember.getNewChatMember().getStatus())) { - getHandler(Subscribe.class.getSimpleName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(SubscribeConvert.apply(chatMember)))); + final Subscribe subscribe = SubscribeConvert.apply(chatMember); + eventDispatching.dispatch(new EventContainer<>(Subscribe.class, subscribe)); return; } } @@ -84,7 +89,6 @@ public class EventDistributorService implements EventDistributor { private void processionCallback(CallbackQuery callbackQuery) { final Message message = callbackQuery.getMessage(); if (checkNotBlank(callbackQuery.getInlineMessageId())) { - return; } if (checkNotNull(message)) { @@ -93,7 +97,7 @@ public class EventDistributorService implements EventDistributor { } else { final Mail mail = CallbackQueryConvert.apply(callbackQuery); - getHandler(Mail.class.getSimpleName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(mail))); + eventDispatching.dispatch(new EventContainer<>(Mail.class, mail)); } } } @@ -102,10 +106,10 @@ public class EventDistributorService implements EventDistributor { final Long fromId = message.getChat().getId(); if (fromId < 0) { final ChatMail chatMail = MessageChatMailConvert.apply(message); - getHandler(ChatMail.class.getSimpleName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(chatMail))); + eventDispatching.dispatch(new EventContainer<>(ChatMail.class, chatMail)); } else { final Mail mail = MessageMailConvert.apply(message); - getHandler(Mail.class.getSimpleName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(mail))); + eventDispatching.dispatch(new EventContainer<>(Mail.class, mail)); } } @@ -130,8 +134,4 @@ public class EventDistributorService implements EventDistributor { } } - private Optional> getHandler(String type) { - return Optional.ofNullable(eventProviderMap.get(type)); - } - } diff --git a/telegram-context/telegram-context-main/pom.xml b/telegram-context/telegram-context-main/pom.xml index 16e53f0..a0d705d 100644 --- a/telegram-context/telegram-context-main/pom.xml +++ b/telegram-context/telegram-context-main/pom.xml @@ -22,7 +22,7 @@ dev.struchkov.godfather - bot-context-simple + bot-context-main diff --git a/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/service/TelegramSending.java b/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/service/TelegramSending.java index 12149c9..70bba98 100644 --- a/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/service/TelegramSending.java +++ b/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/service/TelegramSending.java @@ -10,4 +10,6 @@ public interface TelegramSending extends SendingService { Uni sendNotSave(@NotNull BoxAnswer boxAnswer); + Uni replaceInlineMessage(String inlineMessageId, BoxAnswer boxAnswer); + } diff --git a/telegram-context/telegram-context-simple/pom.xml b/telegram-context/telegram-context-simple/pom.xml index 55b99da..9d47754 100644 --- a/telegram-context/telegram-context-simple/pom.xml +++ b/telegram-context/telegram-context-simple/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 telegram-context @@ -17,12 +18,12 @@ - dev.struchkov.godfather.telegram - telegram-context-main + dev.struchkov.godfather + bot-context-simple dev.struchkov.godfather.telegram - telegram-domain-simple + telegram-context-main diff --git a/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/EventDistributor.java b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/EventDistributor.java index 38f42a8..9a272f0 100644 --- a/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/EventDistributor.java +++ b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/EventDistributor.java @@ -1,9 +1,8 @@ package dev.struchkov.godfather.telegram.simple.context.service; +import org.jetbrains.annotations.NotNull; import org.telegram.telegrambots.meta.api.objects.Update; -import javax.validation.constraints.NotNull; - public interface EventDistributor { void processing(@NotNull Update update); diff --git a/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramBot.java b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramBot.java index 1c2f77c..64b1b35 100644 --- a/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramBot.java +++ b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramBot.java @@ -1,9 +1,8 @@ package dev.struchkov.godfather.telegram.simple.context.service; +import org.jetbrains.annotations.NotNull; import org.telegram.telegrambots.meta.bots.AbsSender; -import javax.validation.constraints.NotNull; - /** * TODO: Добавить описание интерфейса. * diff --git a/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramSending.java b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramSending.java index 145f2b2..65c46f8 100644 --- a/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramSending.java +++ b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramSending.java @@ -3,12 +3,13 @@ package dev.struchkov.godfather.telegram.simple.context.service; import dev.struchkov.godfather.simple.context.service.SendingService; import dev.struchkov.godfather.simple.domain.BoxAnswer; import dev.struchkov.godfather.simple.domain.SentBox; -import org.jetbrains.annotations.NotNull; import java.util.Optional; public interface TelegramSending extends SendingService { - Optional sendNotSave(@NotNull BoxAnswer boxAnswer); + Optional sendNotSave(BoxAnswer boxAnswer); + + void replaceInlineMessage(String inlineMessageId, BoxAnswer boxAnswer); } diff --git a/telegram-core/telegram-core-quarkus/pom.xml b/telegram-core/telegram-core-quarkus/pom.xml index 62c6ff0..55adfb3 100644 --- a/telegram-core/telegram-core-quarkus/pom.xml +++ b/telegram-core/telegram-core-quarkus/pom.xml @@ -16,6 +16,10 @@ + + dev.struchkov.godfather + bot-core-quarkus + dev.struchkov.godfather.telegram telegram-context-quarkus @@ -25,10 +29,6 @@ dev.struchkov.godfather.telegram telegram-core-main - - dev.struchkov.godfather - bot-core-quarkus - \ No newline at end of file diff --git a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/handler/PreCheckoutQueryHandler.java b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/handler/PreCheckoutQueryHandler.java index d689e0a..17b4266 100644 --- a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/handler/PreCheckoutQueryHandler.java +++ b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/handler/PreCheckoutQueryHandler.java @@ -1,12 +1,12 @@ package dev.struchkov.godfather.telegram.quarkus.core.handler; +import dev.struchkov.godfather.main.domain.EventContainer; import dev.struchkov.godfather.quarkus.context.service.EventHandler; import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramConnect; import io.smallrye.mutiny.Uni; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.telegram.telegrambots.meta.api.methods.AnswerPreCheckoutQuery; -import org.telegram.telegrambots.meta.api.methods.AnswerShippingQuery; import org.telegram.telegrambots.meta.api.objects.payments.PreCheckoutQuery; import org.telegram.telegrambots.meta.exceptions.TelegramApiException; import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException; @@ -21,9 +21,10 @@ public class PreCheckoutQueryHandler implements EventHandler { private final TelegramConnect telegramConnect; @Override - public Uni handle(PreCheckoutQuery event) { + public Uni handle(EventContainer event) { + final PreCheckoutQuery preCheckoutQuery = event.getObject(); final AnswerPreCheckoutQuery answerPreCheckoutQuery = new AnswerPreCheckoutQuery(); - answerPreCheckoutQuery.setPreCheckoutQueryId(event.getId()); + answerPreCheckoutQuery.setPreCheckoutQueryId(preCheckoutQuery.getId()); answerPreCheckoutQuery.setOk(true); try { answerPreCheckoutQuery.validate(); @@ -45,8 +46,8 @@ public class PreCheckoutQueryHandler implements EventHandler { } @Override - public String getEventType() { - return PreCheckoutQuery.class.getName(); + public Class getEventClass() { + return PreCheckoutQuery.class; } } diff --git a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/handler/PreCheckoutQueryHandler.java b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/handler/PreCheckoutQueryHandler.java index f607183..63b9d7d 100644 --- a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/handler/PreCheckoutQueryHandler.java +++ b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/handler/PreCheckoutQueryHandler.java @@ -1,5 +1,6 @@ package dev.struchkov.godfather.telegram.simple.core.handler; +import dev.struchkov.godfather.main.domain.EventContainer; import dev.struchkov.godfather.simple.context.service.EventHandler; import dev.struchkov.godfather.telegram.simple.context.service.TelegramConnect; import lombok.RequiredArgsConstructor; @@ -15,9 +16,10 @@ public class PreCheckoutQueryHandler implements EventHandler { private final TelegramConnect telegramConnect; @Override - public void handle(PreCheckoutQuery event) { + public void handle(EventContainer event) { + final PreCheckoutQuery preCheckoutQuery = event.getObject(); final AnswerPreCheckoutQuery answerPreCheckoutQuery = new AnswerPreCheckoutQuery(); - answerPreCheckoutQuery.setPreCheckoutQueryId(event.getId()); + answerPreCheckoutQuery.setPreCheckoutQueryId(preCheckoutQuery.getId()); answerPreCheckoutQuery.setOk(true); try { answerPreCheckoutQuery.validate(); @@ -29,8 +31,8 @@ public class PreCheckoutQueryHandler implements EventHandler { } @Override - public String getEventType() { - return PreCheckoutQuery.class.getSimpleName(); + public Class getEventClass() { + return PreCheckoutQuery.class; } } diff --git a/telegram-domain/telegram-domain-main/pom.xml b/telegram-domain/telegram-domain-main/pom.xml index 48c4571..a8ba8f0 100644 --- a/telegram-domain/telegram-domain-main/pom.xml +++ b/telegram-domain/telegram-domain-main/pom.xml @@ -20,6 +20,10 @@ dev.struchkov.godfather bot-domain-main + + com.fasterxml.jackson.core + jackson-databind + \ No newline at end of file diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonClickAttachment.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonClickAttachment.java index ed840a3..ebff785 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonClickAttachment.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonClickAttachment.java @@ -1,6 +1,10 @@ package dev.struchkov.godfather.telegram.domain.attachment; import dev.struchkov.godfather.main.domain.content.Attachment; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import java.util.Collection; import java.util.HashMap; @@ -10,6 +14,8 @@ import java.util.Optional; import static dev.struchkov.haiti.context.exception.NotFoundException.notFoundException; import static dev.struchkov.haiti.utils.Inspector.isNotNull; +@Getter +@Setter public class ButtonClickAttachment extends Attachment { /** @@ -17,14 +23,10 @@ public class ButtonClickAttachment extends Attachment { */ private String messageId; private String rawCallBackData; - private final Map args = new HashMap<>(); + private Map args = new HashMap<>(); - public String getRawCallBackData() { - return rawCallBackData; - } - - public void setRawCallBackData(String rawCallBackData) { - this.rawCallBackData = rawCallBackData; + public ButtonClickAttachment() { + super(TelegramAttachmentType.BUTTON_CLICK.name()); } public void addClickArg(String type, String value) { @@ -46,40 +48,14 @@ public class ButtonClickAttachment extends Attachment { return args.values(); } - public String getMessageId() { - return messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public Map getArgs() { - return args; - } - - @Override - public String getType() { - return TelegramAttachmentType.BUTTON_CLICK.name(); - } - + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor public static class Arg { - private final String type; - private final String value; - - private Arg(String type, String value) { - this.type = type; - this.value = value; - } - - public String getType() { - return type; - } - - public String getValue() { - return value; - } + private String type; + private String value; } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/CommandAttachment.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/CommandAttachment.java index e7a9d95..d85a990 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/CommandAttachment.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/CommandAttachment.java @@ -1,11 +1,15 @@ package dev.struchkov.godfather.telegram.domain.attachment; import dev.struchkov.godfather.main.domain.content.Attachment; +import lombok.Getter; +import lombok.Setter; import java.util.Optional; import static dev.struchkov.haiti.utils.Checker.checkNotNull; +@Getter +@Setter public class CommandAttachment extends Attachment { private String value; @@ -13,34 +17,14 @@ public class CommandAttachment extends Attachment { private String arg; private String rawValue; - public void setValue(String value) { - this.value = value; - } - - public void setCommandType(String commandType) { - this.commandType = commandType; - } - - public void setArg(String arg) { - this.arg = arg; - } - - public void setRawValue(String rawValue) { - this.rawValue = rawValue; - } - - public String getValue() { - return value; + public CommandAttachment() { + super(TelegramAttachmentType.COMMAND.name()); } public Optional getArg() { return Optional.ofNullable(arg); } - public String getCommandType() { - return commandType; - } - public boolean isCommandType(String type) { if (checkNotNull(type)) { return type.equals(commandType); @@ -48,12 +32,4 @@ public class CommandAttachment extends Attachment { return false; } - public String getRawValue() { - return rawValue; - } - - @Override - public String getType() { - return TelegramAttachmentType.COMMAND.name(); - } } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ContactAttachment.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ContactAttachment.java index 2761a7a..f91764d 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ContactAttachment.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ContactAttachment.java @@ -1,7 +1,11 @@ package dev.struchkov.godfather.telegram.domain.attachment; import dev.struchkov.godfather.main.domain.content.Attachment; +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter public class ContactAttachment extends Attachment { private String phoneNumber; @@ -15,57 +19,8 @@ public class ContactAttachment extends Attachment { */ private boolean owner; - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public boolean isOwner() { - return owner; - } - - public void setOwner(boolean owner) { - this.owner = owner; - } - - public String getVCard() { - return vCard; - } - - public void setVCard(String vCard) { - this.vCard = vCard; - } - - @Override - public String getType() { - return TelegramAttachmentType.CONTACT.name(); + public ContactAttachment() { + super(TelegramAttachmentType.CONTACT.name()); } } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/DocumentAttachment.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/DocumentAttachment.java index e8ece15..ae76c22 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/DocumentAttachment.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/DocumentAttachment.java @@ -1,7 +1,11 @@ package dev.struchkov.godfather.telegram.domain.attachment; import dev.struchkov.godfather.main.domain.content.Attachment; +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter public class DocumentAttachment extends Attachment { private String fileId; @@ -9,41 +13,8 @@ public class DocumentAttachment extends Attachment { private String fileName; private String mimeType; - public String getFileId() { - return fileId; - } - - public void setFileId(String fileId) { - this.fileId = fileId; - } - - public Long getFileSize() { - return fileSize; - } - - public void setFileSize(Long fileSize) { - this.fileSize = fileSize; - } - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public String getMimeType() { - return mimeType; - } - - public void setMimeType(String mimeType) { - this.mimeType = mimeType; - } - - @Override - public String getType() { - return TelegramAttachmentType.DOCUMENT.name(); + public DocumentAttachment() { + super(TelegramAttachmentType.DOCUMENT.name()); } } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/LinkAttachment.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/LinkAttachment.java index e1c7788..8a4b0e7 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/LinkAttachment.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/LinkAttachment.java @@ -3,28 +3,24 @@ package dev.struchkov.godfather.telegram.domain.attachment; import dev.struchkov.godfather.main.domain.content.Attachment; import dev.struchkov.haiti.utils.Parser; import dev.struchkov.haiti.utils.container.CompositeUrl; +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter public class LinkAttachment extends Attachment { private String url; + public LinkAttachment() { + super(TelegramAttachmentType.LINK.name()); + } + public LinkAttachment(String url) { + super(TelegramAttachmentType.LINK.name()); this.url = url; } - public void setUrl(String url) { - this.url = url; - } - - public String getUrl() { - return url; - } - - @Override - public String getType() { - return TelegramAttachmentType.LINK.name(); - } - public CompositeUrl split() { return Parser.url(url); } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/Picture.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/Picture.java index 7fbeb15..c27e66c 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/Picture.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/Picture.java @@ -1,5 +1,10 @@ package dev.struchkov.godfather.telegram.domain.attachment; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter public class Picture { private String fileId; @@ -8,44 +13,4 @@ public class Picture { private Integer weight; private Integer height; - public String getFileId() { - return fileId; - } - - public void setFileId(String fileId) { - this.fileId = fileId; - } - - public String getFileUniqueId() { - return fileUniqueId; - } - - public void setFileUniqueId(String fileUniqueId) { - this.fileUniqueId = fileUniqueId; - } - - public Integer getFileSize() { - return fileSize; - } - - public void setFileSize(Integer fileSize) { - this.fileSize = fileSize; - } - - public Integer getWeight() { - return weight; - } - - public void setWeight(Integer weight) { - this.weight = weight; - } - - public Integer getHeight() { - return height; - } - - public void setHeight(Integer height) { - this.height = height; - } - } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/PictureGroupAttachment.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/PictureGroupAttachment.java index e9f1d51..5b205ad 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/PictureGroupAttachment.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/PictureGroupAttachment.java @@ -1,21 +1,21 @@ package dev.struchkov.godfather.telegram.domain.attachment; import dev.struchkov.godfather.main.domain.content.Attachment; +import lombok.Getter; +import lombok.Setter; import java.util.Comparator; import java.util.List; import java.util.Optional; +@Getter +@Setter public class PictureGroupAttachment extends Attachment { private List pictures; - public void setPictureSizes(List pictures) { - this.pictures = pictures; - } - - public List getPictureSizes() { - return pictures; + public PictureGroupAttachment() { + super(TelegramAttachmentType.PICTURE.name()); } public Optional getLargePicture() { @@ -23,9 +23,4 @@ public class PictureGroupAttachment extends Attachment { .max(Comparator.comparingInt(Picture::getFileSize)); } - @Override - public String getType() { - return TelegramAttachmentType.PICTURE.name(); - } - } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramAttachmentDeserializer.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramAttachmentDeserializer.java new file mode 100644 index 0000000..fa750d8 --- /dev/null +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramAttachmentDeserializer.java @@ -0,0 +1,45 @@ +package dev.struchkov.godfather.telegram.domain.deser; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import dev.struchkov.godfather.main.domain.content.Attachment; +import dev.struchkov.godfather.telegram.domain.attachment.ButtonClickAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.CommandAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.ContactAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.DocumentAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.TelegramAttachmentType; +import dev.struchkov.haiti.utils.ObjectUtils; + +import java.io.IOException; + +public class TelegramAttachmentDeserializer extends StdDeserializer { + + public TelegramAttachmentDeserializer() { + this(null); + } + + public TelegramAttachmentDeserializer(Class vc) { + super(vc); + } + + @Override + public Attachment deserialize(JsonParser parser, DeserializationContext context) throws IOException { + final JsonNode node = parser.getCodec().readTree(parser); + final String typeAttachmentString = node.get("type").asText(); + final TelegramAttachmentType type = ObjectUtils.createEnum(typeAttachmentString, TelegramAttachmentType.class) + .orElseThrow(() -> new IllegalArgumentException("Неизвестный тип вложения: " + typeAttachmentString)); + return switch (type) { + case BUTTON_CLICK -> parser.getCodec().treeToValue(node, ButtonClickAttachment.class); + case DOCUMENT -> parser.getCodec().treeToValue(node, DocumentAttachment.class); + case CONTACT -> parser.getCodec().treeToValue(node, ContactAttachment.class); + case PICTURE -> parser.getCodec().treeToValue(node, PictureGroupAttachment.class); + case LINK -> parser.getCodec().treeToValue(node, LinkAttachment.class); + case COMMAND -> parser.getCodec().treeToValue(node, CommandAttachment.class); + }; + } + +} diff --git a/telegram-sender/telegram-sender-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/TelegramSender.java b/telegram-sender/telegram-sender-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/TelegramSender.java index e88d5cd..5ff907b 100644 --- a/telegram-sender/telegram-sender-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/TelegramSender.java +++ b/telegram-sender/telegram-sender-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/TelegramSender.java @@ -93,6 +93,30 @@ public class TelegramSender implements TelegramSending { return sendBoxAnswer(boxAnswer, false); } + @Override + public Uni replaceInlineMessage(String inlineMessageId, BoxAnswer boxAnswer) { + return Uni.createFrom().voidItem() + .onItem().transformToUni( + v -> { + final EditMessageText editMessageText = new EditMessageText(); + editMessageText.setInlineMessageId(inlineMessageId); + editMessageText.enableMarkdown(true); + editMessageText.setText(boxAnswer.getMessage()); + editMessageText.setReplyMarkup(convertInlineKeyBoard((InlineKeyBoard) boxAnswer.getKeyBoard())); + + return Uni.createFrom().completionStage(executeAsync(editMessageText)) + .onFailure(TelegramApiRequestException.class).call( + ex -> { + final TelegramApiRequestException exception = (TelegramApiRequestException) ex; + final String apiResponse = exception.getApiResponse(); + log.error(apiResponse, exception); + return Uni.createFrom().voidItem(); + } + ).replaceWithVoid(); + } + ); + } + private Uni sendBoxAnswer(@NotNull BoxAnswer boxAnswer, boolean saveMessageId) { return Uni.createFrom().voidItem() .onItem().transformToUni( diff --git a/telegram-sender/telegram-sender-simple/src/main/java/dev/struchkov/godfather/telegram/simple/sender/TelegramSender.java b/telegram-sender/telegram-sender-simple/src/main/java/dev/struchkov/godfather/telegram/simple/sender/TelegramSender.java index 5a34389..75c2c50 100644 --- a/telegram-sender/telegram-sender-simple/src/main/java/dev/struchkov/godfather/telegram/simple/sender/TelegramSender.java +++ b/telegram-sender/telegram-sender-simple/src/main/java/dev/struchkov/godfather/telegram/simple/sender/TelegramSender.java @@ -91,6 +91,22 @@ public class TelegramSender implements TelegramSending { return sendBoxAnswer(boxAnswer, false); } + @Override + public void replaceInlineMessage(String inlineMessageId, BoxAnswer boxAnswer) { + final EditMessageText editMessageText = new EditMessageText(); + editMessageText.setInlineMessageId(inlineMessageId); + editMessageText.enableMarkdown(true); + editMessageText.setText(boxAnswer.getMessage()); + editMessageText.setReplyMarkup(convertInlineKeyBoard((InlineKeyBoard) boxAnswer.getKeyBoard())); + try { + absSender.execute(editMessageText); + } catch (TelegramApiRequestException e) { + log.error(e.getApiResponse()); + } catch (TelegramApiException e) { + log.error(e.getMessage(), e); + } + } + private Optional sendBoxAnswer(BoxAnswer boxAnswer, boolean saveMessageId) { final String recipientTelegramId = boxAnswer.getRecipientPersonId(); isNotNull(recipientTelegramId);