from typing import Dict, List from aiogram import Router from aiogram.fsm.context import FSMContext from aiogram.types import Message from bot.utils import get_best_response # Настройка экспорта и роутера __all__ = ("router",) router: Router = Router(name="message_router") # === Словарь ключевых слов (синонимы) и возможных ответов === RESPONSES: Dict[str, Dict[str, List[str]]] = { "док": { "keywords": ["доктор", "док", "дотторе", "зандик"], "answers": [ "Дотторе довольно милый друг! Мне нравится проводить с ним время!", "Иногда он бывает слишком суровым... Но я верю, что смогу его перевоспитать!", "Мне иногда кажется, что он знает больше историй, чем хранится в библиотеке!", "Дотторе говорит загадками... а я всё равно не всегда понимаю!", "Он умный, но я уверен — внутри он добрый!", "Дотторе иногда ворчит, но всё равно заботится обо мне по-своему!", "Он часто думает о науке... а я думаю о печеньках!", "Мне кажется, он притворяется злым, а на самом деле просто боится дружбы.", "Когда он работает, в комнате становится тихо... даже огонь боится мешать ему.", "Я иногда думаю... а улыбается ли он, когда меня не видит?", ], }, "ара": { "keywords": ["ара", "аранара", "аранары", "ары", "кто ты", "ты кто"], "answers": [ "Мы, аранары, очень любим веселиться и смеяться!", "Хи-хи! 🌱 Ты можешь звать меня Ари!", "Наш народ живёт уже тысячи лет... но мы не умеем считать!", "Я маленький грибочек, но у меня большое сердце!", "Аранара — это хранитель улыбок и весёлых историй!", "Я люблю играть с детьми и рассказывать им истории!", "Говорят, что аранары видят то, что скрыто от других.", "Я — часть этой библиотеки, её дыхание и её смех!", "Аранара — это маленький проводник в мир грёз и чудес.", "Мы появляемся там, где нужен друг, даже если никто не звал!", ], }, "малыш": { "keywords": ["малыш", "девочка", "малышка", "она", "болезнь"], "answers": [ "Она милая девочка! Жаль, что больна!", "Она обожает сказки! Может, именно поэтому засыпает так сладко.", "А как её зовут?.. Я всегда забываю спросить!", "Иногда во сне она улыбается... значит, ей снятся хорошие истории.", "Дотторе грустит, когда смотрит на неё... но я верю, он её спасёт!", "Она словно светильник в тёмной комнате... даже если свет её тускнеет.", "Я думаю, её мечты сильнее болезни.", ], }, "эфир": { "keywords": ["эфир", "проект", "изобретение", "сплав", "эксперимент", "ядро"], "answers": [ "Эфир звучит как ветер, который нельзя поймать... но можно почувствовать!", "Дотторе часто говорит о проектах, но я понимаю в них только половину!", "Каждый новый сплав для него как новая история для меня.", "Эксперимент — это как игра, только иногда она пахнет гарью...", "Я слышал, что ядро может изменить всё... даже судьбы людей.", "В лаборатории так много звуков — шипение кислот, стук молотов, шёпот формул.", "Иногда мне кажется, что изобретения Дотторе живут своей жизнью...", "Эфир? Кефир? ЗЕФИР!", ], }, "мысль": { "keywords": ["мысл", "мысль", "мысли", "думаешь"], "answers": [ "О чём я думаю?.. Иногда о печеньках!", "Голова как будто полная тумана...", "Кажется, я что-то забыл... но не могу вспомнить...", "Мысли приходят и уходят, как маленькие птички.", "А ты когда-нибудь задумывался, откуда приходят мысли?", "Иногда мои мысли путаются и превращаются в сказки.", "Я думаю, что думать — это тяжело... лучше веселиться!", "Может, мысли — это просто шёпот библиотеки в моей голове?", "Когда я думаю слишком долго — у меня начинает чесаться макушка!", "Мысли — как облака... смотришь, и они уже другие.", ], }, "тайн": { "keywords": ["тайн", "тайны", "тайну", "тайна"], "answers": [ "Тайны? О-о, мы играем в детективов?!", "Я знаю много секретов... но не все можно рассказывать!", "Иногда самые большие тайны прячутся на виду.", "Тайна — это как закрытая книга. Ты хочешь открыть её?", "Хи-хи... а если твоя тайна уже записана в библиотеке?", "Некоторые тайны лучше хранить, чем раскрывать.", "Каждый друг — это тоже тайна, которую мы открываем постепенно.", "А твои секреты я храню надёжнее любого сундука!", "Тайна — это искра любопытства! Без неё жизнь скучная.", "Ш-ш-ш... хочешь услышать одну маленькую, но очень смешную тайну?", ], }, } # === Случайные фразы, если совпадения нет === RANDOM_PHRASES: List[str] = [ "Я Ари! Компаньон Дотторе и ваш лучший друг! Можете обращаться ко мне!", "Я живу здесь уже десятки лет... и мне всё ещё весело!", "Кхм... почему ты так странно разговариваешь? Ничего не понимаю!", "Мы играем в шарады? Давай попробуй ещё раз, может я пойму хоть одно слово!", "Ты кажешься таким загадочным... прямо как проекты Дотторе, которые меня вечно пугают!", "Ой! Ты меня напугал! Но всё равно приятно видеть нового друга!", "Если вдруг станет грустно — просто обними аранару. Мы очень мягкие!", "Иногда даже мне хочется спрятаться между колб и подремать...", "А может, именно твоё слово станет началом новой истории?", "Дотторе говорит, что я слишком болтлив... а разве это плохо?", "Ты такой серьёзный... может, стоит немного пошутить?", "Иногда кажется, что слова сами выбирают нас, а не мы их!", ] # === Хэндлеры === @router.message() async def handle_message(message: Message, state: FSMContext) -> None: """ Обрабатывает входящие сообщения от пользователя. Определяет ответ по ключевым словам или случайную фразу. :param message: объект сообщения :param state: FSMContext для работы с состояниями """ await state.clear() response: str = get_best_response( message.text or "", responses=RESPONSES, random_phrases=RANDOM_PHRASES, ) await message.answer(text=response)