Telebot при попытке вызова функции через bot.reg._next_step_handler() выдаёт AttributeError: 'CallbackQuery' object has no attribute 'chat'

На днях делал небольшой текстовый квест для телеграм бота. Столкнулся с проблемой. При попытке вызова функции через bot.register_next_step_handler() выдаёт AttributeError: 'CallbackQuery' object has no attribute 'chat'. В вызове попробовал вместо аргумента message поставить call.message, но эта затея оказалась безуспешной. Заранее благодарю! Вот код проблемной зоны (на фиксацию попаданий можете не обращать внимания):

@bot.callback_query_handler(func=lambda call: call.data == '1')
def part1_1(message):
    global game_status
    global do_it
    game_status = 1
    if do_it == True:
        bot.send_message(message.from_user.id, 'текст')
        do_it = False
        bot.register_next_step_handler(message, mini_game)
    
@bot.message_handler(content_types = ['text'])        
def mini_game(message):
#инициализируем локальные переменные игры  и несколько глобальных
    global do_it
    global hp_boss
    global your_hp
    global item
    global game_active
    do_it = False
    game_active = True
    print(do_it) 
    #цикл игры
    while game_active == True:
        mini_game_obr(message)
#здесь ошибка
        bot.register_next_step_handler(message, update_game)
        
        
        
@bot.message_handler(content_types = ['text'])      
def mini_game_obr(message):  
    global do_it
    global hp_boss
    global your_hp
    global item
    global game_active
    max_hp = 100
    rand_enemy = randint(1, 100)
    rand = randint(1, 100)
    print(message.text)            
    #обработка нажатий       
    if users_text == '1':
        #"перемешиваем" значение переменной
        rand = randint(1, 100)
        #фиксация попаданий и промахов
        if rand <= 60:                        
            hp_boss -= 15
            bot.send_message(message.from_user.id, 'Вы попали!')
            print(users_text)
            mini_game(message)
            rand = randint(1, 100)
            
        else:                        
            rand = randint(1, 100)
            bot.send_message(message.from_user.id, 'Неудача!')
            rand_enemy = randint(1, 100)
            if rand_enemy <= 50:
                your_hp -= 20
                bot.send_message(message.from_user.id, 'Вас ранили!')
                print(users_text)
               
                time.sleep(2)
            else:
                bot.send_message(message.from_user.id, 'Вы увернулись!')
                print(users_text)
              
                time.sleep(2)
                        
        #Проверяем, победил ли игрок...    
        if hp_boss <= 0:
            bot.send_message(message.from_user.id, 'Вы победили!')
            print(message.text)
            
            time.sleep(3)
            
            if game_status == 1:
                part1_2(message)
                message.text = ""
                game_active = False
            else:
                part2()
                message.text = ""
                game_active = False
            
        if your_hp <= 0:
            bot.send_message(message.from_user.id, 'Вы погибли! Если захотите попробовать ещё раз, то пропишите команду /start')  
            print(message.text)
            message.text = ""
            
            game_active = False
    elif message.text == '2':
        rand = randint(1, 100)
        if rand <= 70:                       
            hp_boss -= 10  
            bot.send_message(message.from_user.id, 'Вы попали!')
            print(message.text)
            
            rand = randint(1, 100)
        else:                        
            rand = randint(1, 100)
            bot.send_message(message.from_user.id, 'Неудача!') 
            rand_enemy = randint(1, 100)
            if rand_enemy <= 50:
                your_hp -= 20
                bot.send_message(message.from_user.id, 'Вас ранили!')
                print(message.text)
                
                time.sleep(2)
            else:
                bot.send_message(message.from_user.id, 'Вы увернулись!')
                print(message.text)
                
                time.sleep(2)
                            
                            
        if hp_boss <= 0:
            bot.send_message(message.from_user.id, 'Вы победили!')
            print(message.text)
            message.text = ""
            time.sleep(3)
            if game_status == 1:
                part1_2()
                game_active = False
            else:
                part2()
                game_active = False
        if your_hp <= 0:
            bot.send_message(message.from_user.id, 'Вы погибли! Если захотите попробовать ещё раз, то пропишите команду /start')
            print(message.text)
            message.text = ""
            game_active = False
    elif message.text == '3':
        rand = randint(1, 100)
        if rand <= 40:
            hp_boss -= 60
            bot.send_message(message.from_user.id, 'Вы попали!')
            print(message.text)
            
            rand = randint(1, 100)
        else:
            rand = randint(1, 100)
            bot.send_message(message.from_user.id, 'Неудача!')
            rand_enemy = randint(1, 100)
            if rand_enemy <= 50:
                your_hp -= 20
                bot.send_message(message.from_user.id, 'Вас ранили!')
                print(message.text)
                
                time.sleep(2)
            else:
                bot.send_message(message.from_user.id, 'Вы увернулись!')
                print(message.text)
                
                time.sleep(2)
                            
                            
                            
        if hp_boss <= 0:
            bot.send_message(message.from_user.id, 'Вы победили!')
            print(message.text)                 
            time.sleep(3) 
            message.text = ""
            if game_status == 1:
                part1_2()
                game_active = False
            else:
                part2()
                game_active = False
        if your_hp <= 0:
            bot.send_message(message.from_user.id, 'Вы погибли! Если захотите попробовать ещё раз, то пропишите команду /start')
            print(message.text)
            message.text = ""
            game_active = False
                
    elif message.text == '4':
        rand = randint(1, 100)
        if rand <= 20:
            hp_boss -= 80
            bot.send_message(message.from_user.id, 'Вы попали!')
            print(message.text)
            
            rand = randint(1, 100)
        else:
            rand = randint(1, 100)
            time.sleep(2)
            rand_enemy = randint(1, 100)
            if rand_enemy <= 50:
                your_hp -= 20  
                bot.send_message(message.from_user.id, 'Вас ранили!')
                print(message.text)
                
                time.sleep(2)
            else:
                bot.send_message(message.from_user.id, 'Вы увернулись!')
                print(message.text)
                
                time.sleep(2)
        if hp_boss <= 0:
            bot.send_message(message.from_user.id, 'Вы победили!')
            print(message.text)
            message.text = ""
            time.sleep(3)
            
            if game_status == 1:
                part1_2()
                game_active = False
            else:
                part2()
                game_active = False
        if your_hp <= 0:
            bot.send_message(message.from_user.id, 'Вы погибли! Если захотите попробовать ещё раз, то пропишите команду /start')
            print(message.text)
            message.text = ""
            game_active = False           
    elif message.text == '5':
        #проверяем, здоров ли игрок
        if your_hp < 100:
            if item > 0:
                item -= 1
                #защита от прибавления здоровья больше чем 100%
                if your_hp >= 71:
                    your_hp += max_hp - your_hp
                elif your_hp <= 70:
                    your_hp += 30
            else:
                bot.send_message(message.from_user.id, 'у вас нет лекарств!')
        else:
            bot.send_message(message.from_user.id, 'Вы здоровы!')
        rand_enemy = randint(1, 100)
        if rand_enemy <= 50:
            your_hp -= 20 
            bot.send_message(message.from_user.id, 'Вас ранили!')
            print(message.text)
           
            time.sleep(2)
        else:
            bot.send_message(message.from_user.id, 'Вы увернулись!')
            print(message.text)
           
            time.sleep(2)
        if your_hp <= 0:
            bot.send_message(message.from_user.id, 'Вы погибли! Если захотите попробовать ещё раз, то пропишите команду /start')
            print(message.text)
            message.text = ""
            game_active = False
    else:
        bot.send_message(message.from_user.id, 'Пришлите действительный вариант ответа!')
        print(message.text)
        
