Files
PrimoAranaraBot/bot/handlers/secret/secret2.py
2025-09-08 00:40:18 +07:00

135 lines
5.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()