Telegram API - InlineKeyboardMarkup не отображается
Пишу pet проект для заказа еды в кафе. По задумке после /start пользователю выдается меню в виде InlineKeyboardMarkup, затем обрабатываю нажатия на кнопки.
public InlineKeyboardMarkup createMenuKeyboard() {
InlineKeyboardMarkup keyboard = new InlineKeyboardMarkup();
keyboard.addRow(new InlineKeyboardButton("Пицца").callbackData("pizza"));
keyboard.addRow(new InlineKeyboardButton("Суши").callbackData("sushi"));
keyboard.addRow(new InlineKeyboardButton("Бургеры").callbackData("burger"));
keyboard.addRow(new InlineKeyboardButton("Салаты").callbackData("salad"));
return keyboard;
}
clientBot.execute(new SendMessage(clientId, botMessage).replyMarkup(createMenuKeyboard()));
if (update.callbackQuery() != null) {
String data = update.callbackQuery().data();
clientId = update.callbackQuery().message().chat().id();
if (data.equals("pizza")) {
clientBot.execute(menuService.sendFoodMenu(clientId, FoodType.PIZZA));
}
}
В ответ пользователь должен получить список кнопок с названиями блюд. Проблема в том что не отрисовывают кнопки после обработки.
Делаю запрос в БД в зависимости от типа которым подписана кнопка.
Class<? extends Food> foodClass = foodType.getFoodClass();
ResolvableType resolvableType = ResolvableType.forClassWithGenerics(FoodRepository.class, foodClass, Long.class);
FoodRepository<? extends Food, Long> foodRepository =
(FoodRepository<? extends Food, Long>) applicationContext.getBeanProvider(resolvableType).getObject();
List<? extends Food> foods = foodRepository.findAll();
List<InlineKeyboardButton> inlineKeyboardButtons = new ArrayList<>();
for (Food food : foods) {
inlineKeyboardButtons.add(food.getButtons());
}
return inlineKeyboardButtons;
}
Создаю кнопку в классе блюда.
@Override
public InlineKeyboardButton getButtons() {
return new InlineKeyboardButton(getName());
}
И отправляю ответ пользователю. Если не прикреплять InlineKeyboardMarkup к ответу, то ответ в чат приходит, с ним же ничего. Ошибок в логах нет.
List<InlineKeyboardButton> buttons = getButton(foodType);
InlineKeyboardMarkup keyboard =
new InlineKeyboardMarkup();
for (InlineKeyboardButton button : buttons) {
keyboard.addRow(button);
}
return new SendMessage(chatId, "Выберите " + foodType.name().toLowerCase() + " из меню:").replyMarkup(keyboard);
}