forked from Sanders/TelegaBot
167 lines
5.6 KiB
Java
167 lines
5.6 KiB
Java
package ru.cathub.telegabot.bot;
|
|
|
|
import org.springframework.data.domain.Page;
|
|
import org.springframework.stereotype.Component;
|
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup;
|
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.ReplyKeyboardMarkup;
|
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton;
|
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardRow;
|
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardButton;
|
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardRow;
|
|
import ru.cathub.telegabot.model.Book;
|
|
import ru.cathub.telegabot.model.BotUser;
|
|
import ru.cathub.telegabot.repository.BookRepository;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import static ru.cathub.telegabot.utils.Constants.*;
|
|
|
|
public class KeyboardHelper {
|
|
|
|
public static ReplyKeyboardMarkup getMainMenuKeyboard() {
|
|
|
|
List<KeyboardRow> keyboardRows = new ArrayList<>();
|
|
|
|
// Первая строка кнопок
|
|
// KeyboardRow row1 = new KeyboardRow();
|
|
// row1.add(new KeyboardButton("Отправить текст"));
|
|
// row1.add(new KeyboardButton("Загрузить .torrent"));
|
|
|
|
// Вторая строка кнопок
|
|
KeyboardRow row2 = new KeyboardRow();
|
|
row2.add(new KeyboardButton("Книжник"));
|
|
row2.add(new KeyboardButton("Помощь"));
|
|
|
|
// keyboardRows.add(row1);
|
|
keyboardRows.add(row2);
|
|
|
|
|
|
ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup(keyboardRows);
|
|
keyboardMarkup.setResizeKeyboard(true); // Адаптировать размер клавиатуры
|
|
keyboardMarkup.setOneTimeKeyboard(false); // Клавиатура остается после использования
|
|
|
|
|
|
return keyboardMarkup;
|
|
}
|
|
|
|
public static ReplyKeyboardMarkup getBookMenuKeyboard() {
|
|
List<KeyboardRow> keyboardRows = new ArrayList<>();
|
|
|
|
KeyboardRow row1 = new KeyboardRow();
|
|
row1.add(new KeyboardButton(ADD_BOOK));
|
|
row1.add(new KeyboardButton(LIST_BOOKS));
|
|
|
|
KeyboardRow row2 = new KeyboardRow();
|
|
row2.add(new KeyboardButton(EDIT_BOOKS));
|
|
row2.add(new KeyboardButton(BACK));
|
|
|
|
keyboardRows.add(row1);
|
|
keyboardRows.add(row2);
|
|
|
|
ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup(keyboardRows);
|
|
keyboardMarkup.setResizeKeyboard(true);
|
|
keyboardMarkup.setOneTimeKeyboard(false);
|
|
|
|
return keyboardMarkup;
|
|
}
|
|
|
|
public static InlineKeyboardMarkup getBookListKeyboard(int currentPage, boolean hasNext, Page<Book> books, boolean forEdit) {
|
|
|
|
|
|
List<InlineKeyboardRow> rows;
|
|
|
|
// Кнопки навигации
|
|
InlineKeyboardRow navRow = new InlineKeyboardRow();
|
|
|
|
if (!books.isEmpty() && forEdit) {
|
|
rows = getBookEditListKeyboard(books);
|
|
}
|
|
else {
|
|
rows = new ArrayList<>();
|
|
}
|
|
|
|
if (currentPage > 0) {
|
|
navRow.add(InlineKeyboardButton.builder()
|
|
.text("← Назад")
|
|
.callbackData("BOOK_PAGE_" + (currentPage - 1))
|
|
.build());
|
|
}
|
|
|
|
if (hasNext) {
|
|
navRow.add(InlineKeyboardButton.builder()
|
|
.text("Вперед →")
|
|
.callbackData("BOOK_PAGE_" + (currentPage + 1))
|
|
.build());
|
|
}
|
|
|
|
if (!navRow.isEmpty()) {
|
|
rows.add(navRow);
|
|
}
|
|
return new InlineKeyboardMarkup(rows);
|
|
}
|
|
|
|
public static List<InlineKeyboardRow> getBookEditListKeyboard(Page<Book> books) {
|
|
|
|
List<InlineKeyboardRow> rows = new ArrayList<>();
|
|
InlineKeyboardRow navRow = new InlineKeyboardRow();
|
|
int counter = 1;
|
|
for (Book book : books) {
|
|
navRow.add(InlineKeyboardButton.builder()
|
|
.text(String.valueOf((char) ('0' + counter)) + "\uFE0F\u20E3")
|
|
.callbackData("BOOK_EDIT_ID_" + book.getId())
|
|
.build());
|
|
if (counter % 5 == 0) {
|
|
rows.add(navRow);
|
|
navRow = new InlineKeyboardRow();
|
|
}
|
|
counter++;
|
|
}
|
|
|
|
if (!navRow.isEmpty()) {
|
|
rows.add(navRow);
|
|
}
|
|
|
|
return rows;
|
|
}
|
|
|
|
|
|
public static InlineKeyboardMarkup getEditOptions(BotUser user) {
|
|
|
|
List<InlineKeyboardRow> rows = new ArrayList<>();
|
|
InlineKeyboardRow navRow = new InlineKeyboardRow();
|
|
// Первый ряд кнопок
|
|
navRow.add(
|
|
InlineKeyboardButton.builder()
|
|
.text("Название \uFE0F")
|
|
.callbackData("BOOK_EDIT_TITLE")
|
|
.build()
|
|
);
|
|
navRow.add(
|
|
InlineKeyboardButton.builder()
|
|
.text("Автор ✒️")
|
|
.callbackData("BOOK_EDIT_AUTHOR")
|
|
.build()
|
|
);
|
|
|
|
// Второй ряд кнопок
|
|
navRow.add(
|
|
InlineKeyboardButton.builder()
|
|
.text("Рейтинг ⭐️")
|
|
.callbackData("BOOK_EDIT_RATING")
|
|
.build()
|
|
);
|
|
// navRow.add(
|
|
// InlineKeyboardButton.builder()
|
|
// .text("Отмена ❌")
|
|
// .callbackData("BOOK_EDIT_CANCEL")
|
|
// .build()
|
|
// );
|
|
|
|
rows.add(navRow);
|
|
|
|
return new InlineKeyboardMarkup(rows);
|
|
}
|
|
|
|
|
|
} |