Доработка клавиатур

This commit is contained in:
Struchkov Mark 2023-03-29 01:20:00 +03:00
parent 317fd066c9
commit 19c75c4c49
Signed by: upagge
GPG Key ID: D3018BE7BA428CA6
14 changed files with 285 additions and 156 deletions

View File

@ -2,7 +2,6 @@ package dev.struchkov.godfather.telegram.main.core.util;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton;
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoard;
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine; import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine;
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard; import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
@ -24,21 +23,19 @@ public final class InlineKeyBoards {
/** /**
* Возвращает клавиатуру формата 1х2, с кнопками "Да | Нет" * Возвращает клавиатуру формата 1х2, с кнопками "Да | Нет"
*
* @return {@link SimpleKeyBoard}
*/ */
public static SimpleKeyBoardLine lineYesOrNo() { public static InlineKeyBoard lineYesOrNo() {
return simpleLine(YES_BUTTON, NO_BUTTON); return InlineKeyBoard.inlineKeyBoard(simpleLine(YES_BUTTON, NO_BUTTON));
} }
/** /**
* Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке * Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке
* *
* @param labelButtons Список названий для кнопок * @param labelButtons Список названий для кнопок
* @return {@link SimpleKeyBoard} * @return {@link InlineKeyBoard}
*/ */
public static InlineKeyBoard verticalMenuString(List<String> labelButtons) { public static InlineKeyBoard verticalMenuString(List<String> labelButtons) {
final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder(); final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder();
for (String labelButton : labelButtons) { for (String labelButton : labelButtons) {
keyBoard.line(simpleLine(simpleButton(labelButton, labelButton))); keyBoard.line(simpleLine(simpleButton(labelButton, labelButton)));
} }
@ -49,7 +46,7 @@ public final class InlineKeyBoards {
* Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке * Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке
* *
* @param labelButton Список названий для кнопок * @param labelButton Список названий для кнопок
* @return {@link SimpleKeyBoard} * @return {@link InlineKeyBoard}
*/ */
public static InlineKeyBoard verticalMenuString(String... labelButton) { public static InlineKeyBoard verticalMenuString(String... labelButton) {
return verticalMenuString(Arrays.asList(labelButton)); return verticalMenuString(Arrays.asList(labelButton));
@ -59,7 +56,7 @@ public final class InlineKeyBoards {
* Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке * Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке
* *
* @param labelButton Список названий для кнопок * @param labelButton Список названий для кнопок
* @return {@link SimpleKeyBoard} * @return {@link InlineKeyBoard}
*/ */
public static InlineKeyBoard verticalDuoMenuString(String... labelButton) { public static InlineKeyBoard verticalDuoMenuString(String... labelButton) {
return verticalDuoMenuString(Arrays.asList(labelButton)); return verticalDuoMenuString(Arrays.asList(labelButton));
@ -69,12 +66,12 @@ public final class InlineKeyBoards {
* Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке * Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке
* *
* @param labelButton Список названий для кнопок * @param labelButton Список названий для кнопок
* @return {@link SimpleKeyBoard} * @return {@link InlineKeyBoard}
*/ */
public static InlineKeyBoard verticalDuoMenuString(List<String> labelButton) { public static InlineKeyBoard verticalDuoMenuString(List<String> labelButton) {
final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder(); final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder();
boolean flag = true; boolean flag = true;
SimpleKeyBoardLine.Builder keyBoardLine = SimpleKeyBoardLine.builder(); SimpleKeyBoardLine.SimpleKeyBoardLineBuilder keyBoardLine = SimpleKeyBoardLine.builder();
for (int i = 0; i <= labelButton.size() - 1; i++) { for (int i = 0; i <= labelButton.size() - 1; i++) {
String label = labelButton.get(i); String label = labelButton.get(i);
keyBoardLine.button(simpleButton(label)); keyBoardLine.button(simpleButton(label));
@ -93,9 +90,9 @@ public final class InlineKeyBoards {
return keyBoard.build(); return keyBoard.build();
} }
public static void verticalDuoMenu(InlineKeyBoard.Builder builder, List<? extends KeyBoardButton> buttons) { public static void verticalDuoMenu(InlineKeyBoard.InlineKeyBoardBuilder builder, List<? extends KeyBoardButton> buttons) {
boolean flag = true; boolean flag = true;
SimpleKeyBoardLine.Builder keyBoardLine = SimpleKeyBoardLine.builder(); SimpleKeyBoardLine.SimpleKeyBoardLineBuilder keyBoardLine = SimpleKeyBoardLine.builder();
for (int i = 0; i <= buttons.size() - 1; i++) { for (int i = 0; i <= buttons.size() - 1; i++) {
keyBoardLine.button(buttons.get(i)); keyBoardLine.button(buttons.get(i));
if (flag) { if (flag) {
@ -113,7 +110,7 @@ public final class InlineKeyBoards {
} }
public static InlineKeyBoard verticalDuoMenu(List<? extends KeyBoardButton> buttons) { public static InlineKeyBoard verticalDuoMenu(List<? extends KeyBoardButton> buttons) {
final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder(); final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder();
verticalDuoMenu(keyBoard, buttons); verticalDuoMenu(keyBoard, buttons);
return keyBoard.build(); return keyBoard.build();
} }
@ -126,10 +123,10 @@ public final class InlineKeyBoards {
* Возвращает клавиатуру формата 1xN сформированную из списка кнопок, где N - количество кнопок в списке * Возвращает клавиатуру формата 1xN сформированную из списка кнопок, где N - количество кнопок в списке
* *
* @param buttons Список кнопок * @param buttons Список кнопок
* @return {@link SimpleKeyBoard} * @return {@link InlineKeyBoard}
*/ */
public static InlineKeyBoard verticalMenuButton(KeyBoardButton... buttons) { public static InlineKeyBoard verticalMenuButton(KeyBoardButton... buttons) {
final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder(); final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder();
for (KeyBoardButton simpleButton : buttons) { for (KeyBoardButton simpleButton : buttons) {
keyBoard.line(simpleLine(simpleButton)); keyBoard.line(simpleLine(simpleButton));
} }

View File

@ -0,0 +1,112 @@
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 java.util.Arrays;
import java.util.List;
/**
* Используется для быстрого создания клавиаутр {@link MarkupKeyBoard}.
*
* @author upagge [08/07/2019]
*/
public class SimpleKeyBoards {
public static final SimpleButton YES_BUTTON = SimpleButton.simpleButton("Да", "{\"button\": \"yes\"}");
public static final SimpleButton NO_BUTTON = SimpleButton.simpleButton("Нет", "{\"button\": \"no\"}");
private SimpleKeyBoards() {
throw new IllegalStateException();
}
/**
* Возвращает клавиатуру формата 1х2, с кнопками "Да | Нет"
*
* @return {@link MarkupKeyBoard}
*/
public static MarkupKeyBoard keyBoardYesNo() {
return MarkupKeyBoard.builder().line(
SimpleKeyBoardLine.builder().button(YES_BUTTON).button(NO_BUTTON).build()
).build();
}
/**
* Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке
*
* @param labelButtons Список названий для кнопок
* @return {@link MarkupKeyBoard}
*/
public static MarkupKeyBoard verticalMenuString(List<String> labelButtons) {
final MarkupKeyBoard.MarkupKeyBoardBuilder keyBoard = MarkupKeyBoard.builder();
for (String labelButton : labelButtons) {
final SimpleButton simpleButton = SimpleButton.simpleButton(labelButton, "{\"button\": \"" + labelButton + "\"}");
keyBoard.line(SimpleKeyBoardLine.builder().button(simpleButton).build());
}
return keyBoard.build();
}
/**
* Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке
*
* @param labelButton Список названий для кнопок
* @return {@link MarkupKeyBoard}
*/
public static MarkupKeyBoard verticalMenuString(String... labelButton) {
return verticalMenuString(Arrays.asList(labelButton));
}
/**
* Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке
*
* @param labelButton Список названий для кнопок
* @return {@link MarkupKeyBoard}
*/
public static MarkupKeyBoard verticalDuoMenuString(String... labelButton) {
return verticalDuoMenuString(Arrays.asList(labelButton));
}
/**
* Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке
*
* @param labelButton Список названий для кнопок
* @return {@link MarkupKeyBoard}
*/
public static MarkupKeyBoard verticalDuoMenuString(List<String> labelButton) {
final MarkupKeyBoard.MarkupKeyBoardBuilder keyBoard = MarkupKeyBoard.builder();
boolean flag = true;
SimpleKeyBoardLine.SimpleKeyBoardLineBuilder keyBoardLine = SimpleKeyBoardLine.builder();
for (int i = 0; i <= labelButton.size() - 1; i++) {
String label = labelButton.get(i);
keyBoardLine.button(SimpleButton.simpleButton(label));
if (flag) {
if (i == labelButton.size() - 1) {
keyBoard.line(keyBoardLine.build());
} else {
flag = false;
}
} else {
keyBoard.line(keyBoardLine.build());
keyBoardLine = SimpleKeyBoardLine.builder();
flag = true;
}
}
return keyBoard.build();
}
/**
* Возвращает клавиатуру формата 1xN сформированную из списка кнопок, где N - количество кнопок в списке
*
* @param simpleButtons Список кнопок
* @return {@link MarkupKeyBoard}
*/
public static MarkupKeyBoard verticalMenuButton(List<SimpleButton> simpleButtons) {
final MarkupKeyBoard.MarkupKeyBoardBuilder keyBoard = MarkupKeyBoard.builder();
for (SimpleButton simpleButton : simpleButtons) {
keyBoard.line(SimpleKeyBoardLine.builder().button(simpleButton).build());
}
return keyBoard.build();
}
}

View File

@ -48,7 +48,7 @@ public final class UnitPaginationUtil {
* @param countElements - общее количество элементов которое может вернуть запрос * @param countElements - общее количество элементов которое может вернуть запрос
*/ */
public static Optional<KeyBoardLine> navigableLine(Integer currentOffset, Integer countElements) { public static Optional<KeyBoardLine> navigableLine(Integer currentOffset, Integer countElements) {
final SimpleKeyBoardLine.Builder lineBuilder = SimpleKeyBoardLine.builder(); final SimpleKeyBoardLine.SimpleKeyBoardLineBuilder lineBuilder = SimpleKeyBoardLine.builder();
final Optional<KeyBoardButton> optPrevButton = getPrevPageButton(currentOffset); final Optional<KeyBoardButton> optPrevButton = getPrevPageButton(currentOffset);
final Optional<KeyBoardButton> optNextButton = getNextPageButton(currentOffset, countElements); final Optional<KeyBoardButton> optNextButton = getNextPageButton(currentOffset, countElements);

View File

@ -0,0 +1,46 @@
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.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.UrlButton;
import dev.struchkov.godfather.telegram.domain.keyboard.button.WebAppButton;
import java.io.IOException;
public class TelegramKeyboardButtonDeserializer extends StdDeserializer<KeyBoardButton> {
public TelegramKeyboardButtonDeserializer() {
this(null);
}
public TelegramKeyboardButtonDeserializer(Class<?> vc) {
super(vc);
}
@Override
public KeyBoardButton deserialize(JsonParser parser, DeserializationContext context) throws IOException {
final JsonNode node = parser.getCodec().readTree(parser);
final String typeKeyBoard = node.get("type").asText();
switch (typeKeyBoard) {
case "SIMPLE" -> {
return parser.getCodec().treeToValue(node, SimpleButton.class);
}
case "CONTACT" -> {
return parser.getCodec().treeToValue(node, ContactButton.class);
}
case "URL" -> {
return parser.getCodec().treeToValue(node, UrlButton.class);
}
case "WEB_APP" -> {
return parser.getCodec().treeToValue(node, WebAppButton.class);
}
}
throw new RuntimeException();
}
}

View File

@ -0,0 +1,38 @@
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.keyboard.KeyBoard;
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
import dev.struchkov.godfather.telegram.domain.keyboard.MarkupKeyBoard;
import java.io.IOException;
public class TelegramKeyboardDeserializer extends StdDeserializer<KeyBoard> {
public TelegramKeyboardDeserializer() {
this(null);
}
public TelegramKeyboardDeserializer(Class<?> vc) {
super(vc);
}
@Override
public KeyBoard deserialize(JsonParser parser, DeserializationContext context) throws IOException {
final JsonNode node = parser.getCodec().readTree(parser);
final String typeKeyBoard = node.get("type").asText();
switch (typeKeyBoard) {
case "INLINE" -> {
return parser.getCodec().treeToValue(node, InlineKeyBoard.class);
}
case "MARKUP" -> {
return parser.getCodec().treeToValue(node, MarkupKeyBoard.class);
}
}
throw new RuntimeException();
}
}

View File

@ -0,0 +1,28 @@
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.keyboard.KeyBoardLine;
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine;
import java.io.IOException;
public class TelegramKeyboardLineDeserializer extends StdDeserializer<KeyBoardLine> {
public TelegramKeyboardLineDeserializer() {
this(null);
}
public TelegramKeyboardLineDeserializer(Class<?> vc) {
super(vc);
}
@Override
public KeyBoardLine deserialize(JsonParser parser, DeserializationContext context) throws IOException {
final JsonNode node = parser.getCodec().readTree(parser);
return parser.getCodec().treeToValue(node, SimpleKeyBoardLine.class);
}
}

View File

@ -3,38 +3,32 @@ package dev.struchkov.godfather.telegram.domain.keyboard;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoard; import dev.struchkov.godfather.main.domain.keyboard.KeyBoard;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.Singular;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine; import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine;
@Getter @Getter
@Setter @Setter
@Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class InlineKeyBoard implements KeyBoard { public class InlineKeyBoard implements KeyBoard {
public static final String TYPE = "INLINE"; public static final String TYPE = "INLINE";
@Singular
protected List<KeyBoardLine> lines; protected List<KeyBoardLine> lines;
public InlineKeyBoard(List<KeyBoardLine> lines) {
this.lines = lines;
}
private InlineKeyBoard(Builder builder) {
this.lines = builder.lines;
}
public static Builder builder() {
return new Builder();
}
public static InlineKeyBoard inlineKeyBoard(KeyBoardLine... keyBoardLine) { public static InlineKeyBoard inlineKeyBoard(KeyBoardLine... keyBoardLine) {
final Builder builder = builder(); final InlineKeyBoardBuilder builder = builder();
for (KeyBoardLine boardLine : keyBoardLine) { for (KeyBoardLine boardLine : keyBoardLine) {
builder.line(boardLine); builder.line(boardLine);
} }
@ -50,27 +44,4 @@ public class InlineKeyBoard implements KeyBoard {
return TYPE; return TYPE;
} }
public static final class Builder {
private List<KeyBoardLine> lines = new ArrayList<>();
private Builder() {
}
public Builder lines(List<KeyBoardLine> val) {
lines = val;
return this;
}
public Builder line(KeyBoardLine val) {
lines.add(val);
return this;
}
public InlineKeyBoard build() {
return new InlineKeyBoard(this);
}
}
} }

View File

@ -1,19 +1,34 @@
package dev.struchkov.godfather.telegram.domain.keyboard; package dev.struchkov.godfather.telegram.domain.keyboard;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoard;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine;
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoard; import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.Singular;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine; import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine;
public class MarkupKeyBoard extends SimpleKeyBoard { @Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MarkupKeyBoard implements KeyBoard {
public static final String TYPE = "MARKUP"; public static final String TYPE = "MARKUP";
private static final MarkupKeyBoard EMPTY = new MarkupKeyBoard(); private static final MarkupKeyBoard EMPTY = new MarkupKeyBoard();
@Singular
protected List<KeyBoardLine> lines;
/** /**
* Скрыть меню после ответа или нет. * Скрыть меню после ответа или нет.
*/ */
@ -26,19 +41,8 @@ public class MarkupKeyBoard extends SimpleKeyBoard {
private String inputFieldPlaceholder; private String inputFieldPlaceholder;
public MarkupKeyBoard() {
super(Collections.emptyList());
}
private MarkupKeyBoard(Builder builder) {
super(builder.lines);
oneTime = builder.oneTime;
resizeKeyboard = builder.resizeKeyboard;
inputFieldPlaceholder = builder.inputFieldPlaceholder;
}
public static MarkupKeyBoard markupKeyBoard(KeyBoardLine... lines) { public static MarkupKeyBoard markupKeyBoard(KeyBoardLine... lines) {
final Builder builder = new Builder(); final MarkupKeyBoardBuilder builder = new MarkupKeyBoardBuilder();
for (KeyBoardLine line : lines) { for (KeyBoardLine line : lines) {
builder.line(line); builder.line(line);
} }
@ -46,33 +50,17 @@ public class MarkupKeyBoard extends SimpleKeyBoard {
} }
public static MarkupKeyBoard markupKeyBoard(KeyBoardButton... buttons) { public static MarkupKeyBoard markupKeyBoard(KeyBoardButton... buttons) {
final Builder builder = new Builder(); final MarkupKeyBoardBuilder builder = new MarkupKeyBoardBuilder();
for (KeyBoardButton button : buttons) { for (KeyBoardButton button : buttons) {
builder.line(simpleLine(button)); builder.line(simpleLine(button));
} }
return builder.build(); return builder.build();
} }
public static Builder markupBuilder() {
return new Builder();
}
public static MarkupKeyBoard empty() { public static MarkupKeyBoard empty() {
return EMPTY; return EMPTY;
} }
public boolean isResizeKeyboard() {
return resizeKeyboard;
}
public String getInputFieldPlaceholder() {
return inputFieldPlaceholder;
}
public boolean isOneTime() {
return oneTime;
}
@Override @Override
public String getType() { public String getType() {
return TYPE; return TYPE;
@ -86,42 +74,4 @@ public class MarkupKeyBoard extends SimpleKeyBoard {
return !lines.isEmpty(); return !lines.isEmpty();
} }
public static final class Builder {
private List<KeyBoardLine> lines = new ArrayList<>();
private boolean oneTime = true;
private boolean resizeKeyboard;
private String inputFieldPlaceholder;
private Builder() {
}
public Builder lines(List<KeyBoardLine> val) {
lines = val;
return this;
}
public Builder line(KeyBoardLine val) {
lines.add(val);
return this;
}
public Builder oneTime(boolean val) {
oneTime = val;
return this;
}
public Builder resizeKeyboard(boolean val) {
resizeKeyboard = val;
return this;
}
public Builder inputFieldPlaceholder(String val) {
inputFieldPlaceholder = val;
return this;
}
public MarkupKeyBoard build() {
return new MarkupKeyBoard(this);
}
}
} }

View File

@ -1,6 +1,9 @@
package dev.struchkov.godfather.telegram.domain.keyboard.button; package dev.struchkov.godfather.telegram.domain.keyboard.button;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@ -13,17 +16,15 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull;
*/ */
@Getter @Getter
@Setter @Setter
@Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class ContactButton implements KeyBoardButton { public class ContactButton implements KeyBoardButton {
public static final String TYPE = "CONTACT"; public static final String TYPE = "CONTACT";
private String label; private String label;
private ContactButton(String label) {
this.label = label;
}
public static ContactButton contactButton(String label) { public static ContactButton contactButton(String label) {
isNotNull(label, nullPointer("label")); isNotNull(label, nullPointer("label"));
return new ContactButton(label); return new ContactButton(label);

View File

@ -1,6 +1,9 @@
package dev.struchkov.godfather.telegram.domain.keyboard.button; package dev.struchkov.godfather.telegram.domain.keyboard.button;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@ -9,7 +12,9 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull;
@Getter @Getter
@Setter @Setter
@Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class UrlButton implements KeyBoardButton { public class UrlButton implements KeyBoardButton {
public static final String TYPE = "URL"; public static final String TYPE = "URL";
@ -17,11 +22,6 @@ public class UrlButton implements KeyBoardButton {
private String label; private String label;
private String url; private String url;
public UrlButton(String label, String url) {
this.label = label;
this.url = url;
}
public static UrlButton urlButton(String label, String url) { public static UrlButton urlButton(String label, String url) {
isNotNull(label, url); isNotNull(label, url);
return new UrlButton(label, url); return new UrlButton(label, url);

View File

@ -1,6 +1,9 @@
package dev.struchkov.godfather.telegram.domain.keyboard.button; package dev.struchkov.godfather.telegram.domain.keyboard.button;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@ -9,7 +12,9 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull;
@Getter @Getter
@Setter @Setter
@Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class WebAppButton implements KeyBoardButton { public class WebAppButton implements KeyBoardButton {
public static final String TYPE = "WEB_APP"; public static final String TYPE = "WEB_APP";
@ -17,11 +22,6 @@ public class WebAppButton implements KeyBoardButton {
private String label; private String label;
private String url; private String url;
private WebAppButton(String label, String url) {
this.label = label;
this.url = url;
}
public static WebAppButton webAppButton(String label, String url) { public static WebAppButton webAppButton(String label, String url) {
isNotNull(label, url); isNotNull(label, url);
return new WebAppButton(label, url); return new WebAppButton(label, url);

View File

@ -122,7 +122,7 @@ public class UnitPage<T> {
final List<KeyBoardLine> lines = elements.stream() final List<KeyBoardLine> lines = elements.stream()
.map(function) .map(function)
.toList(); .toList();
final InlineKeyBoard.Builder builder = InlineKeyBoard.builder(); final InlineKeyBoard.InlineKeyBoardBuilder builder = InlineKeyBoard.builder();
lines.forEach(builder::line); lines.forEach(builder::line);
if (!removeDefaultNavigableLine) { if (!removeDefaultNavigableLine) {

View File

@ -122,7 +122,7 @@ public class UnitPage<T> {
final List<KeyBoardLine> lines = elements.stream() final List<KeyBoardLine> lines = elements.stream()
.map(function) .map(function)
.toList(); .toList();
final InlineKeyBoard.Builder builder = InlineKeyBoard.builder(); final InlineKeyBoard.InlineKeyBoardBuilder builder = InlineKeyBoard.builder();
lines.forEach(builder::line); lines.forEach(builder::line);
if (!removeDefaultNavigableLine) { if (!removeDefaultNavigableLine) {

View File

@ -4,7 +4,6 @@ import dev.struchkov.godfather.main.domain.keyboard.KeyBoard;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton;
import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine;
import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton;
import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoard;
import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard; import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard;
import dev.struchkov.godfather.telegram.domain.keyboard.MarkupKeyBoard; 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.ContactButton;
@ -42,24 +41,11 @@ public final class KeyBoardConvert {
case MarkupKeyBoard.TYPE -> { case MarkupKeyBoard.TYPE -> {
return convertMarkupKeyBoard((MarkupKeyBoard) keyBoard); return convertMarkupKeyBoard((MarkupKeyBoard) keyBoard);
} }
case SimpleKeyBoard.TYPE -> {
return convertSimpleKeyBoard((SimpleKeyBoard) keyBoard);
}
} }
} }
return null; return null;
} }
public static ReplyKeyboard convertSimpleKeyBoard(SimpleKeyBoard keyBoard) {
final ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup();
keyboardMarkup.setKeyboard(
keyBoard.getLines().stream()
.map(KeyBoardConvert::convertMarkupLine)
.toList()
);
return keyboardMarkup;
}
public static ReplyKeyboard convertMarkupKeyBoard(MarkupKeyBoard keyBoard) { public static ReplyKeyboard convertMarkupKeyBoard(MarkupKeyBoard keyBoard) {
if (keyBoard != null) { if (keyBoard != null) {
if (keyBoard.isNotEmpty()) { if (keyBoard.isNotEmpty()) {