diff --git a/pom.xml b/pom.xml index 350cbf6..86a89d5 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ UTF-8 UTF-8 - 0.0.56 + 0.0.57 6.3.0 diff --git a/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/InlineKeyBoards.java b/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/InlineKeyBoards.java index f1b7693..e84b128 100644 --- a/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/InlineKeyBoards.java +++ b/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/InlineKeyBoards.java @@ -1,15 +1,15 @@ package dev.struchkov.godfather.telegram.main.core.util; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; -import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; -import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine; import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard; +import dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine; +import dev.struchkov.godfather.telegram.domain.keyboard.button.SimpleButton; import java.util.Arrays; import java.util.List; -import static dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton.simpleButton; -import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine; +import static dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine.keyBoardLine; +import static dev.struchkov.godfather.telegram.domain.keyboard.button.SimpleButton.simpleButton; import static dev.struchkov.haiti.utils.Exceptions.utilityClass; public final class InlineKeyBoards { @@ -25,7 +25,7 @@ public final class InlineKeyBoards { * Возвращает клавиатуру формата 1х2, с кнопками "Да | Нет" */ public static InlineKeyBoard lineYesOrNo() { - return InlineKeyBoard.inlineKeyBoard(simpleLine(YES_BUTTON, NO_BUTTON)); + return InlineKeyBoard.inlineKeyBoard(keyBoardLine(YES_BUTTON, NO_BUTTON)); } /** @@ -37,7 +37,7 @@ public final class InlineKeyBoards { public static InlineKeyBoard verticalMenuString(List labelButtons) { final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder(); for (String labelButton : labelButtons) { - keyBoard.line(simpleLine(simpleButton(labelButton, labelButton))); + keyBoard.line(keyBoardLine(simpleButton(labelButton, labelButton))); } return keyBoard.build(); } @@ -128,7 +128,7 @@ public final class InlineKeyBoards { public static InlineKeyBoard verticalMenuButton(KeyBoardButton... buttons) { final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder(); for (KeyBoardButton simpleButton : buttons) { - keyBoard.line(simpleLine(simpleButton)); + keyBoard.line(keyBoardLine(simpleButton)); } return keyBoard.build(); } diff --git a/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/SimpleKeyBoards.java b/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/SimpleKeyBoards.java index f12378a..86de205 100644 --- a/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/SimpleKeyBoards.java +++ b/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/SimpleKeyBoards.java @@ -1,8 +1,8 @@ package dev.struchkov.godfather.telegram.main.core.util; -import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; -import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine; import dev.struchkov.godfather.telegram.domain.keyboard.MarkupKeyBoard; +import dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine; +import dev.struchkov.godfather.telegram.domain.keyboard.button.SimpleButton; import java.util.Arrays; import java.util.List; diff --git a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/util/UnitTrigger.java b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/util/UnitTrigger.java index 1720c4d..bd21e4f 100644 --- a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/util/UnitTrigger.java +++ b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/util/UnitTrigger.java @@ -49,10 +49,18 @@ public class UnitTrigger { return predicate(mail -> Attachments.findFirstCommand(mail.getAttachments()).isPresent()); } - public static UniPredicate isClickButton() { + public static UniPredicate isButtonClick() { return predicate(mail -> Attachments.findFirstButtonClick(mail.getAttachments()).isPresent()); } + public static UniPredicate isButtonClickArg(String argType) { + return predicate( + mail -> Attachments.findFirstButtonClick(mail.getAttachments()) + .flatMap(click -> click.getArgByType(argType)) + .isPresent() + ); + } + public static UniPredicate isLinks() { return predicate(mail -> Attachments.findFirstLink(mail.getAttachments()).isPresent()); } diff --git a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/util/UnitTrigger.java b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/util/UnitTrigger.java index dacc165..b243647 100644 --- a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/util/UnitTrigger.java +++ b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/util/UnitTrigger.java @@ -27,7 +27,7 @@ public class UnitTrigger { }; } - public static Predicate isClickButton() { + public static Predicate isButtonClick() { return mail -> Attachments.findFirstButtonClick(mail.getAttachments()).isPresent(); } @@ -35,4 +35,10 @@ public class UnitTrigger { return mail -> Attachments.findFirstLink(mail.getAttachments()).isPresent(); } + public static Predicate isButtonClickArg(String argType) { + return mail -> Attachments.findFirstButtonClick(mail.getAttachments()) + .flatMap(click -> click.getArgByType(argType)) + .isPresent(); + } + } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/UnitPaginationUtil.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/UnitPaginationUtil.java index 766ba80..13800c1 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/UnitPaginationUtil.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/UnitPaginationUtil.java @@ -2,13 +2,13 @@ package dev.struchkov.godfather.telegram.domain; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; -import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine; +import dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; -import static dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton.simpleButton; +import static dev.struchkov.godfather.telegram.domain.keyboard.button.SimpleButton.simpleButton; public final class UnitPaginationUtil { diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonArg.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonArg.java new file mode 100644 index 0000000..2f7d8b8 --- /dev/null +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/attachment/ButtonArg.java @@ -0,0 +1,24 @@ +package dev.struchkov.godfather.telegram.domain.attachment; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class ButtonArg { + + private String type; + private String value; + + public static ButtonArg buttonArg(String type, String value) { + return new ButtonArg(type, value); + } + +} 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 ebff785..f66e453 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,9 +1,7 @@ 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; @@ -23,7 +21,7 @@ public class ButtonClickAttachment extends Attachment { */ private String messageId; private String rawCallBackData; - private Map args = new HashMap<>(); + private Map args = new HashMap<>(); public ButtonClickAttachment() { super(TelegramAttachmentType.BUTTON_CLICK.name()); @@ -31,32 +29,21 @@ public class ButtonClickAttachment extends Attachment { public void addClickArg(String type, String value) { isNotNull(type, value); - args.put(type, new Arg(type, value)); + args.put(type, ButtonArg.buttonArg(type, value)); } - public Optional getArgByType(String type) { + public Optional getArgByType(String type) { isNotNull(type); return Optional.ofNullable(args.get(type)); } - public Arg getArgByTypeOrThrow(String type) { + public ButtonArg getArgByTypeOrThrow(String type) { isNotNull(type); return Optional.of(args.get(type)).orElseThrow(notFoundException("Аргумент типа {0} не найден.", type)); } - public Collection getClickArgs() { + public Collection getClickArgs() { return args.values(); } - @Getter - @Setter - @NoArgsConstructor - @AllArgsConstructor - public static class Arg { - - private String type; - private String value; - - } - } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardButtonDeserializer.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardButtonDeserializer.java index 480a909..03767e1 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardButtonDeserializer.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardButtonDeserializer.java @@ -5,8 +5,8 @@ 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.keyboard.KeyBoardButton; -import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; import dev.struchkov.godfather.telegram.domain.keyboard.button.ContactButton; +import dev.struchkov.godfather.telegram.domain.keyboard.button.SimpleButton; import dev.struchkov.godfather.telegram.domain.keyboard.button.UrlButton; import dev.struchkov.godfather.telegram.domain.keyboard.button.WebAppButton; diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardLineDeserializer.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardLineDeserializer.java index 7ed0134..6360d32 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardLineDeserializer.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardLineDeserializer.java @@ -5,7 +5,7 @@ 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.keyboard.KeyBoardLine; -import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine; +import dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine; import java.io.IOException; diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/InlineKeyBoard.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/InlineKeyBoard.java index 51427b5..342b953 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/InlineKeyBoard.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/InlineKeyBoard.java @@ -13,7 +13,8 @@ import lombok.Singular; import java.util.List; -import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine; +import static dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine.keyBoardLine; + @Getter @Setter @@ -36,7 +37,7 @@ public class InlineKeyBoard implements KeyBoard { } public static InlineKeyBoard inlineKeyBoard(KeyBoardButton... buttons) { - return builder().line(simpleLine(buttons)).build(); + return builder().line(keyBoardLine(buttons)).build(); } @Override diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java index d22b529..af2207c 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java @@ -14,7 +14,7 @@ import lombok.Singular; import java.util.List; -import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine; +import static dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine.keyBoardLine; import static dev.struchkov.haiti.utils.Checker.checkEmpty; import static dev.struchkov.haiti.utils.Checker.checkNotEmpty; @@ -55,7 +55,7 @@ public class MarkupKeyBoard implements KeyBoard { public static MarkupKeyBoard markupKeyBoard(KeyBoardButton... buttons) { final MarkupKeyBoardBuilder builder = new MarkupKeyBoardBuilder(); for (KeyBoardButton button : buttons) { - builder.line(simpleLine(button)); + builder.line(keyBoardLine(button)); } return builder.build(); } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/SimpleKeyBoardLine.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/SimpleKeyBoardLine.java new file mode 100644 index 0000000..24cce26 --- /dev/null +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/SimpleKeyBoardLine.java @@ -0,0 +1,38 @@ +package dev.struchkov.godfather.telegram.domain.keyboard; + +import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; +import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.Singular; + +import java.util.Arrays; +import java.util.List; + +/** + * Строка в меню клавиатуры {@link dev.struchkov.godfather.main.domain.keyboard.KeyBoard}. + * + * @author upagge [08/07/2019] + */ +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class SimpleKeyBoardLine implements KeyBoardLine { + + /** + * Кнопки в строке. + */ + @Singular + protected List buttons; + + public static SimpleKeyBoardLine keyBoardLine(KeyBoardButton... keyBoardButton) { + return new SimpleKeyBoardLine(Arrays.stream(keyBoardButton).toList()); + } + +} diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/SimpleButton.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/SimpleButton.java new file mode 100644 index 0000000..56303ea --- /dev/null +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/SimpleButton.java @@ -0,0 +1,67 @@ +package dev.struchkov.godfather.telegram.domain.keyboard.button; + +import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; +import dev.struchkov.godfather.telegram.domain.attachment.ButtonArg; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.Arrays; +import java.util.stream.Collectors; + +import static dev.struchkov.haiti.utils.Inspector.Utils.nullPointer; +import static dev.struchkov.haiti.utils.Inspector.isNotNull; + +/** + * Абстрактная сущность кнопки для клавиатуры. + * + * @author upagge [08/07/2019] + */ +@Getter +@Setter +@NoArgsConstructor +@EqualsAndHashCode +public class SimpleButton implements KeyBoardButton { + + public static final String TYPE = "SIMPLE"; + + /** + * Надпись на кнопке. + */ + protected String label; + /** + * Данные, которые возвращаются при нажатии. + */ + protected String callbackData; + + protected SimpleButton(String label, String callbackData) { + this.label = label; + this.callbackData = callbackData; + } + + public static SimpleButton simpleButton(String label, String callbackData) { + isNotNull(label, nullPointer("label")); + return new SimpleButton(label, callbackData); + } + + public static SimpleButton simpleButton(String label, ButtonArg... args) { + isNotNull(label, nullPointer("label")); + return new SimpleButton( + label, Arrays.stream(args) + .map(buttonArg -> buttonArg.getType() + ":" + buttonArg.getValue()) + .collect(Collectors.joining("[", "]", ";")) + ); + } + + public static SimpleButton simpleButton(String label) { + isNotNull(label, nullPointer("label")); + return new SimpleButton(label, null); + } + + @Override + public String getType() { + return TYPE; + } + +} diff --git a/telegram-domain/telegram-domain-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/domain/UnitPage.java b/telegram-domain/telegram-domain-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/domain/UnitPage.java index 459d6f7..04bd169 100644 --- a/telegram-domain/telegram-domain-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/domain/UnitPage.java +++ b/telegram-domain/telegram-domain-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/domain/UnitPage.java @@ -10,8 +10,8 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Function; -import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine; import static dev.struchkov.godfather.telegram.domain.UnitPaginationUtil.navigableLine; +import static dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine.keyBoardLine; public class UnitPage { @@ -85,7 +85,7 @@ public class UnitPage { } public UnitPage additionLine(KeyBoardButton button) { - additionalLines.add(simpleLine(button)); + additionalLines.add(keyBoardLine(button)); return this; } diff --git a/telegram-domain/telegram-domain-simple/src/main/java/dev/struchkov/godfather/telegram/simple/domain/UnitPage.java b/telegram-domain/telegram-domain-simple/src/main/java/dev/struchkov/godfather/telegram/simple/domain/UnitPage.java index 1028fda..55ab042 100644 --- a/telegram-domain/telegram-domain-simple/src/main/java/dev/struchkov/godfather/telegram/simple/domain/UnitPage.java +++ b/telegram-domain/telegram-domain-simple/src/main/java/dev/struchkov/godfather/telegram/simple/domain/UnitPage.java @@ -10,8 +10,8 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Function; -import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine; import static dev.struchkov.godfather.telegram.domain.UnitPaginationUtil.navigableLine; +import static dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine.keyBoardLine; public class UnitPage { @@ -85,7 +85,7 @@ public class UnitPage { } public UnitPage additionLine(KeyBoardButton button) { - additionalLines.add(simpleLine(button)); + additionalLines.add(keyBoardLine(button)); return this; } diff --git a/telegram-sender/telegram-sender-main/src/main/java/dev/struchkov/godfather/telegram/main/sender/util/KeyBoardConvert.java b/telegram-sender/telegram-sender-main/src/main/java/dev/struchkov/godfather/telegram/main/sender/util/KeyBoardConvert.java index d974a5b..1ac8632 100644 --- a/telegram-sender/telegram-sender-main/src/main/java/dev/struchkov/godfather/telegram/main/sender/util/KeyBoardConvert.java +++ b/telegram-sender/telegram-sender-main/src/main/java/dev/struchkov/godfather/telegram/main/sender/util/KeyBoardConvert.java @@ -3,10 +3,10 @@ package dev.struchkov.godfather.telegram.main.sender.util; import dev.struchkov.godfather.main.domain.keyboard.KeyBoard; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; -import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard; import dev.struchkov.godfather.telegram.domain.keyboard.MarkupKeyBoard; import dev.struchkov.godfather.telegram.domain.keyboard.button.ContactButton; +import dev.struchkov.godfather.telegram.domain.keyboard.button.SimpleButton; import dev.struchkov.godfather.telegram.domain.keyboard.button.UrlButton; import dev.struchkov.godfather.telegram.domain.keyboard.button.WebAppButton; import dev.struchkov.haiti.context.exception.ConvertException;