2018-08-01 в 12:28, admin , рубрики: InlineKeyboard, java, telegram bots, Системы обмена сообщениями
InlineKeyboard — клавиатура привязанная к сообщению, изпользующая обратный вызов (CallbackQuery), вместо отправки сообщения с обыкновенной клавиатуры.
Пример
Создание каркаса бота
Для начала создадим проект на Maven и добавим репозиторий «Telegram Bots»:
org.telegram telegrambots 4.0.0
При помощью BotFather регистрируем бота и получаем token:
Inline Keyboard ⌨ Еще одна клавиатура для telegram bot
Далее создаем класс Bot, наследуемся от TelegramLongPollingBot и Овверайдим методы:
Исходный код
Создаем final переменные с именем бота и токеном, добавляем в метод getBotUsername() — botUserName, в getBotToken() — token. В методе main регистрируем бота:
Исходный код
Каркас бота готов! Теперь напишем метод с InlineKeyboard.
Работа с InlineKeyboard
Создаем обьект разметки клавиатуры:
InlineKeyboardMarkup inlineKeyboardMarkup =new InlineKeyboardMarkup();
Теперь выстраиваем положение кнопок.
Создаем обьект InlineKeyboardButton, у которой есть 2 параметка: Текст (Что будет написано на самой кнопке) и CallBackData (Что будет отсылатся серверу при нажатии на кнопку).
InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton(); inlineKeyboardButton.setText(«Тык»); inlineKeyboardButton.setCallbackData(«Button «Тык» has been pressed»);
Добавляем его в список, таким образом создавая ряд.
List keyboardButtonsRow1 = new ArrayList<>(); keyboardButtons.add(inlineKeyboardButton);
Если желаете создать еще один ряд, просто сделайте еще один список и добавляйте в него новые кнопки.
List keyboardButtonsRow2 = new ArrayList<>(); keyboardButtons.add(inlineKeyboardButton2);
После этого нам нужно обьеденить ряды, поэтому создаем список рядов.
List> rowList= new ArrayList<>(); rowList.add(keyboardButtonsRow1); rowList.add(keyboardButtonsRow2);
Фича
Разработчик позаботился о нас и мы можем сразу записывать кнопки в список не создавая переменную.
keyboardButtonsRow1.add(new InlineKeyboardButton().setText(«Fi4a») .setCallbackData(«CallFi4a»));
Теперь мы можем установить кнопки в обьект разметки клавиатуры.
inlineKeyboardMarkup.setKeyboard(rowList);
Если немного не понятно описание работы с созданием клавиатуры, вот вам схема:
Как работать с Телеграм Inline кнопками на Python
Вот и всё! Теперь добавляем разметку в сообщение:
SendMessage message = new SendMessage().setChatId(chatId).setText(«Пример») .setReplyMarkup(inlineKeyboardMarkup);
Теперь можем отправлять, вот вам готовый метод:
Исходный код
public static SendMessage sendInlineKeyBoardMessage(long chatId) < InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup(); InlineKeyboardButton inlineKeyboardButton1 = new InlineKeyboardButton(); InlineKeyboardButton inlineKeyboardButton2 = new InlineKeyboardButton(); inlineKeyboardButton1.setText(«Тык»); inlineKeyboardButton1.setCallbackData(«Button «Тык» has been pressed»); inlineKeyboardButton2.setText(«Тык2»); inlineKeyboardButton2.setCallbackData(«Button «Тык2″ has been pressed»); ListkeyboardButtonsRow1 = new ArrayList<>(); List keyboardButtonsRow2 = new ArrayList<>(); keyboardButtonsRow1.add(inlineKeyboardButton1); keyboardButtonsRow1.add(new InlineKeyboardButton().setText(«Fi4a»).setCallbackData(«CallFi4a»)); keyboardButtonsRow2.add(inlineKeyboardButton2); List rowList = new ArrayList<>(); rowList.add(keyboardButtonsRow1); rowList.add(keyboardButtonsRow2); inlineKeyboardMarkup.setKeyboard(rowList); return new SendMessage().setChatId(chatId).setText(«Пример»).setReplyMarkup(inlineKeyboardMarkup); >
Делаем вариант когда будет вызывается метод в обработчике запросов onUpdateReceived:
Исходный код
Теперь нам нужно обработать делаем новое ветвление в if и обрабатываем CallbackQuery:
Исходный код
На этом, пожалуй всё, спасибо за внимание!
Весь исходный код:
Весь код
Источник: www.pvsm.ru