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