Для организации интерактивного взаимодействия с пользователем в Telegram боте, созданном на основе библиотеки Telebot (pyTelegramBotAPI), часто используется механизм inline-кнопок. Эти кнопки позволяют формировать динамический интерфейс, где каждое нажатие кнопки инициирует определённое действие или последовательность действий
В контексте данного запроса, «ожидание нажатия кнопки в кнопке» интерпретируется как реализация последовательности действий, где действие пользователя на одном уровне интерфейса приводит к появлению нового набора опций или выполнению операции.
Для демонстрации рассмотрим создание простого бота, который предлагает пользователю выбор и ожидает его реакции через нажатие inline-кнопок.
import telebot
from telebot import types
TOKEN = 'ВАШ_TELEGRAM_BOT_TOKEN'
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['start'])
def send_welcome(message):
markup = types.InlineKeyboardMarkup()
btn_my_site= types.InlineKeyboardButton(text='Нажми на меня', callback_data='press')
markup.add(btn_my_site)
bot.send_message(message.chat.id, "Привет! Это демонстрационный бот. Нажми на кнопку ниже.", reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.data == 'press':
markup = types.InlineKeyboardMarkup()
btn_test = types.InlineKeyboardButton(text='Тест', callback_data='test')
markup.add(btn_test)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Вы нажали на кнопку! Теперь нажмите 'Тест'.", reply_markup=markup)
elif call.data == 'test':
bot.answer_callback_query(call.id, "Тест успешно пройден!")
bot.polling(none_stop=True)
1. Инициализация и обработка команд: С помощью декоратора @bot.message_handler(commands=[‘start’]) определяется функция send_welcome, которая реагирует на команду /start, отправляя приветственное сообщение и кнопку для нажатия.
2. Создание Inline-кнопок: Используя types.InlineKeyboardMarkup() и types.InlineKeyboardButton(), создаётся inline-клавиатура с кнопками, которые отправляются пользователю. Каждая кнопка имеет уникальный callback_data, что позволяет идентифицировать нажатия.
3. Обработка нажатий на кнопки: Декоратор @bot.callback_query_handler(func=lambda call: True) обрабатывает все callback-запросы от inline-кнопок. Внутри функции callback_inline проверяется call.data для определения, какая кнопка была нажата, и выполняются соответствующие действия.
4. Изменение сообщения: Метод bot.edit_message_text() используется для изменения содержимого сообщения после нажатия кнопки, предоставляя пользователю новые опции или информацию.
5. Ответ на callback-запрос: bot.answer_callback_query() отправляет уведомление пользователю непосредственно в интерфейсе чата, что может быть использовано для подтверждения действия или вывода краткого сообщения.
Этот пример иллюстрирует базовый подход к созданию интерактив
ного Telegram бота с использованием inline-кнопок, обеспечивая плавный пользовательский опыт за счёт динамического обновления интерфейса и ожидания действий пользователя.