diff --git a/pom.xml b/pom.xml index 2ace676..47be3c7 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ UTF-8 UTF-8 - 0.0.50 + 0.0.51-SNAPSHOT 6.3.0 2.0.0 diff --git a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/CallbackQueryConvert.java b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/CallbackQueryConvert.java index 1884a02..23d3a80 100644 --- a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/CallbackQueryConvert.java +++ b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/CallbackQueryConvert.java @@ -18,6 +18,7 @@ public class CallbackQueryConvert { final String callbackData = callbackQuery.getData(); final Mail mail = new Mail(); + mail.setId(callbackQuery.getMessage().getMessageId().toString()); mail.setCreateDate(LocalDateTime.now()); mail.setText(callbackData); mail.addAttachment(convertToButtonClick(callbackData, callbackQuery.getMessage().getMessageId())); @@ -34,7 +35,7 @@ public class CallbackQueryConvert { private static ButtonClickAttachment convertToButtonClick(String callbackData, Integer messageId) { final ButtonClickAttachment buttonClickAttachment = new ButtonClickAttachment(); buttonClickAttachment.setRawCallBackData(callbackData); - buttonClickAttachment.setMessageId(messageId); + buttonClickAttachment.setMessageId(messageId.toString()); if (callbackData.charAt(0) == '[' && callbackData.charAt(callbackData.length() - 1) == ']') { final String[] args = callbackData.substring(1, callbackData.length() - 1).split(";"); for (String arg : args) { 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 080a230..cbc1f23 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 @@ -39,6 +39,7 @@ public final class MessageMailConvert { public static Mail apply(Message message) { final Mail mail = new Mail(); final Long chatId = message.getChatId(); + mail.setId(message.getMessageId().toString()); mail.setPersonId(chatId != null ? chatId.toString() : null); mail.setText(message.getText()); mail.setCreateDate(LocalDateTime.ofInstant(Instant.ofEpochSecond(message.getDate()), ZoneId.systemDefault())); 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 39d8a84..e7bbc50 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 @@ -45,8 +45,9 @@ public class EventDistributorService implements EventDistributor { return Uni.createFrom().voidItem() .onItem().transformToUni( v -> { - if (checkNotNull(update.getMessage())) { - final Message message = update.getMessage(); + final Message message = update.getMessage(); + final CallbackQuery callbackQuery = update.getCallbackQuery(); + if (checkNotNull(message)) { if (!isEvent(message)) { final Optional> optHandlers = getHandler(Mail.TYPE); if (optHandlers.isPresent()) { @@ -58,8 +59,7 @@ public class EventDistributorService implements EventDistributor { return Uni.createFrom().voidItem(); } } - if (checkNotNull(update.getCallbackQuery())) { - final CallbackQuery callbackQuery = update.getCallbackQuery(); + if (checkNotNull(callbackQuery)) { final Optional> optHandlers = getHandler(Mail.TYPE); if (optHandlers.isPresent()) { return Multi.createFrom().iterable(optHandlers.get()) @@ -100,15 +100,15 @@ public class EventDistributorService implements EventDistributor { private boolean isEvent(Message message) { return message.getChannelChatCreated() != null - || message.getDeleteChatPhoto() != null - || isNewChatMember(message.getNewChatMembers()) - || message.getNewChatTitle() != null - || message.getNewChatPhoto() != null - || message.getVideoChatEnded() != null - || message.getVideoChatParticipantsInvited() != null - || message.getVideoChatScheduled() != null - || message.getVideoNote() != null - || message.getVideoChatStarted() != null; + || message.getDeleteChatPhoto() != null + || isNewChatMember(message.getNewChatMembers()) + || message.getNewChatTitle() != null + || message.getNewChatPhoto() != null + || message.getVideoChatEnded() != null + || message.getVideoChatParticipantsInvited() != null + || message.getVideoChatScheduled() != null + || message.getVideoNote() != null + || message.getVideoChatStarted() != null; } private boolean isNewChatMember(List newChatMembers) { 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 69b6bff..9589556 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 @@ -38,16 +38,16 @@ public class EventDistributorService implements EventDistributor { @Override public void processing(@NotNull Update update) { - if (update.getMessage() != null) { - final Message message = update.getMessage(); + final Message message = update.getMessage(); + final CallbackQuery callbackQuery = update.getCallbackQuery(); + if (message != null) { if (!isEvent(message)) { getHandler(Mail.TYPE) .ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(MessageMailConvert.apply(message)))); return; } } - if (update.getCallbackQuery() != null) { - final CallbackQuery callbackQuery = update.getCallbackQuery(); + if (callbackQuery != null) { getHandler(Mail.TYPE) .ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(CallbackQueryConvert.apply(callbackQuery)))); return; @@ -69,15 +69,15 @@ public class EventDistributorService implements EventDistributor { private boolean isEvent(Message message) { return message.getChannelChatCreated() != null - || message.getDeleteChatPhoto() != null - || isNewChatMember(message.getNewChatMembers()) - || message.getNewChatTitle() != null - || message.getNewChatPhoto() != null - || message.getVideoChatEnded() != null - || message.getVideoChatParticipantsInvited() != null - || message.getVideoChatScheduled() != null - || message.getVideoNote() != null - || message.getVideoChatStarted() != null; + || message.getDeleteChatPhoto() != null + || isNewChatMember(message.getNewChatMembers()) + || message.getNewChatTitle() != null + || message.getNewChatPhoto() != null + || message.getVideoChatEnded() != null + || message.getVideoChatParticipantsInvited() != null + || message.getVideoChatScheduled() != null + || message.getVideoNote() != null + || message.getVideoChatStarted() != null; } private boolean isNewChatMember(List newChatMembers) { diff --git a/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/repository/SenderRepository.java b/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/repository/SenderRepository.java index 9ce6edf..db28897 100644 --- a/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/repository/SenderRepository.java +++ b/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/repository/SenderRepository.java @@ -4,9 +4,9 @@ import io.smallrye.mutiny.Uni; public interface SenderRepository { - Uni getLastSendMessage(String telegramId); + Uni getLastSendMessage(String telegramId); - Uni saveLastSendMessage(String telegramId, Integer messageId); + Uni saveLastSendMessage(String telegramId, String messageId); Uni removeLastSendMessage(String telegramId); 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 bdef065..d765e15 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 @@ -6,8 +6,8 @@ import dev.struchkov.godfather.quarkus.context.service.SendingService; import io.smallrye.mutiny.Uni; import org.jetbrains.annotations.NotNull; -public interface TelegramSending extends SendingService { +public interface TelegramSending extends SendingService { - Uni> sendNotSave(@NotNull BoxAnswer boxAnswer); + Uni sendNotSave(@NotNull BoxAnswer boxAnswer); } diff --git a/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/repository/SenderRepository.java b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/repository/SenderRepository.java index 97f6bf2..749da74 100644 --- a/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/repository/SenderRepository.java +++ b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/repository/SenderRepository.java @@ -4,9 +4,9 @@ import java.util.Optional; public interface SenderRepository { - Optional getLastSendMessage(String telegramId); + Optional getLastSendMessage(String telegramId); - void saveLastSendMessage(String telegramId, Integer messageId); + void saveLastSendMessage(String telegramId, String messageId); void removeLastSendMessage(String telegramId); 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 30f9174..033ecf5 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 @@ -7,8 +7,8 @@ import org.jetbrains.annotations.NotNull; import java.util.Optional; -public interface TelegramSending extends SendingService { +public interface TelegramSending extends SendingService { - Optional> sendNotSave(@NotNull BoxAnswer boxAnswer); + Optional sendNotSave(@NotNull BoxAnswer boxAnswer); } diff --git a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/service/SenderMapRepository.java b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/service/SenderMapRepository.java index f3cc993..9327270 100644 --- a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/service/SenderMapRepository.java +++ b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/service/SenderMapRepository.java @@ -11,15 +11,15 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull; public class SenderMapRepository implements SenderRepository { - private final Map lastMessageId = new HashMap<>(); + private final Map lastMessageId = new HashMap<>(); @Override - public Uni getLastSendMessage(String telegramId) { + public Uni getLastSendMessage(String telegramId) { return Uni.createFrom().item(lastMessageId.get(telegramId)); } @Override - public Uni saveLastSendMessage(@NotNull String telegramId, @NotNull Integer messageId) { + public Uni saveLastSendMessage(@NotNull String telegramId, @NotNull String messageId) { isNotNull(telegramId); lastMessageId.put(telegramId, messageId); return Uni.createFrom().voidItem(); diff --git a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/service/SenderMapRepository.java b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/service/SenderMapRepository.java index ab23c93..94cdc30 100644 --- a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/service/SenderMapRepository.java +++ b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/service/SenderMapRepository.java @@ -11,15 +11,15 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull; public class SenderMapRepository implements SenderRepository { - private final Map lastMessageId = new HashMap<>(); + private final Map lastMessageId = new HashMap<>(); @Override - public Optional getLastSendMessage(String telegramId) { + public Optional getLastSendMessage(String telegramId) { return Optional.ofNullable(lastMessageId.get(telegramId)); } @Override - public void saveLastSendMessage(@NotNull String telegramId, @NotNull Integer messageId) { + public void saveLastSendMessage(@NotNull String telegramId, @NotNull String messageId) { isNotNull(telegramId); lastMessageId.put(telegramId, messageId); } diff --git a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/util/TriggerChecks.java b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/util/TriggerChecks.java index 3252609..4a82eca 100644 --- a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/util/TriggerChecks.java +++ b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/util/TriggerChecks.java @@ -27,4 +27,8 @@ public class TriggerChecks { }; } + public static Predicate isClickButton() { + return mail -> Attachments.findFirstButtonClick(mail.getAttachments()).isPresent(); + } + } diff --git a/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonClickAttachment.java b/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonClickAttachment.java index bf8f6a7..ed840a3 100644 --- a/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonClickAttachment.java +++ b/telegram-domain/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonClickAttachment.java @@ -15,7 +15,7 @@ public class ButtonClickAttachment extends Attachment { /** * Идентификатор сообщения, под которым пользователь нажал кнопку. */ - private Integer messageId; + private String messageId; private String rawCallBackData; private final Map args = new HashMap<>(); @@ -46,11 +46,11 @@ public class ButtonClickAttachment extends Attachment { return args.values(); } - public Integer getMessageId() { + public String getMessageId() { return messageId; } - public void setMessageId(Integer messageId) { + public void setMessageId(String messageId) { this.messageId = messageId; } @@ -64,6 +64,7 @@ public class ButtonClickAttachment extends Attachment { } public static class Arg { + private final String type; private final String value; 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 935c35b..47603b6 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 @@ -51,7 +51,7 @@ public class TelegramSender implements TelegramSending { } @Override - public Uni> send(@NotNull BoxAnswer boxAnswer) { + public Uni send(@NotNull BoxAnswer boxAnswer) { return sendBoxAnswer(boxAnswer, true); } @@ -61,10 +61,10 @@ public class TelegramSender implements TelegramSending { } @Override - public Uni deleteMessage(@NotNull String personId, @NotNull Integer messageId) { + public Uni deleteMessage(@NotNull String personId, @NotNull String messageId) { final DeleteMessage deleteMessage = new DeleteMessage(); deleteMessage.setChatId(personId); - deleteMessage.setMessageId(messageId); + deleteMessage.setMessageId(Integer.parseInt(messageId)); try { absSender.execute(deleteMessage); } catch (TelegramApiException e) { @@ -74,51 +74,57 @@ public class TelegramSender implements TelegramSending { } @Override - public Uni> replaceMessage(@NotNull String personId, @NotNull Integer messageId, @NotNull BoxAnswer newAnswer) { + public Uni replaceMessage(@NotNull String personId, @NotNull String messageId, @NotNull BoxAnswer newAnswer) { return replace(personId, messageId, newAnswer, true); } @Override - public Uni> sendNotSave(@NotNull BoxAnswer boxAnswer) { + public Uni sendNotSave(@NotNull BoxAnswer boxAnswer) { return sendBoxAnswer(boxAnswer, false); } - private Uni> sendBoxAnswer(@NotNull BoxAnswer boxAnswer, boolean saveMessageId) { + private Uni sendBoxAnswer(@NotNull BoxAnswer boxAnswer, boolean saveMessageId) { return Uni.createFrom().voidItem() .onItem().transformToUni( v -> { final String recipientTelegramId = boxAnswer.getRecipientPersonId(); - if (boxAnswer.isReplace() && checkNotNull(senderRepository)) { - return senderRepository.getLastSendMessage(recipientTelegramId) - .onItem().transformToUni( - lastId -> { - if (checkNotNull(lastId)) { - return replace(recipientTelegramId, lastId, boxAnswer, saveMessageId); - } else { - return sendMessage(recipientTelegramId, boxAnswer, saveMessageId); - } - } - ); - } else { - return sendMessage(recipientTelegramId, boxAnswer, saveMessageId); + if (boxAnswer.isReplace()) { + final String replaceMessageId = boxAnswer.getReplaceMessageId(); + if (checkNotNull(replaceMessageId)) { + return replace(recipientTelegramId, replaceMessageId, boxAnswer, saveMessageId); + } else { + if (checkNotNull(senderRepository)) { + return senderRepository.getLastSendMessage(recipientTelegramId) + .onItem().transformToUni( + lastId -> { + if (checkNotNull(lastId)) { + return replace(recipientTelegramId, lastId, boxAnswer, saveMessageId); + } else { + return sendMessage(recipientTelegramId, boxAnswer, saveMessageId); + } + } + ); + } + } } + return sendMessage(recipientTelegramId, boxAnswer, saveMessageId); } ); } - private Uni> replace(@NotNull String telegramId, @NotNull Integer lastMessageId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) { + private Uni replace(@NotNull String telegramId, @NotNull String lastMessageId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) { return Uni.createFrom().voidItem() .onItem().transformToUni( v -> { final EditMessageText editMessageText = new EditMessageText(); editMessageText.setChatId(telegramId); - editMessageText.setMessageId(lastMessageId); + editMessageText.setMessageId(Integer.parseInt(lastMessageId)); editMessageText.enableMarkdown(true); editMessageText.setText(boxAnswer.getMessage()); editMessageText.setReplyMarkup(convertInlineKeyBoard((InlineKeyBoard) boxAnswer.getKeyBoard())); try { absSender.execute(editMessageText); - return Uni.createFrom().optional(SentBox.optional(lastMessageId, boxAnswer, boxAnswer)); + return Uni.createFrom().optional(SentBox.optional(telegramId, lastMessageId, boxAnswer, boxAnswer)); } catch (TelegramApiRequestException e) { log.error(e.getApiResponse()); if (ERROR_REPLACE_MESSAGE.equals(e.getApiResponse())) { @@ -132,7 +138,7 @@ public class TelegramSender implements TelegramSending { ); } - private Uni> sendMessage(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) { + private Uni sendMessage(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer, boolean saveMessageId) { return Uni.createFrom().voidItem() .onItem().transform( v -> { @@ -153,12 +159,12 @@ public class TelegramSender implements TelegramSending { } ).onItem().ifNotNull().call(answerMessage -> { if (checkNotNull(senderRepository) && saveMessageId) { - return senderRepository.saveLastSendMessage(telegramId, answerMessage.getMessageId()); + return senderRepository.saveLastSendMessage(telegramId, answerMessage.getMessageId().toString()); } return null; }) .onItem().ifNotNull().transformToUni( - answerMessage -> Uni.createFrom().optional(SentBox.optional(answerMessage.getMessageId(), boxAnswer, boxAnswer)) + answerMessage -> Uni.createFrom().optional(SentBox.optional(telegramId, answerMessage.getMessageId().toString(), boxAnswer, boxAnswer)) ); } 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 85487d8..7afebdc 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 @@ -57,10 +57,10 @@ public class TelegramSender implements TelegramSending { } @Override - public void deleteMessage(@NotNull String personId, @NotNull Integer messageId) { + public void deleteMessage(@NotNull String personId, @NotNull String messageId) { final DeleteMessage deleteMessage = new DeleteMessage(); deleteMessage.setChatId(personId); - deleteMessage.setMessageId(messageId); + deleteMessage.setMessageId(Integer.parseInt(messageId)); try { absSender.execute(deleteMessage); } catch (TelegramApiException e) { @@ -69,22 +69,22 @@ public class TelegramSender implements TelegramSending { } @Override - public Optional> replaceMessage(@NotNull String personId, @NotNull Integer messageId, @NotNull BoxAnswer newAnswer) { + public Optional replaceMessage(@NotNull String personId, @NotNull String messageId, @NotNull BoxAnswer newAnswer) { return replace(personId, messageId, newAnswer, newAnswer, true); } @Override - public Optional> send(@NotNull BoxAnswer boxAnswer) { + public Optional send(@NotNull BoxAnswer boxAnswer) { isNotNull(boxAnswer.getRecipientPersonId()); return sendBoxAnswer(boxAnswer, true); } @Override - public Optional> sendNotSave(@NotNull BoxAnswer boxAnswer) { + public Optional sendNotSave(@NotNull BoxAnswer boxAnswer) { return sendBoxAnswer(boxAnswer, false); } - private Optional> sendBoxAnswer(BoxAnswer boxAnswer, boolean saveMessageId) { + private Optional sendBoxAnswer(BoxAnswer boxAnswer, boolean saveMessageId) { final String recipientTelegramId = boxAnswer.getRecipientPersonId(); isNotNull(recipientTelegramId); @@ -93,28 +93,32 @@ public class TelegramSender implements TelegramSending { preparedAnswer = preSendProcessor.pretreatment(boxAnswer); } - if (preparedAnswer.isReplace() && checkNotNull(senderRepository)) { - final Optional optLastId = senderRepository.getLastSendMessage(recipientTelegramId); - if (optLastId.isPresent()) { - return replace(recipientTelegramId, optLastId.get(), boxAnswer, preparedAnswer, saveMessageId); + if (preparedAnswer.isReplace()) { + final String replaceMessageId = preparedAnswer.getReplaceMessageId(); + if (checkNotNull(replaceMessageId)) { + return replace(recipientTelegramId, replaceMessageId, boxAnswer, preparedAnswer, saveMessageId); } else { - return sendMessage(recipientTelegramId, boxAnswer, preparedAnswer, saveMessageId); + if (checkNotNull(senderRepository)) { + final Optional optLastId = senderRepository.getLastSendMessage(recipientTelegramId); + if (optLastId.isPresent()) { + return replace(recipientTelegramId, optLastId.get(), boxAnswer, preparedAnswer, saveMessageId); + } + } } - } else { - return sendMessage(recipientTelegramId, boxAnswer, preparedAnswer, saveMessageId); } + return sendMessage(recipientTelegramId, boxAnswer, preparedAnswer, saveMessageId); } - private Optional> replace(@NotNull String telegramId, @NotNull Integer lastMessageId, @NotNull BoxAnswer boxAnswer, BoxAnswer preparedAnswer, boolean saveMessageId) { + private Optional replace(@NotNull String telegramId, @NotNull String replaceMessageId, @NotNull BoxAnswer boxAnswer, BoxAnswer preparedAnswer, boolean saveMessageId) { final EditMessageText editMessageText = new EditMessageText(); editMessageText.setChatId(telegramId); - editMessageText.setMessageId(lastMessageId); + editMessageText.setMessageId(Integer.parseInt(replaceMessageId)); editMessageText.enableMarkdown(true); editMessageText.setText(boxAnswer.getMessage()); editMessageText.setReplyMarkup(KeyBoardConvert.convertInlineKeyBoard((InlineKeyBoard) boxAnswer.getKeyBoard())); try { absSender.execute(editMessageText); - return SentBox.optional(lastMessageId, preparedAnswer, boxAnswer); + return SentBox.optional(telegramId, replaceMessageId, preparedAnswer, boxAnswer); } catch (TelegramApiRequestException e) { log.error(e.getApiResponse()); if (ERROR_REPLACE_MESSAGE.equals(e.getApiResponse())) { @@ -126,7 +130,7 @@ public class TelegramSender implements TelegramSending { return Optional.empty(); } - private Optional> sendMessage(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer, BoxAnswer preparedAnswer, boolean saveMessageId) { + private Optional sendMessage(@NotNull String telegramId, @NotNull BoxAnswer boxAnswer, BoxAnswer preparedAnswer, boolean saveMessageId) { final SendMessage sendMessage = new SendMessage(); sendMessage.enableMarkdown(true); sendMessage.setChatId(telegramId); @@ -135,9 +139,9 @@ public class TelegramSender implements TelegramSending { try { final Message execute = absSender.execute(sendMessage); if (checkNotNull(senderRepository) && saveMessageId) { - senderRepository.saveLastSendMessage(telegramId, execute.getMessageId()); + senderRepository.saveLastSendMessage(telegramId, execute.getMessageId().toString()); } - return SentBox.optional(execute.getMessageId(), preparedAnswer, boxAnswer); + return SentBox.optional(telegramId, execute.getMessageId().toString(), preparedAnswer, boxAnswer); } catch (TelegramApiRequestException e) { log.error(e.getApiResponse()); } catch (TelegramApiException e) {