Beispiel #1
0
async def questions_step_by_step(message: types.Message, state: FSMContext):
    """
    Функция квиза
    :param state:
    :param message: сообщение пользователя
    :return: отправляем следующий вопрос
    """
    user_id: int = message.from_user.id
    current_question: int = db.get_current_question(user_id)

    async with state.proxy() as data:
        data[current_question] = message.text

    right_answer = False
    if current_question > 30:
        text = MESSAGES['you are finished']
        markup = ReplyKeyboardRemove()
    else:
        question = questions[current_question]
        markup = ReplyKeyboardMarkup(resize_keyboard=True,
                                     one_time_keyboard=True)
        user_answer = message.text.lower()
        true_answer = questions[current_question]['Answer'].lower()

        if user_answer == true_answer:
            right_answer = True
            db.set_point(user_id, current_question)

        have_hint = db.have_hints(user_id)
        if current_question + 1 > 20:
            markup = ReplyKeyboardRemove()
            #  here open questions
            if not right_answer and not have_hint:
                # даем подсказку
                text = MESSAGES['hint'] + question['Choices'][0]
                db.set_hint(user_id)
            else:
                # он дал верный ответ или уже была одна подсказка
                db.delete_hint(user_id)
                db.increment_current_question(user_id, current_question)
                if current_question == 30:
                    text = MESSAGES['the_end']
                    await state.finish()
                else:
                    question = questions[current_question + 1]
                    text = question['Question']
                    await Quiz.next()
        else:
            #  here quiz questions
            db.increment_current_question(user_id, current_question)
            question = questions[current_question + 1]
            text = question['Question']
            for choice in question['Choices']:
                choice_btn = KeyboardButton(choice)
                markup.add(choice_btn)
            await Quiz.next()
    await message.reply(text, reply_markup=markup, reply=False)
Beispiel #2
0
async def start_quiz(message: types.Message):
    if db.get_current_question(user_id=message.from_user.id) > 30:
        text = MESSAGES['you are finished']
        markup = ReplyKeyboardRemove()
    else:
        await Quiz.Task1.set()
        db.increment_current_question(message.from_user.id, 0)
        text = questions[1]['Question']
        markup = ReplyKeyboardMarkup(resize_keyboard=True,
                                     one_time_keyboard=True)
        for choice in questions[1]['Choices']:
            choice_btn = KeyboardButton(choice)
            markup.add(choice_btn)
    await message.reply(text, reply_markup=markup, reply=False)