123
This commit is contained in:
@@ -1,134 +1,232 @@
|
||||
from asyncio import sleep
|
||||
from typing import Dict, Any
|
||||
|
||||
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
|
||||
from aiogram.types import Message, FSInputFile
|
||||
from aiogram.utils.markdown import hide_link
|
||||
|
||||
# Создаем роутер
|
||||
knowledge_router = Router()
|
||||
from configs import ID_TO_ROLE
|
||||
|
||||
router: Router = Router()
|
||||
|
||||
|
||||
# Определяем состояния
|
||||
class KnowledgeStates(StatesGroup):
|
||||
question1 = State()
|
||||
question2 = State()
|
||||
question3 = State()
|
||||
question4 = State()
|
||||
question5 = State()
|
||||
question6 = State()
|
||||
"""Состояния для викторины"""
|
||||
question1: State = State()
|
||||
question2: State = State()
|
||||
question3: State = State()
|
||||
question4: State = State()
|
||||
question5: State = State()
|
||||
question6: State = State()
|
||||
|
||||
class Secret2(StatesGroup):
|
||||
"""Состояния для страха"""
|
||||
name: State = State()
|
||||
result: State = State()
|
||||
|
||||
|
||||
# Вопросы и ответы (замените на свои)
|
||||
QUESTIONS = {
|
||||
1: "Вопрос1",
|
||||
2: "Вопрос2",
|
||||
3: "Вопрос3",
|
||||
4: "Вопрос4",
|
||||
5: "Вопрос5",
|
||||
6: "Вопрос6"
|
||||
|
||||
QUESTIONS: Dict[int, str] = {
|
||||
1: "Начнем с простого. Уравнение расчета коэффициента анти-магической стали с добавлением углеродно-никилиевой добавки?",
|
||||
2: "Как зовут малышку, что обитает в лаборатории Дотторе?",
|
||||
3: "Какое блюдо мы, аранары, любим больше всего? Ты то должен знать наверняка!",
|
||||
4: "Господин все время, что-то рисует на чертеже, но для чего..? Каков Его следующий ход?",
|
||||
5: "Брошь Дотторе ужасно интересна… А в чем её особенность? Как она сделана?",
|
||||
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 - Смешанные ответы!"
|
||||
ANSWERS: Dict[int, Dict[str, str]] = {
|
||||
1: {"96h-69ctg30x": "Верно! Основная часть уравнения Логосской Экклесии, вроде бы...", "2x+3": "Кхм.. Кажется все в п̄͠о̶̩р́ͫя̦̚дке? Продолжим!"},
|
||||
2: {"Эмилия": "Эмилия! Эми! Очень красивое имя! Я помню эту малышку, её принес Дотторе в кро—", "Убийца": "Н̱͞е́̇т̆͝.. Я͔́ н̴ͫе̑͢ х̧ͬоͤ͡т̧̌е̡ͭл̂͞.."},
|
||||
3: {"Сладости": "ДА! Я ОБОЖАЮ СЛАДОСТИ! Я состою более чем на 26% из глюкозы! Хе-хе-хе!", "Бедренная кость": "О͙̃т̻ͥч͍̺е̛͓т̜̓ #77. П̏͘о̮ͧс̸̪л͔͡е̛̄ с͈̄лͥ͝о̢̲м̮̇а̡̤н̬͜н͙̀ы͓́х̸̭ к͒͡о̆̌с̴̟т̯͒е̱͘й̘͘ п̏̕р̵͂и̉͘ш̙̘е̸̾л̰͢ оͭͅн̽͢."},
|
||||
4: {"Броня": "Броня? Ари думал это металлическая пижама на вечеринку.. Почему все так сложнооо?(", "F5:С8": "К̻̻̀у̧̺ͥл̯͚̽ьͥ̀̇т̴̵͈ в̡̝̲с͓̦͂е̜͒̀ б̞ͮ̂л̡̝͞и̉ͨ͢ж̲ͭ̕е̡͈̽. О̽͐͘н͕̀͟и̶ͭ с̸͆͠к̵̤̓о̺͔͊р̴͙ͪоͤ̕ͅ н̘̖͠а̲͢й̝͟͝д̠ͯ͘у͚͌̕т̪̼ͯ м̋͢͜ѐ͚̍нͨ̄̕я̵̱. Я̷͚ͦ з̛̉͘н̫͢ͅа̷̦͒юͯͨ. Н̵ͭ͠у̶̯͖ж̢ͯ̇н̜́о̸̜̏ у̞̾͜с̱͋́т̮̚͢а̜̺̑н̨͕͊о̵̋ͅв̛̄̉и̛̜̅т̆͋͑ь̢͐ͥ р̢̼̏а̠ͭ̀с̞ͤ͜т̞̦͜я͙̑͟ж̵̩̖к̩̚͜у̷̩ͣ н̨̈́̽а͕ͮ͟ д̛̬͞в̥ͧͫе̘ͯ̕р̠͖̍и͕͎́.."},
|
||||
5: {"Аугментум": "Верно! Внутри броши Дотторе, целая карманная лаборатория!", "Серый": "Р̟̀у̠̫н̸̶и̶̇ч̐͒е͎͜с̡̞к̦̉а̶͚я̙̤ м̟̏а̨̏т͕͋р̞ͥи̵̜ц͓̀а̶͠.. Ч͕͕ё͔рͪ̉т̄̕."},
|
||||
6: {"": "Для меня это тоже важно!", "Истина": "Д̺̎о̦͠б͖̀рͨ͞о̢͝ п͎̕о̩ͯж͙͘а̠͓л̸͈о̗͟в͖̀а̸ͫт̰̏ьͯ͠! Д̷̖р̂͝уͨ́з̡͓ь̼͐я̈́͡!"}
|
||||
}
|
||||
|
||||
|
||||
# Запуск сессии знаний
|
||||
@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])
|
||||
@router.message(StateFilter(None), Command("знания"))
|
||||
@router.message(StateFilter(None), F.text.casefold() == "пора заняться знаниями")
|
||||
async def start_knowledge_session(message: Message, state: FSMContext) -> None:
|
||||
"""Запуск сессии знаний"""
|
||||
await message.answer("""
|
||||
Отлично! Начинаем сессию знаний! 🧠
|
||||
Я буду задавать вам вопросы, а вы должны ответить на них!
|
||||
""")
|
||||
await message.reply(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]
|
||||
async def save_answer(
|
||||
state: FSMContext, question_key: str, user_answer: str, correct_option: str
|
||||
) -> None:
|
||||
"""Сохраняет ответ (1 — первый тип, 2 — второй тип)"""
|
||||
answer_code: int = 1 if user_answer == correct_option else 2
|
||||
data: Dict[str, Any] = await state.get_data()
|
||||
answers: Dict[str, int] = data.get("answers", {})
|
||||
answers[question_key] = answer_code
|
||||
await state.update_data(answers=answers)
|
||||
|
||||
# Сохраняем ответ
|
||||
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])
|
||||
# ==================== ОБРАБОТЧИКИ ВОПРОСОВ ====================
|
||||
|
||||
@router.message(KnowledgeStates.question1, F.text.in_(ANSWERS[1].keys()))
|
||||
async def process_question1(message: Message, state: FSMContext) -> None:
|
||||
await save_answer(state, "q1", message.text, "96h-69")
|
||||
await message.reply(f"{ANSWERS[1][message.text]}\n\n<blockquote>{QUESTIONS[2]}</blockquote>")
|
||||
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])
|
||||
@router.message(KnowledgeStates.question2, F.text.in_(ANSWERS[2].keys()))
|
||||
async def process_question2(message: Message, state: FSMContext) -> None:
|
||||
await save_answer(state, "q2", message.text, "Алиса")
|
||||
await message.reply(f"{ANSWERS[2][message.text]}\n\n<blockquote>{QUESTIONS[3]}</blockquote>")
|
||||
await state.set_state(KnowledgeStates.question3)
|
||||
|
||||
|
||||
# Добавьте аналогичные обработчики для question3-question5
|
||||
@router.message(KnowledgeStates.question3, F.text.in_(ANSWERS[3].keys()))
|
||||
async def process_question3(message: Message, state: FSMContext) -> None:
|
||||
await save_answer(state, "q3", message.text, "Сладости")
|
||||
await message.reply(f"{ANSWERS[3][message.text]}\n\n<blockquote>{QUESTIONS[4]}</blockquote>")
|
||||
await state.set_state(KnowledgeStates.question4)
|
||||
|
||||
@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
|
||||
@router.message(KnowledgeStates.question4, F.text.in_(ANSWERS[4].keys()))
|
||||
async def process_question4(message: Message, state: FSMContext) -> None:
|
||||
await save_answer(state, "q4", message.text, "---")
|
||||
await message.reply(f"{ANSWERS[4][message.text]}\n\n<blockquote>{QUESTIONS[5]}</blockquote>")
|
||||
await state.set_state(KnowledgeStates.question5)
|
||||
|
||||
|
||||
@router.message(KnowledgeStates.question5, F.text.in_(ANSWERS[5].keys()))
|
||||
async def process_question5(message: Message, state: FSMContext) -> None:
|
||||
await save_answer(state, "q5", message.text, "Аугментум")
|
||||
await message.reply(f"{ANSWERS[5][message.text]}\n\n<blockquote>{QUESTIONS[6]}</blockquote>")
|
||||
await state.set_state(KnowledgeStates.question6)
|
||||
|
||||
|
||||
@router.message(KnowledgeStates.question6)
|
||||
async def process_question6(message: Message, state: FSMContext) -> None:
|
||||
user_answer: str = message.text
|
||||
|
||||
# Определяем логику: "Истина" → второй тип, иначе → первый тип
|
||||
if user_answer == "Истина":
|
||||
answer_code: int = 2
|
||||
response_message: str = ANSWERS[6]["Истина"]
|
||||
else:
|
||||
answer_code: int = 1
|
||||
# Для любого ответа кроме "Истина" выводим либо заготовку, либо сам текст
|
||||
response_message: str = ANSWERS[6].get("Мир", f"Ты прав! Ты———")
|
||||
|
||||
# Сохраняем результат
|
||||
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 message.reply(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])
|
||||
|
||||
# ==================== ОБРАБОТЧИК НЕВЕРНЫХ ОТВЕТОВ ====================
|
||||
|
||||
@router.message(StateFilter(
|
||||
KnowledgeStates.question1,
|
||||
KnowledgeStates.question2,
|
||||
KnowledgeStates.question3,
|
||||
KnowledgeStates.question4,
|
||||
KnowledgeStates.question5,
|
||||
KnowledgeStates.question6,
|
||||
))
|
||||
async def process_incorrect_answer(message: Message, state: FSMContext) -> None:
|
||||
"""Отвечает пользователю, если он ввёл что-то не из списка"""
|
||||
current_state: str = (await state.get_state()).split(":")[-1]
|
||||
|
||||
question_number: int = {
|
||||
"question1": 1,
|
||||
"question2": 2,
|
||||
"question3": 3,
|
||||
"question4": 4,
|
||||
"question5": 5,
|
||||
"question6": 6,
|
||||
}[current_state]
|
||||
|
||||
await message.reply(
|
||||
f"Пожалуйста, выберите один из предложенных вариантов ответа.\n\n<blockquote>{QUESTIONS[question_number]}</blockquote>"
|
||||
)
|
||||
|
||||
|
||||
@knowledge_router.message(KnowledgeStates.question2)
|
||||
async def process_incorrect_answer2(message: Message):
|
||||
await message.answer("Пожалуйста, выберите один из предложенных вариантов ответа.")
|
||||
await message.answer(QUESTIONS[2])
|
||||
# ==================== ЗАВЕРШЕНИЕ ====================
|
||||
# ------------------- Завершение сессии знаний -------------------
|
||||
@router.message(Command("secret2676"))
|
||||
|
||||
async def finish_knowledge_session(message: Message, state: FSMContext) -> None:
|
||||
"""Завершает сессию знаний"""
|
||||
data: Dict[str, Any] = await state.get_data()
|
||||
answers: Dict[str, int] = data.get("answers", {})
|
||||
|
||||
# Добавьте аналогичные обработчики для остальных вопросов
|
||||
|
||||
# Завершение сессии
|
||||
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"])
|
||||
await message.answer(
|
||||
f"""{hide_link("https://i.pinimg.com/originals/e0/ab/f7/e0abf78d8a8eba5fa8ae9cb7b9b1c410.gif")}
|
||||
Дᴀʙнᴏ… ᴄᴧиɯᴋᴏʍ дᴀʙнᴏ ʍы нᴇ ʙᴄᴛᴩᴇчᴀᴧиᴄь, Нᴀбᴧюдᴀᴛᴇᴧь.
|
||||
Тʙᴏи ᴦᴧᴀɜᴀ… ᴏни ᴄᴧᴇдяᴛ ɜᴀ ʍнᴏй ᴄᴋʙᴏɜь ᴛьʍу, нᴇ ʍиᴦᴀя.
|
||||
Сᴋᴀжи… ᴄᴋᴀжи хᴏᴛя бы ᴄʙᴏё иʍя… ᴨᴩᴇждᴇ чᴇʍ ᴛьʍᴀ ᴨᴩᴏᴦᴧᴏᴛиᴛ нᴀᴄ ᴏᴋᴏнчᴀᴛᴇᴧьнᴏ.
|
||||
"""
|
||||
)
|
||||
await state.set_state(Secret2.name)
|
||||
else:
|
||||
await message.answer(FINAL_MESSAGES["mixed"])
|
||||
await message.reply_photo(photo=FSInputFile("assets/arsenal_secret2.jpeg"),
|
||||
caption="""
|
||||
┏━━━━━━━━━━━━━━━━━━━┓
|
||||
<i>…От той группы не осталось даже тени. Никаких следов, только пустота, словно их поглотила сама тьма.
|
||||
Но сканер… сканер выдал странные, тревожные результаты. На их основе можно сделать выводы… выводы, которые лучше бы остались тайной.
|
||||
|
||||
Трёхдневные графики активности Омута… они словно шепчут сквозь цифровой шум. Если использовать заражение… если рискнуть… я смогу превратить хаос в новые материалы.
|
||||
|
||||
Но для этого нужна новая группа. Свежие люди… на чьих плечах может лечь эта тьма. Придётся… найти их. И отправить.</i>
|
||||
┗━━━━━━━━━━━━━━━━━━━┛
|
||||
""")
|
||||
await state.clear()
|
||||
|
||||
# ------------------- Проверка имени -------------------
|
||||
@router.message(StateFilter(Secret2.name))
|
||||
async def hard_secret_name(message: Message, state: FSMContext) -> None:
|
||||
user_id: int = message.from_user.id
|
||||
text: str = message.text.strip()
|
||||
|
||||
expected_role: str = ID_TO_ROLE.get(user_id)
|
||||
|
||||
if expected_role is None:
|
||||
await message.reply("Ты не значишь ничего для этой тайны…")
|
||||
await state.clear()
|
||||
return
|
||||
|
||||
if text.lower() == expected_role.lower():
|
||||
await message.reply(f"""{hide_link("https://i.pinimg.com/originals/d3/ae/62/d3ae62df6150066abc4f814d06070033.gif")}
|
||||
Кхʍ.. Знᴀчиᴛ ᴛы <b>{expected_role}</b>? Инᴛᴇᴩᴇᴄнᴏᴇ иʍя, нᴏ нᴀᴄᴛᴏящᴇᴇ ᴧи ᴏнᴏ? Чᴛᴏ ж, ϶ᴛᴏ нᴇ ʙᴀжнᴏ, ᴄᴋᴀжи ʍнᴇ <b>{expected_role}</b>, чᴛᴏ жᴇ ᴛы ʙыбᴩᴀᴧ бы?
|
||||
Убиᴛь дᴇʙᴏчᴋу, ᴩᴀди ʍиᴩᴀ
|
||||
Иᴧи убиᴛь ʍиᴩ, ᴩᴀди дᴇʙуɯᴋи?
|
||||
""")
|
||||
else:
|
||||
await message.reply(f"""{hide_link("https://i.pinimg.com/originals/a8/a5/a2/a8a5a29dd1613a48ef0a680e19973ff6.gif")}
|
||||
Нᴇᴛ, ϶ᴛᴏ нᴇ ᴛы. Тʙᴏᴇ нᴀᴄᴛᴏящᴇᴇ иʍя <b>{expected_role}</b>. Ты ʍнᴇ ʙнᴏʙь ᴄᴏʙᴩᴀᴧ. Инᴛᴇᴩᴇᴄнᴏ, чᴛᴏ ᴛᴇбя ᴨᴏбудиᴧᴏ. Нᴏ ϶ᴛᴏ нᴇ ʙᴀжнᴏ, ᴄᴋᴀжи ʍнᴇ <b>{expected_role}</b>, чᴛᴏ жᴇ ᴛы ʙыбᴩᴀᴧ бы?
|
||||
Убиᴛь дᴇʙᴏчᴋу, ᴩᴀди ʍиᴩᴀ
|
||||
Иᴧи убиᴛь ʍиᴩ, ᴩᴀди дᴇʙуɯᴋи?
|
||||
""")
|
||||
await state.update_data(role=expected_role)
|
||||
await state.set_state(Secret2.result)
|
||||
|
||||
|
||||
# ------------------- Финальный результат -------------------
|
||||
@router.message(StateFilter(Secret2.result))
|
||||
async def secret2_result(message: Message, state: FSMContext) -> None:
|
||||
await message.reply(f"Я ɜᴀᴨᴏʍню твой ответ.")
|
||||
await sleep(120)
|
||||
await message.reply("<b>Чужой мира сего.</b>")
|
||||
await state.clear()
|
||||
Reference in New Issue
Block a user