@bot.message_handler(content_types = ['text']) 
def update_game(message):
    global hp_boss
    global your_hp
    bot.send_message(message.from_user.id, 'Ударить:')    
    bot.send_message(message.from_user.id, '1. В ногу')
    bot.send_message(message.from_user.id, '2. В руку')
    bot.send_message(message.from_user.id, '3. В торс')
    bot.send_message(message.from_user.id, '4. В голову')
    bot.send_message(message.from_user.id, '5. Использовать лекарство')
    bot.send_message(message.from_user.id, 'Ваше здоровье:')
    bot.send_message(message.from_user.id, your_hp)
    bot.send_message(message.from_user.id, 'Здоровье противника:')
    bot.send_message(message.from_user.id, hp_boss)
    bot.send_message(message.from_user.id, '*Чтобы ударить введитеномер ответа')
#здесь ошибка
    bot.register_next_step_handler(message, mini_game)

def part1_2(message):
    print("Это первая часть")
def part2():
    print("Это вторая глава")

bot.polling(none_stop = True,  interval=0)

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

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

Ошибка скорее всего не в bot.register_next_step_handler(message, update_game), а в @bot.callback_query_handler(func=lambda call: call.data == '1').

Обрабатывать вызовы нужно в одном обработчике, попробуйте прописать вместо первой строчки это : @bot.callback_query_handler(func=lambda call:True)

→ Ссылка