Files
TelegaBot/src/main/java/ru/cathub/telegabot/bot/KeyboardHelper.java
T
2025-02-07 19:40:51 +03:00

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);
}
}