Учимся писать ботов: Inline-клавиатуры. Часть 1.
t.me/PishemBotaВсем привет! Сегодня я, наконец-таки, продолжаю серию постов про написание ботов для Telegram.
Сегодня пост про Inline-клавиатуры.
Как сделать Callback-клавиатуру?
Согласно документации для Telegram Bot API - Callback-клавиатура это:
Делать клавиатуру мы будем на основе старого доброго первого бота:
import telebot TOKEN = "<ваштокен>" bot = telebot.TeleBot(TOKEN) @bot.message_handler(commands=['start']) def start(m): bot.send_message(m.chat.id, 'Привет, человек!') bot.polling()
Импортируем туда types из модуля telebot (telegrambotapi):
import telebot from telebot import types
Меняем функцию start на такую:
def start(m):
keyboard = types.InlineKeyboardMarkup()
keyboard.add(types.InlineKeyboardButton(text='<Текст>',
callback_data="<Обратный текст>"))
bot.send_message(m.chat.id, 'Привет, человек!',reply_markup=keyboard)
В итоге у нас должен быть такой код:
import telebot
from telebot import types
@bot.message_handler(commands=['start'])
def start(m):
keyboard = types.InlineKeyboardMarkup()
keyboard.add(types.InlineKeyboardButton(text='<Текст>',
callback_data="<Обратный текст>"))
bot.send_message(m.chat.id, 'Привет, человек!',reply_markup=keyboard)
bot.polling()
И такой ответ на start в телеграмме:

Как сделать ответную часть для Callback-клавиатуры?
Меняем функцию start на эту, в которой я определил m.chat.id глобальным (чуть позже будет понятно зачем) и добавил отправление на следующую функцию (при желании kb_reply можно заменить на другое название):
def start(m):
global cid
cid = m.chat.id
keyboard = types.InlineKeyboardMarkup()
keyboard.add(types.InlineKeyboardButton(text='<Текст>',
callback_data = '<Обратный текст>'))
msg = bot.send_message(m.chat.id,'Привет,человек!',
reply_markup=keyboard)
bot.register_next_step_handler(msg, kb_reply)
Создаем новую функцию и прописываем для неё специальный хэндлер:
@bot.callback_query_handler(func=lambda c: True) def kb_reply(с): # не менять данные в скобках
Вписываем туда логику if:
if c.data == '<Обратный текст>':
И делаем задачу для логики if, к примеру сделаем отправку определенного текста:
if c.data == '<Обратный текст>':
bot.send_message(cid, '<Текст для ответа>')
Обратите внимание на то, что мы используем cid вместо m.chat.id. Сделано это потому что невозможно нормально использовать и callback методы, и message методы.
Уже завтра (!) выйдет вторая часть, где я рассмотрю и другие варианты инлайна, большее количество кнопок и их работу.