@Danzx

Не работает callback при создании телеграм бота, что делать?

Не могу заставить работать колбек. Первый "уровень колбэка работает и инлайн-кнопки работают. А из сообщения что создаёт колбэ, инлайн кнопки не работают в нём (bts2 и bts1 работают, а startzen нет)
import telebot
from telebot import types

bot = telebot.TeleBot('5231123752:ANKVnHECHo-2VW_9w3Y')


@bot.message_handler(commands=['start'])
async def start(message):
    markup = types.InlineKeyboardMarkup()
    bt1 = types.InlineKeyboardButton(text='Хочу начать зарабатывать на Дзен',
                                             callback_data='bts1')
    bt2 = types.InlineKeyboardButton(text='Я уже автор Дзена', callback_data='bts2')

    markup.add(bt1)
    markup.add(bt2)

    bot.send_photo(message.chat.id, open('лого с сиянием.jpg', 'rb'),
                   f'Добро пожаловать, <b>{message.from_user.first_name} {message.from_user.last_name}</b>,'
                   f'\nЯ бот-помощник - твой проводник к познанию Дзена.'
                   f'\n'
                   f'\nПрежде чем мы продолжим дальше, давай ты расскажешь о себе?'
                   f' Ты уже автор Дзена или только хочешь <b> начать зарабатывать на Дзене и познать главную тайну Дзен?</b>',
                   parse_mode='html',reply_markup=markup)



# Как набрать 100 подписчиков
@bot.callback_query_handler(func=lambda callback: True)
async def srt(callback):
    if callback.data == "bts2":
        markup = types.InlineKeyboardMarkup()
        bt1 = types.InlineKeyboardButton(text='Как набрать 100 подписчиков?',
                                         callback_data='bt1')
        bt2 = types.InlineKeyboardButton(text='Взаимные подписки', callback_data='2')
        bt3 = types.InlineKeyboardButton(text='Покупка/продажа каналов', callback_data='bt3')
        bt4 = types.InlineKeyboardButton(text='Полезные статьи✍', callback_data='bt4')
        bt5 = types.InlineKeyboardButton(text='Наш магазин', callback_data='bt5')
        bt6 = types.InlineKeyboardButton(text='Полезные сервисы для авторов', callback_data='bt6')
        bt7 = types.InlineKeyboardButton(text='Вакансии', callback_data='bt7')
        markup.add(bt1)
        markup.add(bt2)
        markup.add(bt3)
        markup.add(bt4, bt5)
        markup.add(bt6)
        markup.add(bt7)
        bot.send_photo(callback.message.chat.id, open('бот дзен.jpg', 'rb'),
                       f'Добро пожаловать, <b>{callback.message.from_user.first_name} {callback.message.from_user.last_name}</b>,'
                       f'\n'
                       f'\n'
                       f'\nТак что, куда пойдём дальше?',
                       parse_mode='html', reply_markup=markup)
    elif callback.data == "bts1":
        markup = types.InlineKeyboardMarkup()
        str2 = types.InlineKeyboardButton(text='Начать знакомство',
                                         callback_data='startzen')
        markup.add(str2)
        bot.send_photo(callback.message.chat.id, open('с чего начать.jpg', 'rb'),
                       f' Сейчас я проведу тебе экскурсию по нашему храму тайинства, хы хы,'
                       f'и расскажу что такое Дзен, как его постичь и как начать на нем зарабатывать'
                       f'\n'
                       f'\n<b>Экскурсия будет быстрой и уже через 5 минут'
                       f'ты начнёшь вести свой канал </b>'
                       f'\n'
                       f'\nТак что, ты готов?',
                       parse_mode='html', reply_markup=markup)

@bot.callback_query_handler(func=lambda callback1: True)
async def s1rt(callback1):
    if callback1.data == "startzen":
        markup1 = types.InlineKeyboardMarkup()
        bt11 = types.InlineKeyboardButton(text='Как набрать 100 подписчиков?',
                                          callback_data='btss1')
        bt21 = types.InlineKeyboardButton(text='Взаимные подписки', callback_data='2ss')
        bt31 = types.InlineKeyboardButton(text='Покупка/продажа каналов', callback_data='bsssst3')
        bt41 = types.InlineKeyboardButton(text='Полезные статьи✍', callback_data='bsssst4')
        bt51 = types.InlineKeyboardButton(text='Наш магазин', callback_data='bssst5')
        bt61 = types.InlineKeyboardButton(text='Полезные сервисы для авторов', callback_data='bssst6')
        bt71 = types.InlineKeyboardButton(text='Вакансии', callback_data='btsss7')
        markup1.add(bt11)
        markup1.add(bt21)
        markup1.add(bt31)
        markup1.add(bt41, bt51)
        markup1.add(bt61)
        markup1.add(bt71)
        bot.send_photo(callback1.message.chat.id, open('бот дзен.jpg', 'rb'),
                       f'Добро пожаловать, <b>{callback1.message.from_user.first_name} {callback1.message.from_user.last_name}</b>,'
                       f'\n'
                       f'\n'
                       f'\nТак что, куда пойдём дальше?',
                       parse_mode='html', reply_markup=markup1)
    elif callback1.data == "bts12":
        markup1 = types.InlineKeyboardMarkup()
        str22 = types.InlineKeyboardButton(text='Начать знакомство',
                                           callback_data='startzen')
        markup1.add(str22)
        bot.send_photo(callback1.message.chat.id, open('с чего начать.jpg', 'rb'),
                       f' Сейчас я проведу тебе экскурсию по нашему храму тайинства, хы хы,'
                       f'и расскажу что такое Дзен, как его постичь и как начать на нем зарабатывать'
                       f'\n'
                       f'\n<b>Экскурсия будет быстрой и уже через 5 минут'
                       f'ты начнёшь вести свой канал </b>'
                       f'\n'
                       f'\nТак что, ты готов?',
                       parse_mode='html', reply_markup=markup1)


# Как набрать 100 подписчиков
  • Вопрос задан
  • 854 просмотра
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
И не будет работать. У тебя два обработчика с одинаковым фильтром. Использоваться будет первый, в нём обрабатывается только bts2 и bts1. Решения:

1. Или переместить содержание второго обработчика в первый.

2. Или в обработчике сделать более узкий фильтр, например:

@bot.callback_query_handler(func=lambda call: call.data.startswith('bts'))
...

@bot.callback_query_handler(func=lambda call: call.data == 'startzen')
...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы