типо да

This commit is contained in:
admin
2025-09-08 00:40:18 +07:00
commit 0f05fc8455
83 changed files with 5775 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
from aiogram import Router
from .default import router as default_message_router
from .reply_msg import router as reply_message_router
# Настройка экспорта и роутера
__all__ = ('router',)
router: Router = Router(name=__name__)
# Подготовка роутера команд
#router.include_routers(
#reply_message_router,
#)
# Подключение стандартного роутера
router.include_router(default_message_router)

View File

@@ -0,0 +1,139 @@
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)

View File

@@ -0,0 +1,39 @@
from random import choice
from typing import List
from aiogram import Router
from aiogram.fsm.context import FSMContext
from aiogram.types import Message
router: Router = Router(name="reply_router")
RANDOM_PHRASES: List[str] = [
"Бла-бла-бла!", "Хва-а-а-тит!", "Серьёзно? 😏", "Опять ты это говоришь...",
"Хи-хи, смешно же!", "Ты снова шутник?", "Я уже слышал это раньше!", "Эй, не надо так!",
"Ладно, ладно, хватит!", "Хмм... интересно...", "Ты меня удивляешь!", "А давай лучше что-то новое?",
"Не могу поверить!", "Ахаха, это забавно!", "Серьёзно? Ну ладно...", "Эй, это уже слишком!",
"О, это было неожиданно!",
]
@router.message()
async def reply_message(message: Message, state: FSMContext) -> None:
# Достаём данные из состояния
data = await state.get_data()
last_bot_text = data.get("last_bot_text", "")
# КРИТИЧЕСКИ ВАЖНО: Проверяем, что состояние не пустое после перезапуска.
# Если состояние пустое (например, после перезапуска), то мы НЕ должны считать,
if last_bot_text and message.text and message.text.strip() == last_bot_text.strip():
response = "Не повторяй за мной!"
else:
response = choice(RANDOM_PHRASES)
ids = message.message_id-1
print(str())
# Отправляем ответ и ПОЛУЧАЕМ ОБЪЕКТ ОТПРАВЛЕННОГО СООБЩЕНИЯ
sent_message = await message.reply(response)
# Сохраняем текст последнего сообщения бота в состоянии
# Теперь состояние будет обновлено после каждого сообщения бота
await state.update_data(last_bot_text=sent_message.text)