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())