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


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

TOKEN = "8363050543:AAEao7kTbgh1YAQ-uowLfNd10mmtqjZhBRQ"
bot = Bot(token=TOKEN)
dp = Dispatcher()

class TopicState(StatesGroup):
    topic_name = State()

class Quiz:
    def __init__(self, questions: list[str], answer_variants: list[list[list[str]]]):
        self.questions = questions
        self.answer_variants = answer_variants
        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 = {
    'Тест бота': Quiz(
        questions=[
            '1 вопрос',
            '2 вопрос',
            '3 вопрос'
        ],
        answer_variants=[
            [['верный ответ', '+'], ['неверный ответ', '-']],
            [['верный ответ', '+'], ['неверный ответ', '-'], ['ещё неверный ответ', '-']],
            [['верный ответ', '+']]
        ]
    )
}
#ДОБАВЛЯЕМ ВИКТОРИНЫ СЮДА
def create_keyboard():
    topcs_list: list(TOPICS.keys())
    buttons = [KeyboardButton(text=topic) for topic in topcs_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)
quiz = None

@dp.message(CommandStart())
async def command_start_handler(message: Message):
    await message.answer(f'Привет, {message.from_user.first_name}!\n'
                         f'Выбери категорию викторины', reply_markup=create_keyboard())

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

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