call.data проблемы в телеграм боте как сделать что бы call.data сработала внутри цикла

Как сделать что бы внутри цикла принималась последний call.data, а не первоначальный главный call.data

@bot.callback_query_handler(func=lambda call: True)
def wellll_in_the_aki(call):
    if call.data == 'g11':
        q = aki.start_game(language='ru')

        serts = types.InlineKeyboardMarkup(row_width=3)
        item1 = types.InlineKeyboardButton('иа', callback_data='y')
        item2 = types.InlineKeyboardButton("жоқ", callback_data='n')
        item3 = types.InlineKeyboardButton("idk(білмеймін)", callback_data='idk')
        item4 = types.InlineKeyboardButton("back", callback_data='back')

        serts.add(item1, item3, item2, item4)

        while aki.progression <= 80:

            photo1 = open('staies/maxresdefault.jpg', 'rb')
            photo2 = open('staies/maxresdefault22.jpg', 'rb')

            photochange = [photo1, photo2]

            bot.send_photo(call.message.chat.id, random.choice(photochange))
            bot.send_message(call.message.chat.id, q + "\n\t", reply_markup=serts)
            sleep(5)

            if call.data == "back":
                try:
                    q = aki.back()
                except akinator.CantGoBackAnyFurther:
                    pass
            elif call.data == "y":
                q = aki.answer("yes")

            elif call.data == "n":
                q = aki.answer("no")

            elif call.data == "idk":
                q = aki.answer("idk")
            else:
                bot.send_message(call.message.chat.id, call.data)

        aki.win()

        bot.send_message(call.message.chat.id,
                         f"Это {aki.first_guess['name']} ({aki.first_guess['description']})! Я прав?\n{aki.first_guess['absolute_picture_path']}\n\t")
    
        bot.answer_callback_query(callback_query_id=call.id, show_alert=False, text="?")


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

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

Ваша проблема заключается в том, что вы проверяете call.data внутри ещё одной проверки call.data, вам нужно сместить внутренние проверки на уровень основной функции, к примеру так:

    if call.data == 'g11':
        q = aki.start_game(language='ru')

        serts = types.InlineKeyboardMarkup(row_width=3)
        item1 = types.InlineKeyboardButton('иа', callback_data='y')
        item2 = types.InlineKeyboardButton("жоқ", callback_data='n')
        item3 = types.InlineKeyboardButton("idk(білмеймін)", callback_data='idk')
        item4 = types.InlineKeyboardButton("back", callback_data='back')

        serts.add(item1, item3, item2, item4)

    while aki.progression <= 80:

        photo1 = open('staies/maxresdefault.jpg', 'rb')
        photo2 = open('staies/maxresdefault22.jpg', 'rb')

        photochange = [photo1, photo2]

        bot.send_photo(call.message.chat.id, random.choice(photochange))
        bot.send_message(call.message.chat.id, q + "\n\t", reply_markup=serts)
        sleep(5)

        if call.data == "back":
            try:
                q = aki.back()
            except akinator.CantGoBackAnyFurther:
                pass
        elif call.data == "y":
            q = aki.answer("yes")

        elif call.data == "n":
            q = aki.answer("no")

        elif call.data == "idk":
            q = aki.answer("idk")
        else:
            bot.send_message(call.message.chat.id, call.data)
→ Ссылка