Пример #1
0
async def cmd_start(message: types.Message):
    """
    Обработчик кнопки старт. Определяет от кого пришло сообщение.

    Parameters
    ----------
    message : types.Message
        Текст сообщения
    """
    if message.from_user.id in admin_id:
        await message.answer('Хотите создать или активировать квиз?',
                             reply_markup=menu_keyboard)
    else:
        quiz_game = get_quiz()
        if isinstance(quiz_game, Quiz):
            logging.info(
                f'Пользователь {message.from_user.full_name} опоздал.')
            await message.answer(f'Вы опоздали.')
        else:
            all_users = get_all_users()
            all_users[message.from_user.id] = User(message.from_user.full_name)
            set_all_users(all_users)
            for id in admin_id:
                await bot.send_message(
                    id,
                    f'Пользователь {message.from_user.full_name} ждет начала квиза.'
                    f'Всего пользователей {len(all_users)}')
            logging.info(
                f'Пользователь {message.from_user.full_name} ждет начала квиза.'
            )
            await message.answer(f'Ждите начала квиза.')
Пример #2
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
    )
Пример #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} отменил удаление квиза.')
Пример #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} удаляет квиз.')
Пример #5
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)
Пример #6
0
async def select_quiz_actions(message: Message):
    """
    Меню взаимодействия с квизом.

    Parameters
    ----------
    message : Message
        Текст сообщения
    """
    quiz = get_quiz()
    if quiz:
        await ControllQuiz.waiting_for_action.set()
        await message.answer(
            f'Выбран квиз - {quiz.quiz_name}\n. Что вы хотите с ним сделать?',
            reply_markup=control_quiz_keyboard)
    else:
        await message.answer('Квиз не выбран.')
Пример #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)
Пример #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)