Exemple #1
0
async def save_quiz(message: Message, state: FSMContext):
    """
    Сохранение квиза и его итог.

    Parameters
    ----------
    message : types.Message
        Текст сообщения
    state : FSMContext
        Сброс состояния
    """
    quiz = get_quiz()
    quiz.save()
    set_quiz(quiz)
    await message.reply(
        f'Имя игры: {quiz.quiz_name}\n'
        f'Названия раундов: {list(quiz.rounds.keys())}\n'
        f'Задержка между вопросами (сек.): {list(quiz.times_between_questions.values())}\n'
        f'Количество раундов: {len(quiz.rounds.values())}\n',
        reply_markup=ReplyKeyboardRemove()
    )
    await state.finish()
    await message.answer(
        'Начните новый квиз или выберете из существующих.', reply_markup=menu_keyboard
    )
Exemple #2
0
async def set_quiz_menu(message: Message, state: FSMContext):
    """
    Показывает пользователю меню.

    Parameters
    ----------
    message : Message
        Текст сообщения
    state : FSMContext
        Сброс состояния пользователя.
    """
    if message.text == 'Отмена':
        await state.finish()
        await message.answer(f'Хотите создать или активировать квиз?',
                             reply_markup=menu_keyboard)
    else:
        with open(quizes_path / f'{message.text}.pickle', 'rb') as f:
            set_quiz(load(f))
        logging.info(
            f'Админ {message.from_user.full_name} стартанул квиз {message.text}'
        )
        await state.finish()
        await message.answer(
            f'Вы выбрали квиз - {message.text}, он начинается!!!',
            reply_markup=menu_keyboard)
        await get_quiz().start_rounds()
Exemple #3
0
async def delete_quiz_confirmation(message: Message, state: FSMContext):
    """
    Подтверждение удаления пользователя

    Parameters
    ----------
    message : Message
        Текст сообщения. Да\Нет
    state : FSMContext
        Сброс состояний пользователя.
    """
    quiz = get_quiz()
    if message.text == 'Да':
        file_to_rem = quizes_path / f'{quiz.quiz_name}.pickle'
        file_to_rem.unlink()
        await state.finish()
        await message.answer(f'Вы удалили квиз - {quiz.quiz_name}',
                             reply_markup=menu_keyboard)
        set_quiz(None)
        logging.info(f'Админ {message.from_user.full_name} удалил квиз.')
    elif message.text == 'Нет':
        await ControllQuiz.waiting_for_action.set()
        await message.answer(
            f'Выбран квиз - {quiz.quiz_name}\n. Что вы хотите с ним сделать?',
            reply_markup=control_quiz_keyboard)
        logging.info(
            f'Админ {message.from_user.full_name} отменил удаление квиза.')
Exemple #4
0
async def quiz_action(message: Message, state: FSMContext):
    """
    Обрабатывает команды Деактивировать и Удалить

    Parameters
    ----------
    message : Message
        Текст сообщения. Деактивировать\Удалить
    state : FSMContext
        Сброс состояния пользователя
    """
    quiz = get_quiz()
    if message.text == 'Деактивировать':
        await message.answer(f'Квиз {quiz.quiz_name} деактивирован.',
                             reply_markup=menu_keyboard)
        await state.finish()
        logging.info(
            f'Админ {message.from_user.full_name} деактивировал квиз.')
        set_quiz(None)
    elif message.text == 'Удалить':
        await ControllQuiz.waiting_for_delete_confirmation.set()
        keyboard = ReplyKeyboardMarkup([['Да'], ['Нет']], resize_keyboard=True)
        await message.answer(
            f'Вы точно хотите удалить квиз - {quiz.quiz_name}?',
            reply_markup=keyboard)
        logging.info(f'Админ {message.from_user.full_name} удаляет квиз.')
Exemple #5
0
async def set_name_for_quiz(message: Message):
    """
    Принимает сообщение и ставит название квиза по этому сообщению.

    Parameters
    ----------
    message : types.Message
        Текст сообщения
    """
    set_quiz(Quiz(message.text))
    await CreateQuiz.waiting_for_round_name.set()
    await message.reply(
        'Пришлите название Вашего раунда (например, «История математики»).',
        reply_markup=ReplyKeyboardRemove()
    )
Exemple #6
0
async def set_name_for_round(message: Message):
    """
    Ставит название раунда и предлагает выбрать время между вопросами

    Parameters
    ----------
    message : types.Message
        Текст сообщения
    """
    set_current_round(message.text)
    quiz = get_quiz()
    quiz.add_round(message.text)
    set_quiz(quiz)
    keyboard = ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add('15 сек.', '30 сек.', '1 мин.', '5 мин.', '10 мин.', 'Отмена')
    await CreateQuiz.waiting_for_time_between_questions.set()
    await message.reply('Какой промежуток будет между вопросами?', reply_markup=keyboard)
Exemple #7
0
async def set_time_between_questions(message: Message):
    """
    Устанавливает время между сообщениями и предлагает создать следующий вопрос.

    Parameters
    ----------
    message : types.Message
        Текст сообщения
    """
    quiz = get_quiz()
    quiz.set_time_between_quiestions(message.text)
    set_quiz(quiz)
    poll_keyboard = ReplyKeyboardMarkup(resize_keyboard=True)
    poll_keyboard.add(KeyboardButton(text='Создать вопрос',
                                     request_poll=KeyboardButtonPollType(type=PollType.QUIZ)))
    poll_keyboard.add(KeyboardButton(text='Отмена'))
    await CreateQuiz.waiting_for_question.set()
    await message.answer('Создайте вопрос, для этого используйте кнопку ниже.',
                         reply_markup=poll_keyboard)
Exemple #8
0
async def setup_question_for_quiz(message: Message):
    global media
    quiz = get_quiz()
    quiz.add_question(message.poll.question, message.poll.options, message.poll.correct_option_id, media)
    media = None
    poll_keyboard = ReplyKeyboardMarkup(resize_keyboard=True)
    poll_keyboard.add(KeyboardButton(text='Создать еще вопрос',
                                     request_poll=KeyboardButtonPollType(type=PollType.QUIZ)))
    poll_keyboard.add(KeyboardButton(text='Cоздать новый раунд.'))
    poll_keyboard.add(KeyboardButton(text='Cохранить квиз.'))
    poll_keyboard.add(KeyboardButton(text='Отмена'))

    await message.reply(
        f'Имя игры: {quiz.quiz_name}\n'
        f'Текущий раунд: {get_current_round()}\n'
        f'Задержка между вопросами (сек.): {quiz.times_between_questions[get_current_round()]}\n'
        f'Количество вопросов: {len(quiz.rounds[get_current_round()])}\n',
        reply_markup=ReplyKeyboardRemove()
    )
    set_quiz(quiz)
    await message.reply(f'Был добавлен вопрос {message.poll.question}', reply_markup=poll_keyboard)