Урок №4 Создание кнопок в telegram боте

В этом уроке мы научимся создавать кнопки.
В прошлом уроке мы научились обрабатывать стандартные команды по типу /start и /help, обращаться к пользователю, а также форматировать и обрабатывать текст.

Встроенные кнопки.

Ранее при получении команды /start мы отправляли текст пользователю "Приветствуем вас, {имя пользователя}, в нашем telegram боте".

Давайте же теперь будем при получении команды /start будем отправлять нашему пользователю тот же самый текст, но только уже с кнопками. Возьмем нашу программу, написанную в прошлом уроке(программа есть в telegram канале: https://t.me/pythotelegram) и добавим в нашу функцию, где мы обрабатывали команду /start, команды для появления кнопок.

Урок №4 Создание кнопок в telegram боте

Для начала создадим некий объект, который назовем, например, markup, далее нам надо обратиться к такому значению как types. Чтобы это значение корректно работало, его необходимо сначала подключить. Поэтому в самом вверху мы из библиотеки telebot импортируем types (from telebot import types). Далее мы будем создавать с вами встроенные кнопки, поэтому нас будет интересовать такой класс, на основе которого мы все это будем делать, как InlineKeyboardMarkup(). Далее мы обращаемся к нашему markup, к методу add и будем добавлять по одной новой кнопке.

Чтобы нам добавить некую новую кнопку, мы опять обращаемся к types, далее говорим какую кнопку мы будем создавать(нас интересует InlineKeyboardButton, т.е. встроенная кнопка). В качестве параметров мы должны указать текст для кнопки(у меня это будет 'Перейти в telegram группу') и также, если мы переходим по какой-либо ссылке, нам надо в качестве параметра указать url и здесь же мы указываем саму ссылку группу или сайт, который будет открываться при нажатии на данную кнопку(в моем случае будет открываться моя группа в telegram). Теперь давайте попробуем вывести нашу кнопку с сообщением. И тут в методе send_message мы передаем еще один параметр, который называется reply_markup и в качестве значения передаем наш объект markup. Теперь при запуске бота, когда мы введем команду /start, то наш бот выдаст нам текст, а также нашу встроенную кнопку, при нажатии на которую мы будем переходить в нашу telegram группу.

Урок №4 Создание кнопок в telegram боте
Урок №4 Создание кнопок в telegram боте

Давайте теперь добавим еще одну кнопку 'help', при нажатии на которую нам будет выдаваться текст, ранее написанный для команды /help.
Кнопки будут добавляться точно также, только теперь у нас не будет url адреса, а вместо этого у нас будет такой параметр, как callback_data и тут я напишу 'hlp'. Callback_data означает то, что при нажатии на данную кнопку будет вызываться некая функция, которая как раз и будет отвечать за действия этой кнопки, и куда мы будем передавать некоторые значения.
Теперь же если мы запустим бота, то у нас появятся наши кнопки, но кнопка help пока работать не будет.

Урок №4 Создание кнопок в telegram боте
Урок №4 Создание кнопок в telegram боте

Также перед тем, как мы создадим функцию, для кнопки help, я вам покажу, как вы можете располагать наши кнопки. Сейчас же наши кнопки находятся друг под другом. Для чтобы поместить несколько кнопок в один ряд, нам надо вынести создание кнопок из самой функции add и создать отдельные объекты(в моем случае они будут называться bot1 и bot2), в которые мы в качестве значения будем прописывать создание кнопок. А далее вместо markup.add мы будем использовать другой метод под названием markup.row. И уже сюда мы будем добавлять наши объекты, в которых хранятся создание кнопок.

И теперь если мы оба объекта помести в метод markup.row, то наши кнопки будут находиться в одном ряду.

Урок №4 Создание кнопок в telegram боте
Урок №4 Создание кнопок в telegram боте

Давайте теперь напишем функцию, которая будет приводить в работу нашу кнопку help. Чтобы нам создать данную функцию мы должны прописать декоратор, который называется @bot.callback_query_handler()(это специальный декоратор для обработки параметров callback_data).Внутри декоратора мы пишем анонимную функцию, где мы говорим один неким параметр, в случае если он будет пустым, то возвращаем значение True.(func = lambda callback: True).
Далее мы создаем функция, например, callback_message. Тут же мы будем принимать один некий параметр, который мы принимаем в декораторе(callback).Теперь мы обращаться с callback.data и будем получать то, что передается при нажатии на некую кнопку (в моем случае help). Например, в случае, если у нас пользователь нажимает на кнопку help, то у нас отправляется callback_data с такой информацией, как hlp. Здесь же мы перехватываем эту отправку и выполняем некие действия, в нашем случае это отправка сообщения пользователю. Прописываем bot.send_message с которым мы ознакомились в прошлых уроках. Теперь мы пишем параметр callback.message.chat.id и также пишем наш текст, который хотим отправить.
Теперь наша кнопка будет успешно работать!

Урок №4 Создание кнопок в telegram боте
Урок №4 Создание кнопок в telegram боте

Кнопки Reply Keyboard.

Теперь давайте сделаем так, что как только мы будем запускать бота у нас сразу же будет появляться, как в BotFather.Для создания таких кнопок мы будем использовать точно такую же структуру, как мы это делали для встроенных кнопок. Тут будет отличаться только то, что вместо InlineKeyboardMarkup() мы будем использовать ReplyKeyboardMarkup(), а также для самих кнопок нам надо использовать класс KeyboardButton. Этот класс принимает просто название кнопки. Тут мы уже не можем указать url как делали это раньше, а также не можем указывать callback_data. Дизайн и добавление кнопок происходит также, как это делалось во встроенных кнопках.

Посмотрим что у нас получилось.

Урок №4 Создание кнопок в telegram боте
Урок №4 Создание кнопок в telegram боте

При нажатии на кнопку они будут выводить нам некий текст в чат, но наш бот пока не отвечает на них.
Если же мы хотим обрабатывать нажатия на эти кнопки, то нам в самом низу этого метода необходимо зарегистрировать следующую функцию, которая будет срабатывать при вводе любого текста в чат. Для этого мы обращаемся в bot. Далее обращаемся к register_next_step_handler(), сюда мы передаем объект message, а также ту функцию, которая будет срабатывать следующей.
Так как в прошлом уроке мы уже создавали функцию, где обращались к тексту, то давайте обратимся здесь к этой функции и уже там напишем обращение к нашим кнопкам.
В функции txt мы проверяем текст на схожесть(текст должен быть такой же, как и в самих кнопках), и уже тогда мы выводим.
Давайте проверим, что получилось.

Урок №4 Создание кнопок в telegram боте
Урок №4 Создание кнопок в telegram боте

При нажатии на кнопку они будут выводить нам некий текст в чат, но наш бот пока не отвечает на них.
Если же мы хотим обрабатывать нажатия на эти кнопки, то нам в самом низу этого метода необходимо зарегестрировать следующую функцию, которая будет срабатывать при вводе любого текста в чат. Для этого мы обращаемся в bot. Далее обращаемся к register_next_step_handler(), сюда мы передаем объект message, а также ту функцию, которая будет срабатывать следующей.
Так как в прошлом уроке мы уже создавали функцию, где обращались к тексту, то давайте обратимся здесь к этой функции и уже там напишем обращение к нашим кнопкам.
В функции txt мы проверяем текст на схожесть(текст должен быть такой же, как и в самих кнопках), и уже тогда мы выводим.
Давайте проверим, что получилось.

Урок №4 Создание кнопок в telegram боте
Урок №4 Создание кнопок в telegram боте

После каждого урока вы можете заходить на моего telegram бота, чтобы посмотреть результат работы, после каждого урока: http://t.me/pythonte1egram_bot.

Также вы можете подписаться на telegram канала, где будут выкладываться все коды на python с моих уроков: https://t.me/pythotelegram.

1010
2 комментария

А как сделать чтобы после нажатия одной кнопки, продолжали работать и другие и ихи тоже можно было нажать?

Ответить

спасибо

Ответить