многоуровневое меню телеграм бота ( inline — callback = answer) на python?
Проблема заключается в том, что при коде (представленном ниже), answer = 9 и 10 не отсылают ответ. answer 11 отсылает ответ. но если добавить answer 12, то answer 9,10,11 не отсылает ответ, а только 12-й. Проще говоря отсылается только последний answer.
import telebot
import emoji
from telebot import types
bot = telebot.TeleBot (TOKEN)
@bot.message_handler(commands=['start', 'help'])
def start_message(message):
markup = telebot.types.InlineKeyboardMarkup()
markup.add(telebot.types.InlineKeyboardButton(text='Свобода', callback_data=1))
markup.add(telebot.types.InlineKeyboardButton(text='Новая волна', callback_data=2))
markup.add(telebot.types.InlineKeyboardButton(text='Техно', callback_data=3))
markup.add(telebot.types.InlineKeyboardButton(text='На офисе', callback_data=4))
markup.add(telebot.types.InlineKeyboardButton(text='Надежда', callback_data=5))
markup.add(telebot.types.InlineKeyboardButton(text='Надежда Он-лайн', callback_data=6))
markup.add(telebot.types.InlineKeyboardButton(text='Центр', callback_data=7))
markup.add(telebot.types.InlineKeyboardButton(text='Волжский', callback_data=8))
key = types.InlineKeyboardMarkup()
bot.send_message(message.chat.id, 'Здравствуй, ' + message.from_user.first_name + '. Я помогу подобрать тебе ближайшее собрание', reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def query_handler(call):
bot.answer_callback_query(callback_query_id=call.id, text='Минуточку, готовлю список!')
answer = ''
if call.data == '1':
key = types.InlineKeyboardMarkup()
but_1 = types.InlineKeyboardButton(text="Закрытое", callback_data="9")
but_2 = types.InlineKeyboardButton(text="Открытое", callback_data="10")
but_3 = types.InlineKeyboardButton(text="Рабочее", callback_data="11")
key.add(but_1, but_2, but_3)
bot.send_message(call.message.chat.id, 'Выбери тип собрания', reply_markup=key)
elif call.data == '2':
key = types.InlineKeyboardMarkup()
but_1 = types.InlineKeyboardButton(text="Закрытое", callback_data="12")
but_2 = types.InlineKeyboardButton(text="Открытое", callback_data="13")
but_3 = types.InlineKeyboardButton(text="Рабочее", callback_data="14")
key.add(but_1, but_2, but_3)
bot.send_message(call.message.chat.id, 'Выбери тип собрания', reply_markup=key)
elif call.data == '3':
key = types.InlineKeyboardMarkup()
but_1 = types.InlineKeyboardButton(text="Закрытое", callback_data="15")
but_2 = types.InlineKeyboardButton(text="Открытое", callback_data="16")
but_3 = types.InlineKeyboardButton(text="Рабочее", callback_data="17")
key.add(but_1, but_2, but_3)
bot.send_message(call.message.chat.id, 'Выбери тип собрания', reply_markup=key)
elif call.data == '4':
key = types.InlineKeyboardMarkup()
but_1 = types.InlineKeyboardButton(text="Закрытое", callback_data="18")
but_2 = types.InlineKeyboardButton(text="Открытое", callback_data="19")
but_3 = types.InlineKeyboardButton(text="Рабочее", callback_data="20")
key.add(but_1, but_2, but_3)
bot.send_message(call.message.chat.id, 'Выбери тип собрания', reply_markup=key)
elif call.data == '5':
key = types.InlineKeyboardMarkup()
but_1 = types.InlineKeyboardButton(text="Закрытое", callback_data="21")
but_2 = types.InlineKeyboardButton(text="Открытое", callback_data="22")
but_3 = types.InlineKeyboardButton(text="Рабочее", callback_data="23")
key.add(but_1, but_2, but_3)
bot.send_message(call.message.chat.id, 'Выбери тип собрания', reply_markup=key)
elif call.data == '6':
key = types.InlineKeyboardMarkup()
but_1 = types.InlineKeyboardButton(text="Закрытое", callback_data="24")
but_2 = types.InlineKeyboardButton(text="Открытое", callback_data="25")
but_3 = types.InlineKeyboardButton(text="Рабочее", callback_data="26")
key.add(but_1, but_2, but_3)
bot.send_message(call.message.chat.id, 'Выбери тип собрания', reply_markup=key)
elif call.data == '7':
key = types.InlineKeyboardMarkup()
but_1 = types.InlineKeyboardButton(text="Закрытое", callback_data="27")
but_2 = types.InlineKeyboardButton(text="Открытое", callback_data="28")
but_3 = types.InlineKeyboardButton(text="Рабочее", callback_data="29")
key.add(but_1, but_2, but_3)
bot.send_message(call.message.chat.id, 'Выбери тип собрания', reply_markup=key)
key = types.InlineKeyboardMarkup()
elif call.data == '8':
key = types.InlineKeyboardMarkup()
but_1 = types.InlineKeyboardButton(text="Закрытое", callback_data="30")
but_2 = types.InlineKeyboardButton(text="Открытое", callback_data="31")
but_3 = types.InlineKeyboardButton(text="Рабочее", callback_data="32")
key.add(but_1, but_2, but_3)
bot.send_message(call.message.chat.id, 'Выбери тип собрания', reply_markup=key)
if call.data == '9':
answer = '\U0001F695 адрес.\n \U0001F3EB Группа "Свобода"\n \U0001F4C5 Понедельник, Среда, Пятница.\n \U0001F554 Начало в 18.00!'
elif call.data == '10':
answer = 'Открытые собрания временно не проводятся'
elif call.data == '11':
answer = 'Рабочее собрание проводится каждую последнюю пятницу месяца'
bot.send_message(call.message.chat.id, answer)
if __name__ == '__main__':
bot.polling(none_stop=True, interval=0)
Ответы (1 шт):
Автор решения: RahmaN
→ Ссылка
Попробуйте убрать 4 пробела (или один символ табуляции) перед bot.send_message(call.message.chat.id, answer).
Потому что, если этого не сделать, то эта строка будет относиться к последнему elif-блоку.