Не могу понять почему не работает callback_query_handler, у меня нет опыта в этом, помогите пж. python telebot

bot = telebot.TeleBot(token)

proverka = 0


@bot.message_handler(commands=['start', 'help'])
def start(message):
    global proverka
    bot.send_message(message.chat.id, 'Привет!')
    proverka = 0

    game(message)

def game(message):

    markup = telebot.types.InlineKeyboardMarkup()
    markup.add(telebot.types.InlineKeyboardButton(text='Угадай число', callback_data='угадай'))
    markup.add(telebot.types.InlineKeyboardButton(text='Реши за 2 секунды', callback_data='реши2'))
    bot.send_message(message.chat.id, text="Выберите игру: ", reply_markup=markup)



@bot.callback_query_handler(func=lambda call: True)
def ans(call):
    message = call.message

    global proverka

    if proverka == 0:
        if call.data == 'угадай':
            bot.register_next_step_handler(message, go1)


    elif proverka == 1:
        if call.data == 'да':
            ram = randint(0,2)
            markup = telebot.types.InlineKeyboardMarkup()
            markup.add(telebot.types.InlineKeyboardButton(text='0', callback_data='0'))
            markup.add(telebot.types.InlineKeyboardButton(text='1', callback_data='1'))
            markup.add(telebot.types.InlineKeyboardButton(text='2', callback_data='2'))
            bot.send_message(call.message.chat.id, text="Какое число я загадал?", reply_markup=markup)
            proverka = 2

    if  proverka == 2:

        if call.data == ram:
            bot.send_message(call.message.chat.id, 'Правильно!')
        else:
            bot.send_message(call.message.chat.id, 'Неправильно, попробуйте еще раз! \nУ вас получится!')


def go1(message):
    global proverka
    proverka = 1

    markup = telebot.types.InlineKeyboardMarkup()
    markup.add(telebot.types.InlineKeyboardButton(text='Да', callback_data='да'))
    
   markup.add(telebot.types.InlineKeyboardButton(text='Нет',callback_data='нет'))
    bot.send_message(message.chat.id, text="Готов?", reply_markup=markup)

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

Автор решения: DisanD_08

Вот вам код, который я немного переделал, сейчас я вам все объясню, что да как

bot = telebot.TeleBot(token)

@bot.message_handler(commands=['start', 'help'])
def start(message):
    bot.send_message(message.chat.id, 'Привет!')

    game(message)

def game(message):
    markup = telebot.types.InlineKeyboardMarkup()
    markup.add(telebot.types.InlineKeyboardButton(text='Угадай число', callback_data='угадай'))
    markup.add(telebot.types.InlineKeyboardButton(text='Реши за 2 секунды', callback_data='реши2'))
    bot.send_message(message.chat.id, text="Выберите игру: ", reply_markup=markup)

@bot.callback_query_handler(func=lambda call: True)
def ans(call):
    ram = randint(0,2)

    if call.data == 'угадай':
        markup = telebot.types.InlineKeyboardMarkup()
        markup.add(telebot.types.InlineKeyboardButton(text='Да', callback_data='да'))
        markup.add(telebot.types.InlineKeyboardButton(text='Нет',callback_data='нет'))
        bot.send_message(call.message.chat.id, text="Готов?", reply_markup=markup)

    if call.data == 'да':
        markup = telebot.types.InlineKeyboardMarkup()
        markup.add(telebot.types.InlineKeyboardButton(text='0', callback_data='0'))
        markup.add(telebot.types.InlineKeyboardButton(text='1', callback_data='1'))
        markup.add(telebot.types.InlineKeyboardButton(text='2', callback_data='2'))
        bot.send_message(call.message.chat.id, text="Какое число я загадал?", reply_markup=markup)

    if call.data == '0':
        if ram == 0:
            bot.send_message(call.message.chat.id, 'Правильно!')
        else:
            bot.send_message(call.message.chat.id, 'Неправильно, попробуйте еще раз! \nУ вас получится!')
    if call.data == '1':
        if ram == 1:
            bot.send_message(call.message.chat.id, 'Правильно!')
        else:
            bot.send_message(call.message.chat.id, 'Неправильно, попробуйте еще раз! \nУ вас получится!')
    if call.data == '2':
        if ram == 2:
            bot.send_message(call.message.chat.id, 'Правильно!')
        else:
            bot.send_message(call.message.chat.id, 'Неправильно, попробуйте еще раз! \nУ вас получится!')

Первое на что я хочу обратить ваше внимание, это отсутствие proverka = 0 и всего что к нему идет, так как на меня это не нужная проверка, и она здесь вообще не нужно, так как call.data и сама справляется

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

if call.data == '0':
if call.data == '1':
if call.data == '2':

Следующий момент, я убрал

def go1(message):
    global proverka
    proverka = 1

    markup = telebot.types.InlineKeyboardMarkup()
    markup.add(telebot.types.InlineKeyboardButton(text='Да', callback_data='да'))
    
    markup.add(telebot.types.InlineKeyboardButton(text='Нет',callback_data='нет'))
    bot.send_message(message.chat.id, text="Готов?", reply_markup=markup)

так-как из-за него бот ждет не нужный текст, и заменил эти кнопки на прямую к кнопке "угадай"

Что-бы не выдавало ошибки local variable 'ram' referenced before assignment переместил ram = randint(0,2) выше по коду

Еще можно избавиться от функции def game(message), но это уже если вы сами захотите(если что, код будет такой):

@bot.message_handler(commands=['start', 'help'])
def start(message):
    bot.send_message(message.chat.id, 'Привет!')
    markup = telebot.types.InlineKeyboardMarkup()
    markup.add(telebot.types.InlineKeyboardButton(text='Угадай число', callback_data='угадай'))
    markup.add(telebot.types.InlineKeyboardButton(text='Реши за 2 секунды', callback_data='реши2'))
    bot.send_message(message.chat.id, text="Выберите игру: ", reply_markup=markup)

По-сути оно будет делать тоже самое Надеюсь смог вам помочь =)

→ Ссылка