February 11, 2020

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 клавиатура готова.

На этом все. В следующем уроке рассмотрим форвард сообщений, так что включи уведомления на канале)

Удачи программисты!