diff --git a/pom.xml b/pom.xml
index a28fe53..40ad1e8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
dev.struchkov.godfather.telegram
telegram-bot
- 0.0.26
+ 0.0.30
pom
@@ -38,10 +38,10 @@
UTF-8
UTF-8
- 0.0.22
+ 0.0.24
6.1.0
- 1.3.0
+ 1.4.0
3.10.1
1.6.13
@@ -68,6 +68,28 @@
${project.version}
+
+ dev.struchkov.godfather.telegram
+ telegram-consumer
+ ${project.version}
+
+
+
+ dev.struchkov.godfather.telegram
+ telegram-sender-core
+ ${project.version}
+
+
+ dev.struchkov.godfather.telegram
+ telegram-quarkus-reactive-sender
+ ${project.version}
+
+
+ dev.struchkov.godfather.telegram
+ telegram-simple-sender
+ ${project.version}
+
+
dev.struchkov.godfather
bot-context
diff --git a/telegram-consumer/pom.xml b/telegram-consumer/pom.xml
index 83126cf..39207ec 100644
--- a/telegram-consumer/pom.xml
+++ b/telegram-consumer/pom.xml
@@ -5,7 +5,7 @@
telegram-bot
dev.struchkov.godfather.telegram
- 0.0.26
+ 0.0.30
4.0.0
diff --git a/telegram-consumer/src/main/java/dev/struchkov/godfather/telegram/listen/EventDistributorService.java b/telegram-consumer/src/main/java/dev/struchkov/godfather/telegram/listen/EventDistributorService.java
index 4815850..4662299 100644
--- a/telegram-consumer/src/main/java/dev/struchkov/godfather/telegram/listen/EventDistributorService.java
+++ b/telegram-consumer/src/main/java/dev/struchkov/godfather/telegram/listen/EventDistributorService.java
@@ -5,18 +5,15 @@ import dev.struchkov.godfather.context.service.EventHandler;
import dev.struchkov.godfather.telegram.TelegramConnectBot;
import dev.struchkov.godfather.telegram.context.EventDistributor;
import dev.struchkov.godfather.telegram.convert.CallbackQueryConvert;
-import dev.struchkov.godfather.telegram.convert.CommandConvert;
import dev.struchkov.godfather.telegram.convert.MessageMailConvert;
import dev.struchkov.godfather.telegram.convert.SubscribeConvert;
import dev.struchkov.godfather.telegram.convert.UnsubscribeConvert;
-import dev.struchkov.godfather.telegram.domain.event.Command;
import dev.struchkov.godfather.telegram.domain.event.Subscribe;
import dev.struchkov.godfather.telegram.domain.event.Unsubscribe;
import org.jetbrains.annotations.NotNull;
import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
import org.telegram.telegrambots.meta.api.objects.ChatMemberUpdated;
import org.telegram.telegrambots.meta.api.objects.Message;
-import org.telegram.telegrambots.meta.api.objects.MessageEntity;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.api.objects.User;
@@ -25,8 +22,6 @@ import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
-import static dev.struchkov.haiti.utils.Checker.checkNotEmpty;
-
/**
* TODO: Добавить описание класса.
*
@@ -46,15 +41,9 @@ public class EventDistributorService implements EventDistributor {
if (update.getMessage() != null) {
final Message message = update.getMessage();
if (!isEvent(message)) {
- if (isCommand(message)) {
- getHandler(Command.TYPE)
- .ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(CommandConvert.apply(message))));
- return;
- } else {
- getHandler(Mail.TYPE)
- .ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(MessageMailConvert.apply(message))));
- return;
- }
+ getHandler(Mail.TYPE)
+ .ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(MessageMailConvert.apply(message))));
+ return;
}
}
if (update.getCallbackQuery() != null) {
@@ -99,14 +88,6 @@ public class EventDistributorService implements EventDistributor {
}
}
- private boolean isCommand(Message message) {
- final List entities = message.getEntities();
- if (checkNotEmpty(entities)) {
- return "bot_command".equals(entities.get(0).getType());
- }
- return false;
- }
-
private Optional> getHandler(String type) {
return Optional.ofNullable(eventProviderMap.get(type));
}
diff --git a/telegram-context/pom.xml b/telegram-context/pom.xml
index d4e3974..12b0c84 100644
--- a/telegram-context/pom.xml
+++ b/telegram-context/pom.xml
@@ -5,7 +5,7 @@
telegram-bot
dev.struchkov.godfather.telegram
- 0.0.26
+ 0.0.30
4.0.0
diff --git a/telegram-core/pom.xml b/telegram-core/pom.xml
index ae512a3..2ac5087 100644
--- a/telegram-core/pom.xml
+++ b/telegram-core/pom.xml
@@ -5,7 +5,7 @@
dev.struchkov.godfather.telegram
telegram-bot
- 0.0.26
+ 0.0.30
telegram-core
diff --git a/telegram-core/src/main/java/dev/struchkov/godfather/telegram/convert/CommandConvert.java b/telegram-core/src/main/java/dev/struchkov/godfather/telegram/convert/CommandConvert.java
deleted file mode 100644
index e3835bb..0000000
--- a/telegram-core/src/main/java/dev/struchkov/godfather/telegram/convert/CommandConvert.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package dev.struchkov.godfather.telegram.convert;
-
-import dev.struchkov.godfather.telegram.domain.event.Command;
-import dev.struchkov.haiti.utils.Strings;
-import org.telegram.telegrambots.meta.api.objects.Chat;
-import org.telegram.telegrambots.meta.api.objects.Message;
-import org.telegram.telegrambots.meta.api.objects.MessageEntity;
-
-import java.util.List;
-
-import static dev.struchkov.haiti.context.exception.ConvertException.convertException;
-import static dev.struchkov.haiti.utils.Checker.checkNotEmpty;
-import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
-import static dev.struchkov.haiti.utils.Inspector.isNotEmpty;
-import static dev.struchkov.haiti.utils.Inspector.isTrue;
-
-public class CommandConvert {
-
- private CommandConvert() {
- utilityClass();
- }
-
- public static Command apply(Message message) {
- final List entities = message.getEntities();
- isNotEmpty(entities, convertException("Ошибка преобразования сообщения в команду. В сообщении не обнаружена команда."));
-
- final MessageEntity messageEntity = entities.get(0);
- isTrue("bot_command".equals(messageEntity.getType()), convertException("Ошибка преобразования сообщения в команду. В сообщении не обнаружена команда."));
-
- final String commandValue = messageEntity.getText();
- String commandArg = message.getText().replace(commandValue, "");
- if (checkNotEmpty(commandArg)) {
- commandArg = commandArg.substring(1);
- }
-
- final Command command = new Command();
- command.setValue(commandValue);
- command.setCommandType(commandValue.replace("/", ""));
- command.setArg(Strings.EMPTY.equals(commandArg) ? null : commandArg);
- command.setRawValue(message.getText());
-
- final Chat chat = message.getChat();
-
- command.setFirstName(chat.getFirstName());
- command.setLastName(chat.getLastName());
- command.setPersonId(chat.getId());
- return command;
- }
-
-}
diff --git a/telegram-core/src/main/java/dev/struchkov/godfather/telegram/convert/MessageMailConvert.java b/telegram-core/src/main/java/dev/struchkov/godfather/telegram/convert/MessageMailConvert.java
index 6d1e71d..c648303 100644
--- a/telegram-core/src/main/java/dev/struchkov/godfather/telegram/convert/MessageMailConvert.java
+++ b/telegram-core/src/main/java/dev/struchkov/godfather/telegram/convert/MessageMailConvert.java
@@ -2,11 +2,13 @@ package dev.struchkov.godfather.telegram.convert;
import dev.struchkov.godfather.context.domain.content.Mail;
import dev.struchkov.godfather.context.domain.content.attachment.Attachment;
+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.Picture;
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
+import dev.struchkov.haiti.utils.Strings;
import org.telegram.telegrambots.meta.api.objects.Contact;
import org.telegram.telegrambots.meta.api.objects.Document;
import org.telegram.telegrambots.meta.api.objects.Message;
@@ -49,7 +51,7 @@ public final class MessageMailConvert {
final List entities = message.getEntities();
if (entities != null) {
- mail.addAttachments(convertAttachments(entities));
+ mail.addAttachments(convertAttachments(message));
}
if (message.getReplyToMessage() != null) {
@@ -111,10 +113,11 @@ public final class MessageMailConvert {
return Optional.empty();
}
- private static List convertAttachments(List entities) {
+ private static List convertAttachments(Message message) {
+ final List entities = message.getEntities();
if (checkNotEmpty(entities)) {
return entities.stream()
- .map(MessageMailConvert::convertEntity)
+ .map(entity -> convertEntity(message, entity))
.filter(Optional::isPresent)
.map(Optional::get)
.toList();
@@ -122,11 +125,24 @@ public final class MessageMailConvert {
return Collections.emptyList();
}
- private static Optional convertEntity(MessageEntity entity) {
+ private static Optional convertEntity(Message message, MessageEntity entity) {
switch (entity.getType()) {
case "url" -> {
return Optional.of(new LinkAttachment(entity.getText()));
}
+ case "bot_command" -> {
+ final String commandValue = entity.getText();
+ String commandArg = message.getText().replace(commandValue, "");
+ if (checkNotEmpty(commandArg)) {
+ commandArg = commandArg.substring(1);
+ }
+ final CommandAttachment commandAttachment = new CommandAttachment();
+ commandAttachment.setValue(commandValue);
+ commandAttachment.setCommandType(commandValue.replace("/", ""));
+ commandAttachment.setArg(Strings.EMPTY.equals(commandArg) ? null : commandArg);
+ commandAttachment.setRawValue(message.getText());
+ return Optional.of(commandAttachment);
+ }
}
return Optional.empty();
}
diff --git a/telegram-core/src/main/java/dev/struchkov/godfather/telegram/utils/Attachments.java b/telegram-core/src/main/java/dev/struchkov/godfather/telegram/utils/Attachments.java
index 7bc161b..55a75d9 100644
--- a/telegram-core/src/main/java/dev/struchkov/godfather/telegram/utils/Attachments.java
+++ b/telegram-core/src/main/java/dev/struchkov/godfather/telegram/utils/Attachments.java
@@ -1,6 +1,7 @@
package dev.struchkov.godfather.telegram.utils;
import dev.struchkov.godfather.context.domain.content.attachment.Attachment;
+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;
@@ -89,6 +90,17 @@ public final class Attachments {
return Optional.empty();
}
+ public static Optional findFirstCommand(Collection attachments) {
+ if (checkNotEmpty(attachments)) {
+ for (Attachment attachment : attachments) {
+ if (isCommand(attachment)) {
+ return Optional.of((CommandAttachment) attachment);
+ }
+ }
+ }
+ return Optional.empty();
+ }
+
public static boolean hasDocument(Collection attachments) {
isNotNull(attachments);
for (Attachment attachment : attachments) {
@@ -99,6 +111,11 @@ public final class Attachments {
return false;
}
+ public static boolean isCommand(Attachment attachment) {
+ isNotNull(attachment);
+ return TelegramAttachmentType.COMMAND.name().equals(attachment.getType());
+ }
+
public static boolean isDocument(Attachment attachment) {
isNotNull(attachment);
return TelegramAttachmentType.DOCUMENT.name().equals(attachment.getType());
diff --git a/telegram-domain/pom.xml b/telegram-domain/pom.xml
index 72c9025..08a9d4d 100644
--- a/telegram-domain/pom.xml
+++ b/telegram-domain/pom.xml
@@ -5,7 +5,7 @@
telegram-bot
dev.struchkov.godfather.telegram
- 0.0.26
+ 0.0.30
4.0.0
diff --git a/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/CommandAttachment.java b/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/CommandAttachment.java
new file mode 100644
index 0000000..d7aa366
--- /dev/null
+++ b/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/CommandAttachment.java
@@ -0,0 +1,50 @@
+package dev.struchkov.godfather.telegram.domain.attachment;
+
+import dev.struchkov.godfather.context.domain.content.attachment.Attachment;
+
+import java.util.Optional;
+
+public class CommandAttachment extends Attachment {
+
+ private String value;
+ private String commandType;
+ 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 Optional getArg() {
+ return Optional.ofNullable(arg);
+ }
+
+ public String getCommandType() {
+ return commandType;
+ }
+
+ public String getRawValue() {
+ return rawValue;
+ }
+
+ @Override
+ public String getType() {
+ return TelegramAttachmentType.COMMAND.name();
+ }
+}
diff --git a/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/TelegramAttachmentType.java b/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/TelegramAttachmentType.java
index 39e1784..4a43aac 100644
--- a/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/TelegramAttachmentType.java
+++ b/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/TelegramAttachmentType.java
@@ -5,6 +5,7 @@ public enum TelegramAttachmentType {
DOCUMENT,
CONTACT,
PICTURE,
- LINK
+ LINK,
+ COMMAND
}
diff --git a/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/event/Command.java b/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/event/Command.java
deleted file mode 100644
index 254909f..0000000
--- a/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/event/Command.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package dev.struchkov.godfather.telegram.domain.event;
-
-import dev.struchkov.godfather.context.domain.event.Event;
-
-import java.util.Optional;
-
-public class Command implements Event {
-
- public static final String TYPE = "CMD";
-
- private String value;
- private String commandType;
- private String arg;
- private String rawValue;
-
- private String firstName;
- private String lastName;
- private Long personId;
-
- 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 void setFirstName(String firstName) {
- this.firstName = firstName;
- }
-
- public void setLastName(String lastName) {
- this.lastName = lastName;
- }
-
- public void setPersonId(Long personId) {
- this.personId = personId;
- }
-
- public String getValue() {
- return value;
- }
-
- public Optional getArg() {
- return Optional.ofNullable(arg);
- }
-
- public String getCommandType() {
- return commandType;
- }
-
- public String getRawValue() {
- return rawValue;
- }
-
- public String getFirstName() {
- return firstName;
- }
-
- public String getLastName() {
- return lastName;
- }
-
- public Long getPersonId() {
- return personId;
- }
-
- @Override
- public String getEventType() {
- return TYPE;
- }
-}
diff --git a/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java b/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java
index 6657ef2..b665333 100644
--- a/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java
+++ b/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java
@@ -1,5 +1,6 @@
package dev.struchkov.godfather.telegram.domain.keyboard;
+import dev.struchkov.godfather.context.domain.keyboard.KeyBoardButton;
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardLine;
import dev.struchkov.godfather.context.domain.keyboard.simple.SimpleKeyBoard;
@@ -7,6 +8,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import static dev.struchkov.godfather.context.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine;
+
public class MarkupKeyBoard extends SimpleKeyBoard {
public static final String TYPE = "MARKUP";
@@ -34,6 +37,22 @@ public class MarkupKeyBoard extends SimpleKeyBoard {
inputFieldPlaceholder = builder.inputFieldPlaceholder;
}
+ public static MarkupKeyBoard markupKeyBoard(KeyBoardLine... lines) {
+ final Builder builder = new Builder();
+ for (KeyBoardLine line : lines) {
+ builder.line(line);
+ }
+ return builder.build();
+ }
+
+ public static MarkupKeyBoard markupKeyBoard(KeyBoardButton... buttons) {
+ final Builder builder = new Builder();
+ for (KeyBoardButton button : buttons) {
+ builder.line(simpleLine(button));
+ }
+ return builder.build();
+ }
+
public static Builder markupBuilder() {
return new Builder();
}
diff --git a/telegram-sender/pom.xml b/telegram-sender/pom.xml
index 2d73a42..e5684a8 100644
--- a/telegram-sender/pom.xml
+++ b/telegram-sender/pom.xml
@@ -5,41 +5,21 @@
dev.struchkov.godfather.telegram
telegram-bot
- 0.0.26
+ 0.0.30
4.0.0
telegram-sender
+ pom
+
+ telegram-sender-core
+ telegram-quarkus-reactive-sender
+ telegram-simple-sender
+
17
17
-
-
- dev.struchkov.godfather.telegram
- telegram-domain
-
-
- dev.struchkov.godfather.telegram
- telegram-core
-
-
-
- dev.struchkov.godfather
- bot-context
-
-
-
- dev.struchkov.haiti
- haiti-utils
-
-
-
- org.telegram
- telegrambots
-
-
-
\ No newline at end of file
diff --git a/telegram-sender/telegram-quarkus-reactive-sender/pom.xml b/telegram-sender/telegram-quarkus-reactive-sender/pom.xml
new file mode 100644
index 0000000..be5770e
--- /dev/null
+++ b/telegram-sender/telegram-quarkus-reactive-sender/pom.xml
@@ -0,0 +1,37 @@
+
+
+
+ dev.struchkov.godfather.telegram
+ telegram-sender
+ 0.0.30
+
+ 4.0.0
+
+ telegram-quarkus-reactive-sender
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ dev.struchkov.godfather.telegram
+ telegram-sender-core
+
+
+ dev.struchkov.godfather.telegram
+ telegram-context
+
+
+
+ io.smallrye.reactive
+ smallrye-mutiny-vertx-core
+ 2.24.1
+
+
+
+
\ No newline at end of file
diff --git a/telegram-sender/src/main/java/dev/struchkov/godfather/telegram/service/SendPreProcessing.java b/telegram-sender/telegram-quarkus-reactive-sender/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/SendPreProcessing.java
similarity index 78%
rename from telegram-sender/src/main/java/dev/struchkov/godfather/telegram/service/SendPreProcessing.java
rename to telegram-sender/telegram-quarkus-reactive-sender/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/SendPreProcessing.java
index 1406c1f..c034feb 100644
--- a/telegram-sender/src/main/java/dev/struchkov/godfather/telegram/service/SendPreProcessing.java
+++ b/telegram-sender/telegram-quarkus-reactive-sender/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/SendPreProcessing.java
@@ -1,4 +1,4 @@
-package dev.struchkov.godfather.telegram.service;
+package dev.struchkov.godfather.telegram.quarkus.sender;
/**
* // TODO: 18.09.2020 Добавить описание.
diff --git a/telegram-sender/telegram-quarkus-reactive-sender/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/SenderStorageService.java b/telegram-sender/telegram-quarkus-reactive-sender/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/SenderStorageService.java
new file mode 100644
index 0000000..31dcd54
--- /dev/null
+++ b/telegram-sender/telegram-quarkus-reactive-sender/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/SenderStorageService.java
@@ -0,0 +1,13 @@
+package dev.struchkov.godfather.telegram.quarkus.sender;
+
+import io.smallrye.mutiny.Uni;
+
+public interface SenderStorageService {
+
+ Uni getLastSendMessage(Long telegramId);
+
+ Uni saveLastSendMessage(Long telegramId, Integer messageId);
+
+ Uni removeLastSendMessage(Long telegramId);
+
+}
diff --git a/telegram-sender/telegram-quarkus-reactive-sender/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/TelegramSender.java b/telegram-sender/telegram-quarkus-reactive-sender/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/TelegramSender.java
new file mode 100644
index 0000000..bf416a3
--- /dev/null
+++ b/telegram-sender/telegram-quarkus-reactive-sender/src/main/java/dev/struchkov/godfather/telegram/quarkus/sender/TelegramSender.java
@@ -0,0 +1,129 @@
+package dev.struchkov.godfather.telegram.quarkus.sender;
+
+import dev.struchkov.godfather.context.domain.BoxAnswer;
+import dev.struchkov.godfather.telegram.context.TelegramConnect;
+import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
+import dev.struchkov.godfather.telegram.sender.util.KeyBoardConvert;
+import io.smallrye.mutiny.Uni;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
+import org.telegram.telegrambots.meta.api.methods.updatingmessages.EditMessageText;
+import org.telegram.telegrambots.meta.api.objects.Message;
+import org.telegram.telegrambots.meta.bots.AbsSender;
+import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
+import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
+
+import static dev.struchkov.godfather.telegram.sender.util.KeyBoardConvert.convertInlineKeyBoard;
+import static dev.struchkov.haiti.utils.Checker.checkNotNull;
+import static dev.struchkov.haiti.utils.Inspector.isNotNull;
+
+public class TelegramSender {
+
+ private static final Logger log = LoggerFactory.getLogger(TelegramSender.class);
+
+ private static final String ERROR_REPLACE_MESSAGE = "Bad Request: message to edit not found";
+
+ private final AbsSender absSender;
+
+ private SendPreProcessing sendPreProcessing;
+ private SenderStorageService senderStorageService;
+
+ public TelegramSender(TelegramConnect telegramConnect) {
+ this.absSender = telegramConnect.getAbsSender();
+ }
+
+ public TelegramSender(TelegramConnect telegramConnect, SenderStorageService senderStorageService) {
+ this.absSender = telegramConnect.getAbsSender();
+ this.senderStorageService = senderStorageService;
+ }
+
+ public void setSendPreProcessing(SendPreProcessing sendPreProcessing) {
+ this.sendPreProcessing = sendPreProcessing;
+ }
+
+ public void setSenderRepository(SenderStorageService senderStorageService) {
+ this.senderStorageService = senderStorageService;
+ }
+
+ public Uni send(@NotNull Long telegramId, @NotNull BoxAnswer boxAnswer) {
+ return sendBoxAnswer(telegramId, boxAnswer, true);
+ }
+
+ public Uni sendNotSave(@NotNull Long telegramId, @NotNull BoxAnswer boxAnswer) {
+ return sendBoxAnswer(telegramId, boxAnswer, false);
+ }
+
+ private Uni sendBoxAnswer(@NotNull Long telegramId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) {
+ isNotNull(telegramId, boxAnswer);
+
+ if (boxAnswer.isReplace() && checkNotNull(senderStorageService)) {
+ return senderStorageService.getLastSendMessage(telegramId)
+ .onItem().transformToUni(
+ lastId -> {
+ if (checkNotNull(lastId)) {
+ return replaceMessage(telegramId, lastId, boxAnswer);
+ } else {
+ return sendMessage(telegramId, boxAnswer, saveMessageId);
+ }
+ }
+ );
+ } else {
+ return sendMessage(telegramId, boxAnswer, saveMessageId);
+ }
+ }
+
+ private Uni replaceMessage(@NotNull Long telegramId, @NotNull Integer lastMessageId, @NotNull BoxAnswer boxAnswer) {
+ return Uni.createFrom().voidItem()
+ .onItem().transformToUni(
+ v -> {
+ final EditMessageText editMessageText = new EditMessageText();
+ editMessageText.setChatId(String.valueOf(telegramId));
+ editMessageText.setMessageId(lastMessageId);
+ editMessageText.enableMarkdown(true);
+ editMessageText.setText(boxAnswer.getMessage());
+ editMessageText.setReplyMarkup(convertInlineKeyBoard((InlineKeyBoard) boxAnswer.getKeyBoard()));
+ try {
+ absSender.execute(editMessageText);
+ } catch (TelegramApiException e) {
+ log.error(e.getMessage());
+ }
+ return Uni.createFrom().voidItem();
+ }
+ );
+ }
+
+ private Uni sendMessage(@NotNull Long telegramId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) {
+ return Uni.createFrom().voidItem()
+ .onItem().transformToUni(
+ v -> {
+ final SendMessage sendMessage = new SendMessage();
+ sendMessage.enableMarkdown(true);
+ sendMessage.setChatId(String.valueOf(telegramId));
+ sendMessage.setText(
+ sendPreProcessing != null
+ ? sendPreProcessing.pretreatment(boxAnswer.getMessage())
+ : boxAnswer.getMessage()
+ );
+ sendMessage.setReplyMarkup(KeyBoardConvert.convertKeyBoard(boxAnswer.getKeyBoard()));
+
+ try {
+ final Message execute = absSender.execute(sendMessage);
+ if (checkNotNull(senderStorageService) && saveMessageId) {
+ return senderStorageService.saveLastSendMessage(telegramId, execute.getMessageId());
+ }
+ } catch (TelegramApiRequestException e) {
+ log.error(e.getApiResponse());
+ if (ERROR_REPLACE_MESSAGE.equals(e.getApiResponse())) {
+ return sendMessage(telegramId, boxAnswer, saveMessageId);
+ }
+ } catch (TelegramApiException e) {
+ log.error(e.getMessage());
+ }
+ return Uni.createFrom().voidItem();
+ }
+ );
+ }
+
+}
diff --git a/telegram-sender/telegram-sender-core/pom.xml b/telegram-sender/telegram-sender-core/pom.xml
new file mode 100644
index 0000000..0d98eef
--- /dev/null
+++ b/telegram-sender/telegram-sender-core/pom.xml
@@ -0,0 +1,32 @@
+
+
+
+ dev.struchkov.godfather.telegram
+ telegram-sender
+ 0.0.30
+
+ 4.0.0
+
+ telegram-sender-core
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ dev.struchkov.godfather.telegram
+ telegram-domain
+
+
+
+ org.telegram
+ telegrambots
+
+
+
+
\ No newline at end of file
diff --git a/telegram-sender/src/main/java/dev/struchkov/godfather/telegram/utils/KeyBoardConvert.java b/telegram-sender/telegram-sender-core/src/main/java/dev/struchkov/godfather/telegram/sender/util/KeyBoardConvert.java
similarity index 95%
rename from telegram-sender/src/main/java/dev/struchkov/godfather/telegram/utils/KeyBoardConvert.java
rename to telegram-sender/telegram-sender-core/src/main/java/dev/struchkov/godfather/telegram/sender/util/KeyBoardConvert.java
index dfd0441..88c97e9 100644
--- a/telegram-sender/src/main/java/dev/struchkov/godfather/telegram/utils/KeyBoardConvert.java
+++ b/telegram-sender/telegram-sender-core/src/main/java/dev/struchkov/godfather/telegram/sender/util/KeyBoardConvert.java
@@ -1,4 +1,4 @@
-package dev.struchkov.godfather.telegram.utils;
+package dev.struchkov.godfather.telegram.sender.util;
import dev.struchkov.godfather.context.domain.keyboard.KeyBoard;
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardButton;
@@ -24,9 +24,6 @@ import org.telegram.telegrambots.meta.api.objects.webapp.WebAppInfo;
import java.util.List;
-import static dev.struchkov.haiti.context.exception.ConvertException.convertException;
-import static dev.struchkov.haiti.utils.Inspector.isNull;
-
public final class KeyBoardConvert {
private KeyBoardConvert() {
@@ -133,7 +130,7 @@ public final class KeyBoardConvert {
case SimpleButton.TYPE -> {
final SimpleButton simpleButton = (SimpleButton) keyBoardButton;
button.setText(simpleButton.getLabel());
- isNull(simpleButton.getCallbackData(), convertException("CallbackData поддерживает только Inline клавитаура"));
+ Inspector.isNull(simpleButton.getCallbackData(), ConvertException.convertException("CallbackData поддерживает только Inline клавитаура"));
}
case WebAppButton.TYPE -> {
final WebAppButton webAppButton = (WebAppButton) keyBoardButton;
diff --git a/telegram-sender/telegram-simple-sender/pom.xml b/telegram-sender/telegram-simple-sender/pom.xml
new file mode 100644
index 0000000..3e3de4d
--- /dev/null
+++ b/telegram-sender/telegram-simple-sender/pom.xml
@@ -0,0 +1,38 @@
+
+
+
+ dev.struchkov.godfather.telegram
+ telegram-sender
+ 0.0.30
+
+ 4.0.0
+
+ telegram-simple-sender
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ dev.struchkov.godfather.telegram
+ telegram-sender-core
+
+
+
+ dev.struchkov.godfather.telegram
+ telegram-core
+
+
+
+ dev.struchkov.godfather
+ bot-context
+
+
+
+
+
\ No newline at end of file
diff --git a/telegram-sender/telegram-simple-sender/src/main/java/dev/struchkov/godfather/telegram/sender/service/SendPreProcessing.java b/telegram-sender/telegram-simple-sender/src/main/java/dev/struchkov/godfather/telegram/sender/service/SendPreProcessing.java
new file mode 100644
index 0000000..d37383f
--- /dev/null
+++ b/telegram-sender/telegram-simple-sender/src/main/java/dev/struchkov/godfather/telegram/sender/service/SendPreProcessing.java
@@ -0,0 +1,13 @@
+package dev.struchkov.godfather.telegram.sender.service;
+
+/**
+ * // TODO: 18.09.2020 Добавить описание.
+ *
+ * @author upagge 18.09.2020
+ */
+@FunctionalInterface
+public interface SendPreProcessing {
+
+ String pretreatment(String messageText);
+
+}
diff --git a/telegram-sender/src/main/java/dev/struchkov/godfather/telegram/service/TelegramSender.java b/telegram-sender/telegram-simple-sender/src/main/java/dev/struchkov/godfather/telegram/sender/service/TelegramSender.java
similarity index 97%
rename from telegram-sender/src/main/java/dev/struchkov/godfather/telegram/service/TelegramSender.java
rename to telegram-sender/telegram-simple-sender/src/main/java/dev/struchkov/godfather/telegram/sender/service/TelegramSender.java
index 82171fc..bec12e5 100644
--- a/telegram-sender/src/main/java/dev/struchkov/godfather/telegram/service/TelegramSender.java
+++ b/telegram-sender/telegram-simple-sender/src/main/java/dev/struchkov/godfather/telegram/sender/service/TelegramSender.java
@@ -1,4 +1,4 @@
-package dev.struchkov.godfather.telegram.service;
+package dev.struchkov.godfather.telegram.sender.service;
import dev.struchkov.godfather.context.domain.BoxAnswer;
import dev.struchkov.godfather.context.service.sender.SendType;
@@ -6,7 +6,7 @@ import dev.struchkov.godfather.telegram.context.SenderStorageService;
import dev.struchkov.godfather.telegram.context.TelegramConnect;
import dev.struchkov.godfather.telegram.context.TelegramSending;
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
-import dev.struchkov.godfather.telegram.utils.KeyBoardConvert;
+import dev.struchkov.godfather.telegram.sender.util.KeyBoardConvert;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/telegram/pom.xml b/telegram/pom.xml
index e5d250c..5c3c4bc 100644
--- a/telegram/pom.xml
+++ b/telegram/pom.xml
@@ -5,7 +5,7 @@
dev.struchkov.godfather.telegram
telegram-bot
- 0.0.26
+ 0.0.30
4.0.0
@@ -24,12 +24,10 @@
dev.struchkov.godfather.telegram
telegram-consumer
- ${project.version}
dev.struchkov.godfather.telegram
- telegram-sender
- ${project.version}
+ telegram-simple-sender