telebot inline buttons
Я новичок и у меня есть вопрос. Мне нужно, чтобы после нажатия на встроенную кнопку осуществлялся переход в новый блок с новой встроенной кнопкой и... Вот мой код. Проблема в том, что обработчик не работает при нажатии на вторую кнопку, которую я создал в первом обработчике...
import telebot
from telebot import types
TOKEN = ''
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['start'])
def send_welcome(message):
kb = types.InlineKeyboardMarkup(row_width=1)
btn_types = types.InlineKeyboardButton(text='label1', callback_data='btn_types')
kb.add(btn_types)
bot.send_message(message.chat.id, "text",
reply_markup=kb)
@bot.callback_query_handler(func=lambda callback: True)
def check_callback_data(callback):
if callback.message:
if callback.data == 'btn_types':
file = open('photo1.jpg', 'rb')
kb = types.InlineKeyboardMarkup(row_width=1)
btn_types1 = types.InlineKeyboardButton(text='label1', callback_data='btn_types1')
kb.add(btn_types1)
bot.send_photo(callback.message.chat.id, file,'text',reply_markup=kb)
@bot.callback_query_handler(func=lambda callback: True)
def check_callback1_data(callback):
if callback.message:
if callback.data == 'btn_types1':
file = open('photo2.jpg', 'rb')
kb = types.InlineKeyboardMarkup(row_width=1)
btn_types2 = types.InlineKeyboardButton(text='label2', callback_data='btn_types2')
kb.add(btn_types2)
bot.send_photo(callback.message.chat.id, file,'text',
reply_markup=kb)
bot.infinity_polling()
Ответы (1 шт):
Автор решения: M141
→ Ссылка
Отредактировал Ваш код. Я объединил Ваши обработчики в один, конфликтов более быть не должно. Все будет переходить, таким образом, как Вы и зададите в дальнейшем. На данный момент блоки переходят от 0 к 1, от 1 к 2 (но переход со второго блока еще на описан).
Вот код решения:
import telebot
from telebot import types
API_TOKEN = '{Ваш токен}'
bot = telebot.TeleBot(API_TOKEN)
# Переместил Ваши кнопки и клавиатуры отдельно от кода.
kb = types.InlineKeyboardMarkup(row_width=1)
btn_types = types.InlineKeyboardButton(text='label1', callback_data='btn_types')
kb.add(btn_types)
kb1 = types.InlineKeyboardMarkup(row_width=1)
btn_types1 = types.InlineKeyboardButton(text='label1', callback_data='btn_types1')
kb1.add(btn_types1)
kb2 = types.InlineKeyboardMarkup(row_width=1)
btn_types2 = types.InlineKeyboardButton(text='label2', callback_data='btn_types2')
kb2.add(btn_types2)
@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.send_message(message.chat.id, "text", reply_markup=kb)
# Функция callback_query_handler вносится один раз для обработки всех событий
@bot.callback_query_handler(func=lambda call: True)
def answer(call):
if call.data == 'btn_types':
file = open('photo1.jpg', 'rb')
bot.send_photo(call.message.chat.id, file, 'text', reply_markup=kb1)
elif call.data == 'btn_types1':
file = open('photo2.jpg', 'rb')
bot.send_photo(call.message.chat.id, file, 'text', reply_markup=kb2) # Переход дальше не настроен, вы можете ссылаться на свои дальнейшие блоки или же вернуться к главному меню.
if __name__ == '__main__':
# schedule.every().day.at('22:11').do(send_message)
# Thread(target=schedule_checker).start()
bot.polling(none_stop=True)
Успехов :)