типо да
This commit is contained in:
15
bot/handlers/messages/__init__.py
Normal file
15
bot/handlers/messages/__init__.py
Normal 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)
|
||||
139
bot/handlers/messages/default.py
Normal file
139
bot/handlers/messages/default.py
Normal 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)
|
||||
39
bot/handlers/messages/reply_msg.py
Normal file
39
bot/handlers/messages/reply_msg.py
Normal 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)
|
||||
Reference in New Issue
Block a user