Проблемы с созданием многоуровнего 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)