Inline клавиатура
Всем привет, продолжаем разбирать тему телеграм ботов. Сегодня рассмотри Inline клавиатуры.
Вот пример того, как выглядит Inline клавиатура:
Как это работает?
Нажав на кнопу мы передаем нашему боту команду. И следуя коду привязанному к этой команде он шлет(или делает иное действие) user`у сообщение. В приведенном выше примере, при нажатие на кнопку "Прайс" бот отсылает нам текстовое сообщение с условиями рекламы на канале.
Код
Теперь перейдем непосредственно к практике. Для начала нам нужно импортировать в наш проект Telegram.Bot.Types.ReplyMarkups делается это при помощи using, так что не вижу смысла это демонстрировать.
Дальше создаем экземпляр класса Telegram.Bot.Types.ReplyMarkups и при помощи метода InlineKeyboardButton создаем кнопки для нашей клавиатуры.
Кнопки бывают разных видов, но в этом уроке мы рассмотри WithCallbackData кнопки, благодаря которым мы можем выполнять некие действия. В круглых скобках указываем 2 аргумента:
- Текст, который будет написан на кнопке
- И callbackData которая будет присвоена этой кнопке.
var keyboard_main = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardMarkup(new[] { new [] { InlineKeyboardButton.WithCallbackData("Прайс", "price"), InlineKeyboardButton.WithCallbackData("Заказать бота", "bot"), InlineKeyboardButton.WithCallbackData("Вопрос", "qa"), } });
Теперь нужно заставить нашего виртуального помощника реагировать их нажатие.
К функции OnCallbackQuery прибавляем async-функцию. В ее аргументах указываем:
- object sc
- и Telegram.Bot.Args.CallbackQueryEventArgs ev
В теле мы проверяем если callbackData присвоенная одной из кнопок присылается боту, то делаем любое действие(в нашем примере отправляем сообщение)
if (ev.CallbackQuery.Data == "price") { await botClient.SendTextMessageAsync( chatId: e.Message.Chat, text: "2/24 - 200 руб\n" + "4/48 - 300 руб\n" + "Админ тебе скоро ответит и вы сможете обсудить условия рекламы", ); }
Но как отправить эту клавиатуру пользователю? - Делается это элементарно. В прошлых уроках мы разбирали функцию SendTextMessageAsync. Так вот, ей нужно передать 3-ий аргумент replyMarkup и задать ему имя нашей клавиатуры(например keyboard_main)
await botClient.SendTextMessageAsync( chatId: e.Message.Chat, text: "Комманды:\n" + "Рекламный прайс\n" + "Заказать бота для телеграмм\n" + "Задать вопрос или оставить пожелание", replyMarkup: keyboard_main );
Вуаля, наша Inline клавиатура готова.
На этом все. В следующем уроке рассмотрим форвард сообщений, так что включи уведомления на канале)
Удачи программисты!