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_ONE: Dict[str, Dict[str, List[str]]] = { "док": { "keywords": ["доктор", "док", "дотторе", "зандик"], "answers": [ "Дотторе довольно милый друг! Мне нравится проводить с ним время!", "Иногда он бывает слишком суровым... Но я верю, что смогу его перевоспитать!", "Мне иногда кажется, что он знает больше историй, чем хранится в библиотеке!", "Дотторе говорит загадками... а я всё равно не всегда понимаю!", "Он умный, но я уверен — внутри он добрый!", "Дотторе иногда ворчит, но всё равно заботится обо мне по-своему!", "Он часто думает о науке... а я думаю о печеньках!", "Мне кажется, он притворяется злым, а на самом деле просто боится дружбы.", "Когда он работает, в комнате становится тихо... даже огонь боится мешать ему.", "Я иногда думаю... а улыбается ли он, когда меня не видит?", ], }, "ара": { "keywords": ["ара", "аранара", "аранары", "ары", "кто ты", "ты кто"], "answers": [ "Мы, аранары, очень любим веселиться и смеяться!", "Хи-хи! 🌱 Ты можешь звать меня Ари!", "Наш народ живёт уже тысячи лет... но мы не умеем считать!", "Я маленький грибочек, но у меня большое сердце!", "Аранара — это хранитель улыбок и весёлых историй!", "Я люблю играть с детьми и рассказывать им истории!", "Говорят, что аранары видят то, что скрыто от других.", "Я — часть этой библиотеки, её дыхание и её смех!", "Аранара — это маленький проводник в мир грёз и чудес.", "Мы появляемся там, где нужен друг, даже если никто не звал!", ], }, "малыш": { "keywords": ["малыш", "девочка", "малышка", "она", "болезнь"], "answers": [ "Она милая девочка! Жаль, что больна!", "Она обожает сказки! Может, именно поэтому засыпает так сладко.", "А как её зовут?.. Я всегда забываю спросить!", "Иногда во сне она улыбается... значит, ей снятся хорошие истории.", "Дотторе грустит, когда смотрит на неё... но я верю, он её спасёт!", "Она словно светильник в тёмной комнате... даже если свет её тускнеет.", "Я думаю, её мечты сильнее болезни.", ], }, "эфир": { "keywords": ["эфир", "проект", "изобретение", "сплав", "эксперимент", "ядро"], "answers": [ "Эфир звучит как ветер, который нельзя поймать... но можно почувствовать!", "Дотторе часто говорит о проектах, но я понимаю в них только половину!", "Каждый новый сплав для него как новая история для меня.", "Эксперимент — это как игра, только иногда она пахнет гарью...", "Я слышал, что ядро может изменить всё... даже судьбы людей.", "В лаборатории так много звуков — шипение кислот, стук молотов, шёпот формул.", "Иногда мне кажется, что изобретения Дотторе живут своей жизнью...", "Эфир? Кефир? ЗЕФИР!", ], }, "мысль": { "keywords": ["мысл", "мысль", "мысли", "думаешь"], "answers": [ "О чём я думаю?.. Иногда о печеньках!", "Голова как будто полная тумана...", "Кажется, я что-то забыл... но не могу вспомнить...", "Мысли приходят и уходят, как маленькие птички.", "А ты когда-нибудь задумывался, откуда приходят мысли?", "Иногда мои мысли путаются и превращаются в сказки.", "Я думаю, что думать — это тяжело... лучше веселиться!", "Может, мысли — это просто шёпот библиотеки в моей голове?", "Когда я думаю слишком долго — у меня начинает чесаться макушка!", "Мысли — как облака... смотришь, и они уже другие.", ], }, "тайн": { "keywords": ["тайн", "тайны", "тайну", "тайна"], "answers": [ "Тайны? О-о, мы играем в детективов?!", "Я знаю много секретов... но не все можно рассказывать!", "Иногда самые большие тайны прячутся на виду.", "Тайна — это как закрытая книга. Ты хочешь открыть её?", "Хи-хи... а если твоя тайна уже записана в библиотеке?", "Некоторые тайны лучше хранить, чем раскрывать.", "Каждый друг — это тоже тайна, которую мы открываем постепенно.", "А твои секреты я храню надёжнее любого сундука!", "Тайна — это искра любопытства! Без неё жизнь скучная.", "Ш-ш-ш... хочешь услышать одну маленькую, но очень смешную тайну?", ], }, } RESPONSES_TWO: Dict[str, Dict[str, List[str]]] = { "Флинс": { "keywords": ["флинс", "светоносец", "раб конца", "кирилл", "илияс"], "answers": [ "Он носит с собой фонарик! Но пламя в нём холодное, как лунный свет... хи-хи!", "Говорят, он знает много-много грустных историй... но я верю, что смогу его рассмешить!", "Он всегда такой тихий-тихий, будто мышь в библиотеке! Может, он потерял свой голос?", "Он смотрит на звёзды, но не загадывает желания... странный! Я бы загадал гору зефира!", "Он ходит по кладбищу... наверное, ищет там забытые сказки! Я тоже люблю сказки!", "Он как будто несёт свой фонарь для тех, кто заблудился... это мило! Но грустно...", "Иногда он улыбается, но его улыбка похожа на тусклую луну... ей нужно больше солнечных лучей!", "Он говорит, что он «зритель»... а я люблю зрителей! Я могу для него спеть!", "Он пахнет старыми книгами и холодным ветром... интересный запах!", "Я думаю, внутри он не такой грустный, как кажется! Просто его смех спрятался очень глубоко!", ], }, "Сампо": { "keywords": ["сампо", "коски", "господин кот-ски", "кот", "хвост", "уши", "взрывной", "торговец", "взрывчатка", "бомбочки"], "answers": [ "Он большой пушистый кот! Хи-хи! У него есть хвост и ушки! Я бы хотел с ним поиграть!", "Он продаёт очень смешные бомбочки с рожицами! Они выглядят как игрушки, но бабахают очень громко!", "Он всегда такой весёлый и улыбчивый! Говорит, что можно выгодно продать даже собственные слёзы!", "Он знает много-много сказок и всегда говорит так красиво, будто читает книжку! Но не все сказки бывают добрыми...", "Его ядро треснутое... но он не грустит! Говорит, что эти шрамы напоминают ему о важных вещах!", "Он работает на чёрном рынке! Там темно и страшно, но он носит с собой свои весёлые бомбочки, чтобы стало светлее!", "Он умеет наводить морок и менять свой вид! Может, он и не кот вовсе, а большой хамелеон? Хи-хи!", "Он говорит, что у всего есть своя цена... а дружба? Разве дружбу тоже можно продать?", "Он шьёт одежду! И свои бомбочки тоже! Он очень талантливый кот!", "Он пережил много грустного... но теперь он просто сияет, как солнышко! Немного колючее солнышко!", ], }, "Аха": { "keywords": ["аха", "уильям", "уилл", "гомункул", "священник", "рыжий"], "answers": [ "Он большой рыжий кот! Хи-хи! Нет, подожди... он человек! Но очень смешной и любопытный!", "Он священник! Я это узнал от... Но он не верит в сказки, которые рассказывает... хи-хи, как же так получается?", "Он сделан из лоскутков и магии! Как кукла, но очень умная и ходит сама!", "Он любит людей, как я люблю сказки! Но считает их глупыми зверушками... это немного грустно.", "Он всё запоминает! Прочитает книжку один раз и уже знает её наизусть! Вот бы мне такую память!", "Он рисует на себе рожицы красками! Превращает своё лицо в картину! Хи-хи, весёлый он!", "Он не ест печенек... он питается магией и одуванчиками! И церковным вином!", "Он часто смеётся, но его смех похож на звон колокольчика... иногда в нём слышится что-то колючее.", "Он сбежал из своей клетки и теперь путешествует! Ищет новые истории и новые лица!", "Он как большой ребёнок, который хочет всё потрогать и со всем поиграть! Даже с людьми!", ], }, "Альбедо": { "keywords": ["альбедо", "эраст", "алхимик", "аднес", "виверна", "проводник"], "answers": [ "Он очень умный учёный! Знает много-много сложных формул и всегда всё рассчитывает!", "У него есть свой собственный дракончик-виверна! Хи-хи, я бы тоже хотел такого друга!", "Он любит печеньки с шоколадом! И слоников! Говорит, что они очень мудрые!", "Он часто ходит вверх ногами! Говорит, что так ему лучше думается... хи-хи, смешно!", "Он всегда носит перчатки и высоко завязывает хвост! Наверное, прячет в них секретики!", "Он говорит, что дети — это чистые души! И сам иногда играет с ними!", "Его папа был учёным, и он очень хотел быть на него похожим... но потом всё стало грустно.", "Он много путешествовал и видел разные земли! Наверное, знает кучу интересных историй!", "Он шутит и кривляется, но внутри он очень серьёзный и немного грустный...", "Он может превращать одни вещества в другие! Это же как волшебство! Хи-хи!", ], }, "Фэйсяо": { "keywords": ["фэйсяо", "фей", "сокольная мощь", "лисья сущность", "полковник", "лиса", "ветер"], "answers": [ "Она быстрая, как ветер! Её даже прозвали Соколиной Мощью! Хи-хи!", "У неё есть пушистые лисьи ушки и хвост! Я бы хотел с ними поиграть!", "Она очень сильная и храбрая! Командует целым батальоном и защищает свою родину!", "Она пьёт очень много кофе! Говорит, что он даёт ей силы, но иногда у неё дёргается глазок!", "Она не любит юбки! Говорит, что в них неудобно летать на магии ветра!", "Она встаёт очень рано, когда ещё все спят, и бегает по росе! Это так здорово!", "Она играет на гитаре! Один солдат подарил ей её, и теперь она играет, вспоминая добрые времена!", "Она читает любовные романы! Но это большой секрет, потому что она стесняется! Хи-хи!", "Она пахнет лесом и орхидеями! Очень приятно пахнет!", "Она может летать! Представляешь? Просто поднимается в воздух на своём ветре! Как птичка!", ], }, "Лоча": { "keywords": ["лоча", "ванитас", "лекарь с третьей улицы", "анатом", "морфогенезия"], "answers": [ "Он очень чистый и аккуратный! Его лавка пахнет спиртом и травами, а не страшными вещами! Хи-хи!", "Он знает всё-всё про тело человека! Может рассказать, где какая косточка и мышца!", "Он помогает людям... но иногда очень странным образом. Говорит, что плоть хранит много секретов!", "У него есть целая библиотека медицинских книг! И он иногда меняет зелье на интересную книжку!", "Он коллекционирует засушенных насекомых! Говорит, что это очень успокаивает!", "Он очень вежливый и улыбчивый! Никогда не скажешь, что он работает с такими... э-э-э... грустными вещами.", "Он умеет менять плоть с помощью магии! Может сделать косточку твёрже или мышцу сильнее!", "Он живёт на чёрном рынке, но его комната очень чистая и уютная! Просто нужно много-много стирать!", "Он изучает маледиктов.ловкие.. это такие грустные существа. Но он говорит, что это очень важно!", "Его пальцы очень ! Он может делать самую тонкую работу, как ювелир! Хи-хи!", ], }, } RESPONSES: Dict[str, Dict[str, List[str]]] = {**RESPONSES_ONE, **RESPONSES_TWO} # === Случайные фразы, если совпадения нет === 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)