Загрузка данных


import asyncio

from aiogram import Bot, Dispatcher, F
from aiogram.filters import CommandStart
from aiogram.types import Message, \
   KeyboardButton, ReplyKeyboardMarkup, InlineKeyboardButton, InlineKeyboardMarkup, \
   CallbackQuery
from aiogram.fsm.state import StatesGroup, State
from aiogram.fsm.context import FSMContext

class TopicState(StatesGroup):
   topic_name = State()

class Quiz:
    def __init__(self, questions: list[str], answer_variants: list[list[list[str]]]):
        self.answer_variants = answer_variants
        self.questions = questions
        self.points = 0
        self.stage = 0
    async def create_message(self, user_message: Message):
        buttons = [InlineKeyboardButton(text=var[0], callback_data=var[1])
                   for var in self.answer_variants[self.stage]]
        question_buttons = InlineKeyboardMarkup(inline_keyboard=[buttons])

        await user_message.answer(
            f'Вопрос №{self.stage + 1}\n{self.questions[self.stage]}',
            reply_markup=question_buttons )
    async def check_answer(self, answer_type: str, user_message: Message):
        if answer_type == '-':
            await user_message.answer('Неправильно')
        else:
            self.points += 1
            await user_message.answer('Правильно! +1 балл')
        self.stage += 1
    def stop_game(self):
        return self.stage >= len(self.questions)

# ВИКТОРИНЫ ПИСАТЬ ЗДЕСЬ
TOPICS = {
    'TEST': Quiz(
        questions=[
            'First?',
            'Second?',
            'Third?'
        ],
        answer_variants=[
            [['First', '+'], ['Second', '-'], ['Third', '-']],
            [['First', '-'], ['Second', '+'], ['Third', '-']],
            [['First', '-'], ['Second', '-'], ['Third', '+']]
        ]
    )
}

def create_keyboard():
    topics_list = list(TOPICS.keys())
    buttons = [KeyboardButton(text=topic) for topic in topics_list]
    keyboard_rows = []
    for i in range(0, len(buttons), 2):
        row = buttons[i:i+2]
        keyboard_rows.append(row)
    return ReplyKeyboardMarkup(
        keyboard=keyboard_rows,
        input_field_placeholder= 'Выберите категорию...',
        resize_keyboard= True,
        one_time_keyboard= True
    )

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

async def main():
   await dp.start_polling(bot)

if __name__ == '__main__':
   asyncio.run(main())