Проблемы с созданием многоуровнего inline меню в aiogram

Не работает inline меню random_markup. Первое меню работает отлично (ну как меню, в данных случаях просто одна кнопка, но это не столь важно), а вот уже с меню, которое должно появится после нажатия на btnRandom возникают проблемы. Что я сделал не так, что второе меню не появляется?

bot = Bot(TOKEN)
dp = Dispatcher(bot)

@dp.message_handler(commands=["random"])
async def process_random(message: types.Message):
    markup = InlineKeyboardMarkup(row_width=1).add(InlineKeyboardButton(text="Рандомное число", callback_data="btnRandom"))
    # markup.add(InlineKeyboardButton(league, callback_data=f"prefix:{league_cd}"))
    await message.answer("Пожалуйста, выберите из списка:", reply_markup=markup)

@dp.callback_query_handler(text_startswith="btnRandom")
async def random_button(callback: types.CallbackQuery):
    data = callback.data
    await callback.answer()
    if data == "btnRandom":
        async def randomizer(message: types.Message):
            random_markup = InlineKeyboardMarkup(row_width=1).add(InlineKeyboardButton(text="Вы выбрали рандом", callback_data="Random"))
            await callback.message.answer("Рандомное меню:", reply_markup=random_markup)

        @dp.callback_query_handler(text_startswith="Random")
        async def random_selected(callback: types.CallbackQuery):
            await callback.message.answer("Вы выбрали рандомное число", reply_markup=random_markup)
            await callback.answer()
    else:
        await callback.message.answer("Вы выбрали другой вариант, но выберите рандом")

if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)

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

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

Ужас у вас какой-то

@dp.message_handler(commands=["random"])
async def process_random(message: types.Message):
    markup = InlineKeyboardMarkup(row_width=1).add(
        InlineKeyboardButton("Рандомное число", callback_data="btnRandom"))
    # markup.add(InlineKeyboardButton(league, callback_data=f"prefix:{league_cd}"))
    await message.answer("Пожалуйста, выберите из списка:", reply_markup=markup)


# зачем тебе text_startswith? У тебя же четкий btnRandom, а не какой-то так btnRandom:123
@dp.callback_query_handler(text_startswith="btnRandom")
async def random_button(callback: types.CallbackQuery):
    await callback.answer()
    # зачем это условие? для кого оно? Если хендлер сработал значит дата и будет равана этому значению
    # data = callback.data
    # if data == "btnRandom":
    # а это что за бесмысленная функция? Убери ее
    # async def randomizer(message: types.Message):
    #     random_markup = InlineKeyboardMarkup(row_width=1).add(
    #         InlineKeyboardButton(text="Вы выбрали рандом", callback_data="Random"))
    #     await callback.message.answer("Рандомное меню:", reply_markup=random_markup)
    markup = InlineKeyboardMarkup().add(
        InlineKeyboardButton("Вы выбрали рандом", callback_data="Random"))
    await callback.message.answer("Рандомное меню:", reply_markup=markup)


# и не запихивай хендлер внурь другого хендлера НИКОГДА
@dp.callback_query_handler(text="Random")
async def random_selected(callback: types.CallbackQuery):
    await callback.answer()
    markup = InlineKeyboardMarkup().add(
        InlineKeyboardButton("Вы выбрали рандом", callback_data="Random"))
    await callback.message.answer("Вы выбрали рандомное число", reply_markup=markup)
→ Ссылка