как сделать викторину на aiogram?

форумчане.Уже вторую неделю не пойму как сделать викторину на Aiogram, python.Получилось такое решение: введите сюда описание изображения

МЫ создаём кнопки, но под каждый вопрос отдельно, ибо если ввести переменную с номером вопроса, то ответить сможет только один юзер; а здесь я обрабатываю ответы: введите сюда описание изображения

Прошу вас помочь мне грамотно и главное кратко реализовать такую викторину, ведь вопросов планируется 43, а делать кнопки под каждый вопрос не очень компитентно...

Вот код:

exit_key = InlineKeyboardButton('Выход>', callback_data='exit')
replay_test_key = InlineKeyboardButton('Заного?', callback_data='replaytest')

christmas_yes_key1 = InlineKeyboardButton('?', callback_data='да1')
christmas_no_key1 = InlineKeyboardButton('?', callback_data='нет1')
christmas_keyboard1 = InlineKeyboardMarkup().add(christmas_yes_key1, christmas_no_key1).add(exit_key)


christmas_yes_key2 = InlineKeyboardButton('?', callback_data='да2')
christmas_no_key2 = InlineKeyboardButton('?', callback_data='нет2')
christmas_keyboard2 = InlineKeyboardMarkup().add(christmas_yes_key2, christmas_no_key2).add(exit_key,)


christmas_yes_key3 = InlineKeyboardButton('?', callback_data='да3')
christmas_no_key3 = InlineKeyboardButton('?', callback_data='нет3')
christmas_keyboard3 = InlineKeyboardMarkup().add(christmas_yes_key3, christmas_no_key3).add(exit_key)

christmas_yes_key4 = InlineKeyboardButton('?', callback_data='да4')
christmas_no_key4 = InlineKeyboardButton('?', callback_data='нет4')
christmas_keyboard4 = InlineKeyboardMarkup().add(christmas_yes_key4, christmas_no_key4).add(exit_key, replay_test_key)

end_vic_keyboard = InlineKeyboardMarkup().add(replay_test_key)

@dp.callback_query_handler(lambda c: c.data)
async def inlines(c):
    if c.data == 'нет1':
        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='Вы дарите подарки?', reply_markup=christmas_keyboard2)
    if c.data == 'да1':
        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='Вы дарите подарки?', reply_markup=christmas_keyboard2)
    if c.data == 'нет2':
        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='Вы любите новый год?', reply_markup=christmas_keyboard3)
    if c.data == 'да2':
        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='Вы любите новый год?', reply_markup=christmas_keyboard3)
    if c.data == 'нет3':
        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='Викторина закончена, спасибо за участие!', reply_markup=end_vic_keyboard)
    if c.data == 'да3':
        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='Викторина закончена, спасибо за участие!', reply_markup=end_vic_keyboard)
    if c.data == 'replaytest':
        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='У вас появилось новогоднее настроение??', reply_markup=christmas_keyboard1)

    if c.data == 'exit':
        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='Спасибо за участие, викторина закончена!', reply_markup=end_vic_keyboard)

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

Автор решения: Макс Соловьев

Это для отправки викторины при нажатии на инлайн кнопку:

await bot.send_poll(call.message.chat.id, 'Мессенджер, автор которого Павел Дуров', 
    ['Telegram', 'Viber', 'WhatsApp', 'Messenger'], 
    type='quiz', correct_option_id=0, is_anonymous=False)

А это при отправке сообщения чтоб получить викторину:

await bot.send_poll(message.chat.id, 'Мессенджер, автор которого Павел Дуров', 
    ['Telegram', 'Viber', 'WhatsApp', 'Messenger'], 
    type='quiz', correct_option_id=0, is_anonymous=False)
→ Ссылка
Автор решения: Creeper Hack

для этого же есть FSM

и ещё пользуйся elif ` ами

from aiogram import Bot, Dispatcher, types, executor
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup

from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup

from config import TOKEN

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

exit_key = InlineKeyboardButton('Выход>', callback_data='exit')
replay_test_key = InlineKeyboardButton('Заного?', callback_data='replaytest')

christmas_yes_key = InlineKeyboardButton('?', callback_data='нет')
christmas_no_key = InlineKeyboardButton('?', callback_data='да')
christmas_keyboard = InlineKeyboardMarkup().add(christmas_yes_key, christmas_no_key).add(exit_key)

end_vic_keyboard = InlineKeyboardMarkup().add(replay_test_key)

class Questions(StatesGroup):
    q1 = State()
    q2 = State()

@dp.message_handler(commands=['start'])
async def start(msg: types.Message):
    await Questions.next()
    await msg.answer('викторина началась!')
    await msg.answer('Вы дарите подарки?', reply_markup=christmas_keyboard)

@dp.callback_query_handler(state=Questions.q1)
async def q1(c: types.CallbackQuery, state: FSMContext):
    # Получаем ответ от первого вопроса и отправляем второй вопрос

    # Вы можете сохранить ответ пользователя так (если надо):
    await state.set_data(q1=c.data)

    # переходим в следущий state и задаем вопрос
    await Questions.next()
    await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                text='Вы любите новый год?', reply_markup=christmas_keyboard)

    # if c.data == 'нет':
    #     await bot.answer_callback_query(c.id, text='')
    # elif c.data == 'да':
    #     await bot.answer_callback_query(c.id, text='')
                                    
@dp.callback_query_handler(state=Questions.q2)
async def q2(c: types.CallbackQuery, state: FSMContext):
    await state.set_data(q2=c.data)
    await Questions.next()
    await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                text='Викторина закончена, спасибо за участие!', reply_markup=end_vic_keyboard)

    # if c.data == 'нет':
    #     await bot.answer_callback_query(c.id, text='')
    # elif c.data == 'да':
    #     await bot.answer_callback_query(c.id, text='')

@dp.callback_query_handler(state='*')
async def inlines(c: types.CallbackQuery, state: FSMContext):
    # передаём ответы пользователя в переменную перед тем как завершить fsm
    answers = await state.get_data()

    # завершаем fsm
    await state.finish()

    if c.data == 'replaytest':
        # заново начинаем вопрос
        await Questions.next()

        # в конце ты мошежь показать ответы пользователя так
        await c.message.answer('1-вопрос: ' + answers['q1'] +\
                            '2-вопрос: ' + answers['q2'])

        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='У вас появилось новогоднее настроение??', reply_markup=christmas_keyboard)
                                    
        await c.message.answer('викторина началась!')
        await c.message.answer('Вы дарите подарки?', reply_markup=christmas_keyboard)

    elif c.data == 'exit':
        await bot.answer_callback_query(c.id, text='')
        await bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id,
                                    text='Спасибо за участие, викторина закончена!', reply_markup=end_vic_keyboard)

executor.start_polling(dp, skip_updates=True)
→ Ссылка