Как обработать несколько кнопок сразу Aiogram?

Рейтинг: 0Ответов: 1Опубликовано: 19.02.2023

У меня есть хендлер который обрабатывает несколько кнопок сразу. Как сделать так, чтобы в зависимости от того, на какую кнопку нажмут - в БД добавлялась разная инфа

@dp.callback_query_handler(text=["cratcosrochnaya", "srednesrochnaya", "dolgosrochnaya"])
async def any_style(message: types.Message):
    if CALLBACK DATA == одному из значений (например == "cratcosrochnaya")
        db.add_short_term_style(message.from_user.id)
    А ЕСЛИ РАВНА ДРУГОМУ ЗНАЧЕНИЮ
        db.add_meddle_term_style(message.from_user.id) # то в БД добавляется другие данные 
    await bot.delete_message(message.from_user.id, message.message.message_id)
    await bot.send_message(message.from_user.id,
                           "Отличные новости! Для вас как для нашего старого клиента есть выгодное предложение. Разработчик индикаторов с канала Cool Head создал приватные наборы индикаторов. У вас есть возможность приобретения со скидкой 50% (или другой процент). Ознакомится с предложением можно тут – ссылка на сайт")
    await asyncio.sleep(1)
    await bot.send_message(message.from_user.id, "Вы уже ознакомились с нашим продуктом?", reply_markup=keybards.LastBtnMenu)

add_short_term_style - функция добавления в БД ( и их несколько ) Пробывал сделать разные хендлеры, ну прям очень много сток кода

Ответы

▲ 0Принят

Можно использовать параметр callback_data в обработчике callback_query, чтобы определить, на какую кнопку нажали

@dp.callback_query_handler(text=["cratcosrochnaya", "srednesrochnaya", "dolgosrochnaya"])
async def any_style(query: types.CallbackQuery):
    if query.data == "cratcosrochnaya":
        db.add_short_term_style(query.from_user.id)
    elif query.data == "srednesrochnaya":
        db.add_meddle_term_style(query.from_user.id)
    elif query.data == "dolgosrochnaya":
        db.add_long_term_style(query.from_user.id)

    await bot.answer_callback_query(query.id)
    await bot.delete_message(query.message.chat.id, query.message.message_id)
    await bot.send_message(query.from_user.id, "...")