implement toString for keyboard
This commit is contained in:
@@ -1,24 +1,13 @@
|
|||||||
package ru.penkrat.stbf.impl.pengrad;
|
package ru.penkrat.stbf.impl.pengrad;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import com.google.gson.internal.reflect.ReflectionAccessor;
|
|
||||||
import com.pengrad.telegrambot.TelegramBot;
|
import com.pengrad.telegrambot.TelegramBot;
|
||||||
import com.pengrad.telegrambot.model.Update;
|
import com.pengrad.telegrambot.model.Update;
|
||||||
import com.pengrad.telegrambot.model.request.InlineKeyboardButton;
|
import com.pengrad.telegrambot.model.request.*;
|
||||||
import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup;
|
|
||||||
import com.pengrad.telegrambot.model.request.KeyboardButton;
|
|
||||||
import com.pengrad.telegrambot.model.request.ParseMode;
|
|
||||||
import com.pengrad.telegrambot.model.request.ReplyKeyboardMarkup;
|
|
||||||
import com.pengrad.telegrambot.request.DeleteMessage;
|
import com.pengrad.telegrambot.request.DeleteMessage;
|
||||||
import com.pengrad.telegrambot.request.EditMessageText;
|
import com.pengrad.telegrambot.request.EditMessageText;
|
||||||
import com.pengrad.telegrambot.request.SendDocument;
|
import com.pengrad.telegrambot.request.SendDocument;
|
||||||
import com.pengrad.telegrambot.request.SendMessage;
|
import com.pengrad.telegrambot.request.SendMessage;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import ru.penkrat.stbf.api.BotResponse;
|
import ru.penkrat.stbf.api.BotResponse;
|
||||||
import ru.penkrat.stbf.api.Screen;
|
import ru.penkrat.stbf.api.Screen;
|
||||||
@@ -27,125 +16,94 @@ import ru.penkrat.stbf.api.Screen;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class BotResponseImpl implements BotResponse {
|
public class BotResponseImpl implements BotResponse {
|
||||||
|
|
||||||
private final Update update;
|
private final Update update;
|
||||||
|
|
||||||
private final TelegramBot telegramBot;
|
private final TelegramBot telegramBot;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void send(Screen screen) {
|
public void send(Screen screen) {
|
||||||
log.debug("Send message: \n============\n{}\n============", screen.getText().trim());
|
log.debug("Send message: \n============\n{}\n============", screen.getText().trim());
|
||||||
|
|
||||||
SendMessage sendMessage = new SendMessage(chatId(), screen.getText().trim())
|
SendMessage sendMessage = new SendMessage(chatId(), screen.getText().trim())
|
||||||
.parseMode(screen.getScreenProperties().isParseModeHtml() ? ParseMode.HTML : ParseMode.MarkdownV2)
|
.parseMode(screen.getScreenProperties().isParseModeHtml() ? ParseMode.HTML : ParseMode.MarkdownV2)
|
||||||
.disableWebPagePreview(screen.getScreenProperties().isDisableWebPagePreview())
|
.disableWebPagePreview(screen.getScreenProperties().isDisableWebPagePreview())
|
||||||
.disableNotification(screen.getScreenProperties().isDisableNotification());
|
.disableNotification(screen.getScreenProperties().isDisableNotification());
|
||||||
|
|
||||||
if (screen.getKeyboard() instanceof KeyboardImpl) {
|
if (screen.getKeyboard() instanceof KeyboardImpl) {
|
||||||
KeyboardImpl kk = (KeyboardImpl) screen.getKeyboard();
|
KeyboardImpl kk = (KeyboardImpl) screen.getKeyboard();
|
||||||
KeyboardButton[][] keyboard = kk.getKeyboard();
|
KeyboardButton[][] keyboard = kk.getKeyboard();
|
||||||
InlineKeyboardButton[][] inlineKeyboard = kk.getInlineKeyboard();
|
InlineKeyboardButton[][] inlineKeyboard = kk.getInlineKeyboard();
|
||||||
|
|
||||||
if (inlineKeyboard != null && inlineKeyboard.length > 0) {
|
if (log.isDebugEnabled()) {
|
||||||
logKeyboard(inlineKeyboard);
|
log.debug("{}", kk.toFriendlyString());
|
||||||
sendMessage = sendMessage.replyMarkup(new InlineKeyboardMarkup(inlineKeyboard));
|
}
|
||||||
} else if (keyboard != null && keyboard.length > 0) {
|
|
||||||
logKeyboard(keyboard);
|
|
||||||
sendMessage = sendMessage.replyMarkup(new ReplyKeyboardMarkup(keyboard));
|
|
||||||
} else {
|
|
||||||
log.debug("No keyboard");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
telegramBot.execute(sendMessage);
|
if (inlineKeyboard != null && inlineKeyboard.length > 0) {
|
||||||
}
|
sendMessage = sendMessage.replyMarkup(new InlineKeyboardMarkup(inlineKeyboard));
|
||||||
|
} else if (keyboard != null && keyboard.length > 0) {
|
||||||
|
sendMessage = sendMessage.replyMarkup(new ReplyKeyboardMarkup(keyboard));
|
||||||
|
} else {
|
||||||
|
log.debug("No keyboard");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
telegramBot.execute(sendMessage);
|
||||||
public void sendFile(String filename, byte[] data) {
|
}
|
||||||
telegramBot.execute(new SendDocument(chatId(), data).fileName(filename));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Deprecated
|
public void sendFile(String filename, byte[] data) {
|
||||||
public void editMessage(String text) {
|
telegramBot.execute(new SendDocument(chatId(), data).fileName(filename));
|
||||||
telegramBot.execute(new EditMessageText(chatId(), messageId(), text)
|
}
|
||||||
.parseMode(ParseMode.HTML)
|
|
||||||
.disableWebPagePreview(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void edit(Screen screen) {
|
@Deprecated
|
||||||
EditMessageText editMessage = new EditMessageText(chatId(), messageId(), screen.getText())
|
public void editMessage(String text) {
|
||||||
.parseMode(screen.getScreenProperties().isParseModeHtml() ? ParseMode.HTML : ParseMode.MarkdownV2)
|
telegramBot.execute(new EditMessageText(chatId(), messageId(), text)
|
||||||
.disableWebPagePreview(screen.getScreenProperties().isDisableWebPagePreview());
|
.parseMode(ParseMode.HTML)
|
||||||
|
.disableWebPagePreview(true));
|
||||||
|
}
|
||||||
|
|
||||||
if (screen.getKeyboard() instanceof KeyboardImpl) {
|
@Override
|
||||||
KeyboardImpl kk = (KeyboardImpl) screen.getKeyboard();
|
public void edit(Screen screen) {
|
||||||
InlineKeyboardButton[][] inlineKeyboard = kk.getInlineKeyboard();
|
EditMessageText editMessage = new EditMessageText(chatId(), messageId(), screen.getText())
|
||||||
|
.parseMode(screen.getScreenProperties().isParseModeHtml() ? ParseMode.HTML : ParseMode.MarkdownV2)
|
||||||
|
.disableWebPagePreview(screen.getScreenProperties().isDisableWebPagePreview());
|
||||||
|
|
||||||
if (inlineKeyboard != null && inlineKeyboard.length > 0) {
|
if (screen.getKeyboard() instanceof KeyboardImpl) {
|
||||||
logKeyboard(inlineKeyboard);
|
KeyboardImpl kk = (KeyboardImpl) screen.getKeyboard();
|
||||||
editMessage = editMessage.replyMarkup(new InlineKeyboardMarkup(inlineKeyboard));
|
InlineKeyboardButton[][] inlineKeyboard = kk.getInlineKeyboard();
|
||||||
} else {
|
|
||||||
log.debug("No keyboard");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
telegramBot.execute(editMessage);
|
if (log.isDebugEnabled()) {
|
||||||
}
|
log.debug("{}", kk.toFriendlyString());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
if (inlineKeyboard != null && inlineKeyboard.length > 0) {
|
||||||
public void deleteMessage() {
|
editMessage = editMessage.replyMarkup(new InlineKeyboardMarkup(inlineKeyboard));
|
||||||
telegramBot.execute(new DeleteMessage(chatId(), messageId()));
|
} else {
|
||||||
}
|
log.debug("No keyboard");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Long chatId() {
|
telegramBot.execute(editMessage);
|
||||||
if (update.callbackQuery() != null) {
|
}
|
||||||
return update.callbackQuery().message().chat().id();
|
|
||||||
}
|
|
||||||
return update.message().chat().id();
|
|
||||||
}
|
|
||||||
|
|
||||||
private Integer messageId() {
|
@Override
|
||||||
if (update.callbackQuery() != null) {
|
public void deleteMessage() {
|
||||||
return update.callbackQuery().message().messageId();
|
telegramBot.execute(new DeleteMessage(chatId(), messageId()));
|
||||||
}
|
}
|
||||||
return update.message().messageId();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void logKeyboard(KeyboardButton[][] keyboard) {
|
private Long chatId() {
|
||||||
if (log.isDebugEnabled()) {
|
if (update.callbackQuery() != null) {
|
||||||
for (int i = 0; i < keyboard.length; i++) {
|
return update.callbackQuery().message().chat().id();
|
||||||
if (keyboard[i].length > 0) {
|
}
|
||||||
String row = Stream.of(keyboard[i]).map(this::getText).collect(Collectors.joining(" | "));
|
return update.message().chat().id();
|
||||||
log.debug("Keyboard: {}", row);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void logKeyboard(InlineKeyboardButton[][] keyboard) {
|
private Integer messageId() {
|
||||||
if (log.isDebugEnabled()) {
|
if (update.callbackQuery() != null) {
|
||||||
for (int i = 0; i < keyboard.length; i++) {
|
return update.callbackQuery().message().messageId();
|
||||||
if (keyboard[i].length > 0) {
|
}
|
||||||
String row = Stream.of(keyboard[i]).map(this::getText).collect(Collectors.joining(" | "));
|
return update.message().messageId();
|
||||||
log.debug("Inline keyboard: {}", row);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SneakyThrows
|
|
||||||
private String getText(KeyboardButton btn) {
|
|
||||||
Field text = KeyboardButton.class.getDeclaredField("text");
|
|
||||||
ReflectionAccessor.getInstance().makeAccessible(text);
|
|
||||||
return String.valueOf(text.get(btn));
|
|
||||||
}
|
|
||||||
|
|
||||||
@SneakyThrows
|
|
||||||
private String getText(InlineKeyboardButton btn) {
|
|
||||||
Field text = InlineKeyboardButton.class.getDeclaredField("text");
|
|
||||||
ReflectionAccessor.getInstance().makeAccessible(text);
|
|
||||||
return String.valueOf(text.get(btn));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,68 @@
|
|||||||
package ru.penkrat.stbf.impl.pengrad;
|
package ru.penkrat.stbf.impl.pengrad;
|
||||||
|
|
||||||
|
import com.google.gson.internal.reflect.ReflectionAccessor;
|
||||||
import com.pengrad.telegrambot.model.request.InlineKeyboardButton;
|
import com.pengrad.telegrambot.model.request.InlineKeyboardButton;
|
||||||
import com.pengrad.telegrambot.model.request.KeyboardButton;
|
import com.pengrad.telegrambot.model.request.KeyboardButton;
|
||||||
|
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
import ru.penkrat.stbf.api.Keyboard;
|
import ru.penkrat.stbf.api.Keyboard;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@Value
|
@Value
|
||||||
class KeyboardImpl implements Keyboard {
|
class KeyboardImpl implements Keyboard {
|
||||||
|
|
||||||
private KeyboardButton[][] keyboard;
|
private KeyboardButton[][] keyboard;
|
||||||
|
|
||||||
private InlineKeyboardButton[][] inlineKeyboard;
|
private InlineKeyboardButton[][] inlineKeyboard;
|
||||||
|
|
||||||
|
private Map<Object, String> text = new HashMap<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
int k = keyboard != null ? keyboard.length : 0;
|
||||||
|
int kn = k > 0 ? keyboard[0].length : 0;
|
||||||
|
int i = inlineKeyboard != null ? inlineKeyboard.length : 0;
|
||||||
|
int in = i > 0 ? inlineKeyboard[0].length : 0;
|
||||||
|
return "KeyboardImpl(pengrad) [keyboard=" + k + "x" + kn
|
||||||
|
+ ", inline=" + i + "x" + in + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
String toFriendlyString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
if (keyboard != null) {
|
||||||
|
sb.append("Keyboard:\n");
|
||||||
|
for (int i = 0; i < keyboard.length; i++) {
|
||||||
|
if (keyboard[i].length > 0) {
|
||||||
|
String row = Stream.of(keyboard[i]).map(this::getText).collect(Collectors.joining(" | "));
|
||||||
|
sb.append(row).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (inlineKeyboard != null) {
|
||||||
|
sb.append("Inline keyboard:\n");
|
||||||
|
for (int i = 0; i < inlineKeyboard.length; i++) {
|
||||||
|
if (inlineKeyboard[i].length > 0) {
|
||||||
|
String row = Stream.of(inlineKeyboard[i]).map(this::getText).collect(Collectors.joining(" | "));
|
||||||
|
sb.append(row).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getText(Object btn) {
|
||||||
|
return text.computeIfAbsent(btn, o -> {
|
||||||
|
try {
|
||||||
|
Field text = btn.getClass().getDeclaredField("text");
|
||||||
|
ReflectionAccessor.getInstance().makeAccessible(text);
|
||||||
|
return String.valueOf(text.get(btn));
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
return "*error*";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ public class PengradKeyboardBuilder implements KeyboardBuilder {
|
|||||||
|
|
||||||
private InlineKeyboardButton[][] inlineKeyboard;
|
private InlineKeyboardButton[][] inlineKeyboard;
|
||||||
|
|
||||||
|
private String keyboardStr = "";
|
||||||
|
|
||||||
public static Keyboard singleKey(Action action) {
|
public static Keyboard singleKey(Action action) {
|
||||||
return KeyboardBuilder.newKeyboard().add(action).build();
|
return KeyboardBuilder.newKeyboard().add(action).build();
|
||||||
}
|
}
|
||||||
@@ -123,7 +125,6 @@ public class PengradKeyboardBuilder implements KeyboardBuilder {
|
|||||||
n[k.length] = btn;
|
n[k.length] = btn;
|
||||||
keyboard[keyboard.length - 1] = n;
|
keyboard[keyboard.length - 1] = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void put(InlineKeyboardButton btn) {
|
private void put(InlineKeyboardButton btn) {
|
||||||
|
|||||||
Reference in New Issue
Block a user