135 lines
5.2 KiB
Python
135 lines
5.2 KiB
Python
from aiogram import Router, F
|
||
from aiogram.filters import Command, StateFilter
|
||
from aiogram.fsm.context import FSMContext
|
||
from aiogram.fsm.state import State, StatesGroup
|
||
from aiogram.types import Message
|
||
|
||
# Создаем роутер
|
||
knowledge_router = Router()
|
||
|
||
|
||
# Определяем состояния
|
||
class KnowledgeStates(StatesGroup):
|
||
question1 = State()
|
||
question2 = State()
|
||
question3 = State()
|
||
question4 = State()
|
||
question5 = State()
|
||
question6 = State()
|
||
|
||
|
||
# Вопросы и ответы (замените на свои)
|
||
QUESTIONS = {
|
||
1: "Вопрос1",
|
||
2: "Вопрос2",
|
||
3: "Вопрос3",
|
||
4: "Вопрос4",
|
||
5: "Вопрос5",
|
||
6: "Вопрос6"
|
||
}
|
||
|
||
ANSWERS = {
|
||
1: {"Ответ 11": "СообщениеА1", "Ответ 12": "СообщениеБ1"},
|
||
2: {"Ответ 21": "СообщениеА2", "Ответ 22": "СообщениеБ2"},
|
||
3: {"Ответ 31": "СообщениеА3", "Ответ 32": "СообщениеБ3"},
|
||
4: {"Ответ 41": "СообщениеА4", "Ответ 42": "СообщениеБ4"},
|
||
5: {"Ответ 51": "СообщениеА5", "Ответ 52": "СообщениеБ5"},
|
||
6: {"Ответ 61": "СообщениеА6", "Ответ 62": "СообщениеБ6"}
|
||
}
|
||
|
||
FINAL_MESSAGES = {
|
||
"all_1": "ИТОГ1 - Все ответы первого типа!",
|
||
"all_2": "ИТОГ2 - Все ответы второго типа!",
|
||
"mixed": "ИТОГ1 - Смешанные ответы!"
|
||
}
|
||
|
||
|
||
# Запуск сессии знаний
|
||
@knowledge_router.message(StateFilter(None), Command("знания"))
|
||
@knowledge_router.message(StateFilter(None), F.text.casefold() == "пора заняться знаниями")
|
||
async def start_knowledge_session(message: Message, state: FSMContext):
|
||
await message.answer("Отлично! Начинаем сессию знаний! 🧠")
|
||
await message.answer(QUESTIONS[1])
|
||
await state.set_state(KnowledgeStates.question1)
|
||
await state.update_data(answers={})
|
||
|
||
|
||
# Обработчики для каждого вопроса
|
||
@knowledge_router.message(KnowledgeStates.question1, F.text.in_(ANSWERS[1].keys()))
|
||
async def process_question1(message: Message, state: FSMContext):
|
||
user_answer = message.text
|
||
response_message = ANSWERS[1][user_answer]
|
||
|
||
# Сохраняем ответ
|
||
answer_code = 1 if user_answer == "Ответ 11" else 2
|
||
await state.update_data(answers={"q1": answer_code})
|
||
|
||
# Отправляем сообщение и следующий вопрос
|
||
await message.answer(response_message + "\n\n" + QUESTIONS[2])
|
||
await state.set_state(KnowledgeStates.question2)
|
||
|
||
|
||
@knowledge_router.message(KnowledgeStates.question2, F.text.in_(ANSWERS[2].keys()))
|
||
async def process_question2(message: Message, state: FSMContext):
|
||
user_answer = message.text
|
||
response_message = ANSWERS[2][user_answer]
|
||
|
||
# Сохраняем ответ
|
||
answer_code = 1 if user_answer == "Ответ 21" else 2
|
||
data = await state.get_data()
|
||
answers = data.get("answers", {})
|
||
answers["q2"] = answer_code
|
||
await state.update_data(answers=answers)
|
||
|
||
# Отправляем сообщение и следующий вопрос
|
||
await message.answer(response_message + "\n\n" + QUESTIONS[3])
|
||
await state.set_state(KnowledgeStates.question3)
|
||
|
||
|
||
# Добавьте аналогичные обработчики для question3-question5
|
||
|
||
@knowledge_router.message(KnowledgeStates.question6, F.text.in_(ANSWERS[6].keys()))
|
||
async def process_question6(message: Message, state: FSMContext):
|
||
user_answer = message.text
|
||
response_message = ANSWERS[6][user_answer]
|
||
|
||
# Сохраняем ответ
|
||
answer_code = 1 if user_answer == "Ответ 61" else 2
|
||
data = await state.get_data()
|
||
answers = data.get("answers", {})
|
||
answers["q6"] = answer_code
|
||
await state.update_data(answers=answers)
|
||
|
||
# Отправляем финальное сообщение
|
||
await message.answer(response_message)
|
||
await finish_knowledge_session(message, state)
|
||
|
||
|
||
# Обработчики для некорректных ответов
|
||
@knowledge_router.message(KnowledgeStates.question1)
|
||
async def process_incorrect_answer1(message: Message):
|
||
await message.answer("Пожалуйста, выберите один из предложенных вариантов ответа.")
|
||
await message.answer(QUESTIONS[1])
|
||
|
||
|
||
@knowledge_router.message(KnowledgeStates.question2)
|
||
async def process_incorrect_answer2(message: Message):
|
||
await message.answer("Пожалуйста, выберите один из предложенных вариантов ответа.")
|
||
await message.answer(QUESTIONS[2])
|
||
|
||
|
||
# Добавьте аналогичные обработчики для остальных вопросов
|
||
|
||
# Завершение сессии
|
||
async def finish_knowledge_session(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
answers = data.get("answers", {})
|
||
|
||
# Проверяем результаты
|
||
if all(answer == 2 for answer in answers.values()):
|
||
await message.answer(FINAL_MESSAGES["all_2"])
|
||
else:
|
||
await message.answer(FINAL_MESSAGES["mixed"])
|
||
|
||
await state.clear()
|