Доработка клавиатур
This commit is contained in:
parent
317fd066c9
commit
19c75c4c49
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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) {
|
||||||
|
@ -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) {
|
||||||
|
@ -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()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user