Настройка телеграм бота

Когда нажимаю одну из кнопок и получаю ответ, дальнейшие нажатия кнопок ни к чему не приводят. Как это исправить?

import telebot
from telebot import types

bot = telebot.TeleBot('токен бота')

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup()
    btn1 = types.KeyboardButton('Абонименты')
    markup.row(btn1)
    btn2 = types.KeyboardButton('Запись')
    btn3 = types.KeyboardButton('Акции')
    btn4 = types.KeyboardButton('Правила')
    btn5 = types.KeyboardButton('Адрес')
    markup.row(btn2, btn3)
    markup.row(btn4, btn5)
    bot.send_message(message.chat.id, 'Здравствйте!', reply_markup=markup)
    bot.register_next_step_handler(message, on_click)


def on_click(message):
    if message.text == 'Абонименты':
        bot.send_message(message.chat.id, 'Действующие абонименты:')
    elif message.text == 'Запись':
        bot.send_message(message.chat.id, 'запись')
    elif message.text == 'Акции':
        bot.send_message(message.chat.id, 'действующие акции:')
    elif message.text == 'Правила':
        bot.send_message(message.chat.id, 'правила')
    elif message.text == 'Адрес':
        bot.send_message(message.chat.id, 'адрес')
bot.polling(non_stop=True) 

Ответы (3 шт):

Автор решения: Савельев Даниил

Для нормальной работы кнопок нужен callback, который мы обрабатываем

# Подобным образом
@bot.callback_query_handler(func=lambda call: True)
def callback(call):

Исправленный код

import telebot  # этот импорт тоже нужен
from telebot import types

bot = telebot.TeleBot('токен бота')


@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup(row_width=2)  # две кнопки в ряд
    button_season_tickets = types.InlineKeyboardButton('Действующие абонементы', callback_data='Действующие абонементы')
    # при нажатии кнопки получаем нужный call
    button_registration = types.InlineKeyboardButton('Запись', callback_data='Запись')
    button_promotion = types.InlineKeyboardButton('Акции', callback_data='Акции')
    button_rules = types.InlineKeyboardButton('Правила', callback_data='Правила')
    button_address = types.InlineKeyboardButton('Адрес', callback_data='Адрес')
    markup.add(button_season_tickets, button_registration, button_promotion, button_rules, button_address)
    bot.send_message(message.chat.id, 'Здравствйте!', reply_markup=markup)


@bot.callback_query_handler(func=lambda call: True)  # эта функция нужна для работы call
def callback(call):
    if call.message:  # проверяем был ли call с кнопки
        if call.data == 'Действующие абонементы':  # ищем что нужно сделать в ответ на наш call
            bot.send_message(call.message.chat.id, 'Действующие абонементы')
            season_tickets(call)  # запускаем заготовленный callback_query_handler
        elif call.data == 'Запись':
            bot.send_message(call.message.chat.id, 'Запись')
        elif call.data == 'Акции':
            bot.send_message(call.message.chat.id, 'Акции')
        elif call.data == 'Правила':
            bot.send_message(call.message.chat.id, 'Правила')
        elif call.data == 'Адрес':
            bot.send_message(call.message.chat.id, 'Адрес')


@bot.callback_query_handler(func=lambda call: True)
def season_tickets(call):
    bot.send_message(call.message.chat.id, 'Информация по абонементам')


bot.polling(non_stop=True)

Дополнительная информация есть в документации по pyTelegramBotAPI

→ Ссылка
Автор решения: Савельев Даниил

Для того чтобы были те кнопки, которые в примере то можно сделать так:

import telebot
from telebot import types

bot = telebot.TeleBot("Токен_Бота")


@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton('Абонименты')
    btn2 = types.KeyboardButton('Запись')
    btn3 = types.KeyboardButton('Акции')
    btn4 = types.KeyboardButton('Правила')
    btn5 = types.KeyboardButton('Адрес')
    markup.row(btn1)
    markup.row(btn2, btn3)
    markup.row(btn4, btn5)
    bot.send_message(message.chat.id, 'Здравствуйте!', reply_markup=markup)


@bot.message_handler(func=lambda message: True)
def on_click(message):
    if message.text == 'Абонименты':
        bot.send_message(message.chat.id, 'Действующие абонименты:')
    elif message.text == 'Запись':
        bot.send_message(message.chat.id, 'Запись:')
    elif message.text == 'Акции':
        bot.send_message(message.chat.id, 'Действующие акции:')
    elif message.text == 'Правила':
        bot.send_message(message.chat.id, 'Правила:')
    elif message.text == 'Адрес':
        bot.send_message(message.chat.id, 'Адрес:')
    else:
        bot.send_message(message.chat.id, 'Пожалуйста, выберите один из предложенных вариантов.')


bot.polling(non_stop=True)
→ Ссылка
Автор решения: TheDEKK

Я тоже сталкивался с такой проблемой. Решал ее тем, что просто добавлял в функцию с первым реагированием на кнопку:

if call.data == 'Первой имя лямбы функции':
    bot.send_message(call.message.chat.id, text='Текст 1')
elif call.data == 'Имя лямбы функции':
    bot.send_message(call.message.chat.id, text='Текст 2')
→ Ссылка