140 lines
9.6 KiB
Python
140 lines
9.6 KiB
Python
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)
|