не работают встроенные кнопки python telebot api, срочно!! проект горит
проблема заключается в том, что работает лишь одна кнопка ( elif callback.data == 'brush': markup_sale = types.InlineKeyboardMarkup())
но не работает вторая (elif callback.data == 'font': markup_font = types.InlineKeyboardMarkup())
import telebot
from telebot import types
bot = telebot.TeleBot('токен')
#стартовый текст
@bot.message_handler(commands=['start'])
def start(message):
#вывод и расположение кнопок главного меню
markup = types.InlineKeyboardMarkup()
btn_help = types.InlineKeyboardButton(text='Поддержка ?', url='https://t.me/текст')
btn_my_tgc = types.InlineKeyboardButton(text='Наш телеграмм канал ?', url='https://t.me/текст') # переставить тг канал
btn_shop = types.InlineKeyboardButton(text='Товары ?', callback_data='store')
markup.add(btn_shop, btn_help)
markup.add(btn_my_tgc)
#Основной приветственный текст
bot.send_photo(message.chat.id, photo=open('photo/xd.jpg', 'rb'), reply_markup=markup)
#Обработчик кнопок
@bot.callback_query_handler(func=lambda callback: True)
def callback_massage(callback):
#Человек нажал на кнопку товары
if callback.data == 'store':
# создание, вывод и расположение кнопок, с выбором города
markup_home = types.InlineKeyboardMarkup()
btn_font = types.InlineKeyboardButton(text='Шрифты', callback_data='font') #volkhov1
btn_brush = types.InlineKeyboardButton(text='Кисти', callback_data='brush') #volkhov2
btn_texture = types.InlineKeyboardButton(text='Текстуры', callback_data='texture') #syas
btn_home = types.InlineKeyboardButton(text='В главное меню ?', callback_data='back')
markup_home.add(btn_font, btn_brush, btn_texture)
markup_home.add(btn_home)
# Выводим человеку кнопки, а так же текст и фото
bot.delete_message(callback.message.chat.id, callback.message.message_id)
bot.send_photo(message.chat.id, photo=open('photo/dx.jpg', 'rb'), reply_markup=markup_home)
#пользователь нажал на шрифт, !!!СПИСОК ТОВАРОВ ДЛЯ шрифтов!!!!
elif callback.data == 'font':
markup_font = types.InlineKeyboardMarkup()
#список шрифтов (постоянно обнавлять)
tovar1 = types.InlineKeyboardButton(text='Шрифт 1 | 499р', callback_data='font_tovar1')
tovar2 = types.InlineKeyboardButton(text='Шрифт 2 | 499р', callback_data='font_tovar2')
tovar3 = types.InlineKeyboardButton(text='Шрифт 3 | 499р', callback_data='font_tovar3')
tovar4 = types.InlineKeyboardButton(text='Шрифт 4 | 499р', callback_data='font_tovar4')
markup_font.add(tovar1)
markup_font.add(tovar2)
markup_font.add(tovar3)
markup_font.add(tovar4)
#пользователь нажал на кисти
elif callback.data == 'brush':
markup_sale = types.InlineKeyboardMarkup()
#список
tovar1 = types.InlineKeyboardButton(text='Кисть 1 | 499р', callback_data='brush_tovar1')
tovar2 = types.InlineKeyboardButton(text='Кисть 2 | 499р', callback_data='brush_tovar2')
tovar3 = types.InlineKeyboardButton(text='Кисть 3 | 499р', callback_data='brush_tovar3')
tovar4 = types.InlineKeyboardButton(text='Кисть 4 | 499р', callback_data='brush_tovar4')
markup_sale.add(tovar1)
markup_sale.add(tovar2)
markup_sale.add(tovar3)
markup_sale.add(tovar4)
#кнопка "в главное меню", а так же фотка
btn_home = types.InlineKeyboardButton(text='В главное меню ?', callback_data='back')
markup_sale.add(btn_home)
bot.delete_message(callback.message.chat.id, callback.message.message_id)
bot.send_photo(message.chat.id, photo=open('photo/meow.jpg', 'rb'), reply_markup=markup_sale)
# ПРИ ВЫБОРЕ
elif callback.data == 'volkhov_tovar1':
bot.send_message(message.chat.id, '<b>текст</b>', parse_mode='html')
#Кнопка "В главное меню"
elif callback.data == 'back':
bot.delete_message(callback.message.chat.id, callback.message.message_id)
bot.send_photo(message.chat.id, photo=open('photo/xd.jpg', 'rb'), reply_markup = markup)
#Добавить возможность создавать рассылку
#команда хелп
@bot.message_handler(commands=['help'])
def main(message):
bot.send_message(message.chat.id, '<b>текст для помощи', parse_mode='html')
#чтобы бот не оффался
bot.polling(none_stop=True)
Ответы (1 шт):
Автор решения: ikikaidesu
→ Ссылка
Суть проблемы в том что в вашем декораторе вы не указываете какие именно call-запросы принимаете из-за чего он все воспринимает как один.
Сделаете функцию callback_massage глобальной(переместите ниже на уровень с функцией start).
Укажите в декораторе обработок call-запросов какие-именно вы принимаете
@bot.callback_query_handler(func=lambda call: call.data in ['store', 'font'...])