236 lines
21 KiB
Python
236 lines
21 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_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)
|