Модуль ИИ (В РАЗРАБОТКЕ!)
This commit is contained in:
242
bot/handlers/messages/default_msg.py
Normal file
242
bot/handlers/messages/default_msg.py
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
"""
|
||||||
|
Триггер-хэндлер: реагирует на обращения к Лайле с именем персонажа.
|
||||||
|
Формат: "Лайла [что угодно] [имя или псевдоним]"
|
||||||
|
"""
|
||||||
|
from typing import Dict, Optional
|
||||||
|
import random
|
||||||
|
|
||||||
|
from aiogram import Router
|
||||||
|
from aiogram.types import Message
|
||||||
|
|
||||||
|
__all__ = ("router",)
|
||||||
|
router: Router = Router(name="triggers_router")
|
||||||
|
|
||||||
|
|
||||||
|
CHARACTERS: Dict[str, Dict] = {
|
||||||
|
"эвелин": {
|
||||||
|
"aliases": ["эвелин", "эва", "эви"],
|
||||||
|
"answers": [
|
||||||
|
"Эвелин умеет молчать так, что хочется говорить.",
|
||||||
|
"Эва всегда знает больше, чем говорит. Это немного пугает.",
|
||||||
|
"С ней рядом становится спокойно. Не знаю почему.",
|
||||||
|
"Интересно, о чём она думает в тишине...",
|
||||||
|
"Эвелин тихая снаружи. Но внутри — целый ураган, я уверена.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"лео": {
|
||||||
|
"aliases": ["лео", "лёва", "лёня"],
|
||||||
|
"answers": [
|
||||||
|
"Лео громкий, яркий и немного безрассудный. Мне нравится!",
|
||||||
|
"Он смеётся первым и уходит последним. Настоящий.",
|
||||||
|
"Лео всегда найдёт повод для праздника, даже если его нет.",
|
||||||
|
"Кажется, он боится тишины. Поэтому и заполняет её собой.",
|
||||||
|
"За его смехом прячется что-то очень серьёзное...",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"маркус": {
|
||||||
|
"aliases": ["маркус", "марк"],
|
||||||
|
"answers": [
|
||||||
|
"Маркус говорит мало, но каждое слово весит.",
|
||||||
|
"Он из тех, кто держит слово даже когда это неудобно.",
|
||||||
|
"С Маркусом не поспоришь. Не потому что нельзя — просто незачем.",
|
||||||
|
"Он смотрит так, будто видит тебя насквозь. Немного жутковато.",
|
||||||
|
"Маркус — тот, на кого можно положиться в самый плохой день.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"мари": {
|
||||||
|
"aliases": ["мари", "маришка", "мариша"],
|
||||||
|
"answers": [
|
||||||
|
"Мари — это как утренний свет. Мягко и неожиданно тепло.",
|
||||||
|
"Она помнит мелочи, которые другие не замечают. Это её суперсила.",
|
||||||
|
"С Мари любой разговор становится важным.",
|
||||||
|
"Она улыбается даже когда грустно. Не притворяется — просто верит.",
|
||||||
|
"Мари умеет прощать. Это редкость.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"либе": {
|
||||||
|
"aliases": ["либе", "либ"],
|
||||||
|
"answers": [
|
||||||
|
"Либе... имя звучит как песня на незнакомом языке.",
|
||||||
|
"Она всегда чуть в стороне, но именно к ней тянутся люди.",
|
||||||
|
"Либе видит красоту там, где другие видят хаос.",
|
||||||
|
"Она не объясняет себя. И не должна.",
|
||||||
|
"С Либе можно молчать — и это не будет неловко.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"мотциэль": {
|
||||||
|
"aliases": ["мотциэль", "мотц", "моц"],
|
||||||
|
"answers": [
|
||||||
|
"Мотциэль... даже имя звучит как заклинание.",
|
||||||
|
"Он существует между мирами. Буквально.",
|
||||||
|
"Спрашивать его о прошлом — плохая идея. Очень плохая.",
|
||||||
|
"Мотциэль помнит вещи, которых не было. Или были?",
|
||||||
|
"Его глаза смотрят в разные эпохи одновременно.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"виктор": {
|
||||||
|
"aliases": ["виктор", "вик", "витя"],
|
||||||
|
"answers": [
|
||||||
|
"Виктор всегда побеждает. Это в имени.",
|
||||||
|
"Он не злой. Просто у него другая шкала ценностей.",
|
||||||
|
"Виктор говорит правду даже когда это больно. Особенно когда больно.",
|
||||||
|
"Не стоит играть с ним в слова — проиграешь.",
|
||||||
|
"За его холодностью — старая-старая усталость.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"кситти": {
|
||||||
|
"aliases": ["кситти", "кси", "ксит"],
|
||||||
|
"answers": [
|
||||||
|
"Кситти — маленький хаос в красивой упаковке.",
|
||||||
|
"Она никогда не делает то, что от неё ожидают. Никогда.",
|
||||||
|
"С Кситти скучно не бывает. Опасно — бывает. Скучно — нет.",
|
||||||
|
"Она собирает странные вещи и странных людей.",
|
||||||
|
"Кситти смеётся над правилами. Потому что сама их придумывает.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"кадфаль": {
|
||||||
|
"aliases": ["кадфаль", "кад", "кадф"],
|
||||||
|
"answers": [
|
||||||
|
"Кадфаль несёт что-то древнее в каждом шаге.",
|
||||||
|
"Он не торопится. У него другое ощущение времени.",
|
||||||
|
"Кадфаль знает цену словам — поэтому тратит их редко.",
|
||||||
|
"В его присутствии хочется стоять прямо.",
|
||||||
|
"Он видел многое. Слишком многое для одной жизни.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"вайш": {
|
||||||
|
"aliases": ["вайш", "вай"],
|
||||||
|
"answers": [
|
||||||
|
"Вайш появляется неожиданно и исчезает так же.",
|
||||||
|
"Её след — это вопросы без ответов.",
|
||||||
|
"Вайш знает что-то, что тебе лучше не знать.",
|
||||||
|
"Она не объясняет своих решений. Просто делает.",
|
||||||
|
"С Вайш никогда не знаешь, друг она или нет.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"скаф": {
|
||||||
|
"aliases": ["скаф"],
|
||||||
|
"answers": [
|
||||||
|
"Скаф — имя, которое не забывается.",
|
||||||
|
"Он работает в тени. Не потому что боится света — просто так удобнее.",
|
||||||
|
"Скаф знает цену всему. Буквально всему.",
|
||||||
|
"Его нельзя купить. Его можно только нанять. Это разница.",
|
||||||
|
"Те, кто встречал Скафа, редко рассказывают об этом дважды.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"куарти": {
|
||||||
|
"aliases": ["куарти", "куар"],
|
||||||
|
"answers": [
|
||||||
|
"Куарти — четыре буквы и миллион вопросов.",
|
||||||
|
"Он улыбается, когда другие нервничают. Это не успокаивает.",
|
||||||
|
"Куарти коллекционирует долги. Чужие.",
|
||||||
|
"Говорят, он никогда не проигрывает. Говорят.",
|
||||||
|
"Куарти появляется именно тогда, когда тебе нужна помощь. И это не случайно.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"саэрин": {
|
||||||
|
"aliases": ["саэрин", "саэ", "сэрин"],
|
||||||
|
"answers": [
|
||||||
|
"Саэрин — как туман. Красиво и немного опасно.",
|
||||||
|
"Она говорит загадками не потому что хочет запутать — просто иначе не умеет.",
|
||||||
|
"Саэрин помнит всё, что ей говорят. Всё.",
|
||||||
|
"Её спокойствие пугает больше, чем чужой гнев.",
|
||||||
|
"Саэрин выбирает слова как оружие — точно и без лишнего.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"котики": {
|
||||||
|
"aliases": ["котики", "котик", "кот", "кошка"],
|
||||||
|
"answers": [
|
||||||
|
"Котики — это лучшее, что есть в этом мире. Без обсуждений.",
|
||||||
|
"Котик сел на тебя — ты избран.",
|
||||||
|
"Кот смотрит на тебя и думает что-то важное. Наверное.",
|
||||||
|
"Котики всегда правы. Это научный факт.",
|
||||||
|
"Маленький тёплый комочек счастья. Что ещё нужно?",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"нотик": {
|
||||||
|
"aliases": ["нотик", "нота", "нотка"],
|
||||||
|
"answers": [
|
||||||
|
"Нотик! Звучит как маленькая музыкальная нота! 🎵",
|
||||||
|
"Нотик — тот, кто приносит мелодию туда, где её не хватает.",
|
||||||
|
"Маленький, но важный. Как все хорошие вещи.",
|
||||||
|
"Нотик — это и ласково, и загадочно одновременно.",
|
||||||
|
"Из таких маленьких нотиков складываются большие истории.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"илья": {
|
||||||
|
"aliases": ["илья", "илюха", "илюша"],
|
||||||
|
"answers": [
|
||||||
|
"Илья — имя с характером. Твёрдое и живое.",
|
||||||
|
"Илья всегда знает что делать. Или уверенно делает вид.",
|
||||||
|
"С Ильёй легко — он не усложняет лишнего.",
|
||||||
|
"Он из тех, кто сделает, а потом расскажет. Не наоборот.",
|
||||||
|
"Илья редко жалуется. Чаще просто решает.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"ина": {
|
||||||
|
"aliases": ["ина", "инка", "инуля"],
|
||||||
|
"answers": [
|
||||||
|
"Ина — короткое имя, за которым много всего.",
|
||||||
|
"Она тихая, но запоминается.",
|
||||||
|
"Ина умеет слушать так, что хочется говорить.",
|
||||||
|
"В ней есть что-то очень своё, неповторимое.",
|
||||||
|
"Ина — как маленький огонёк. Незаметный, но греет.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"абсцисс": {
|
||||||
|
"aliases": ["абсцисс", "абс"],
|
||||||
|
"answers": [
|
||||||
|
"Абсцисс! Это математика или имя? Хи-хи!",
|
||||||
|
"Ось абсцисс — горизонталь жизни. Всё движется по ней.",
|
||||||
|
"Абсцисс звучит как заклинание из учебника.",
|
||||||
|
"Кто-то мечтает о приключениях, а кто-то — об осях координат!",
|
||||||
|
"Абсцисс и ордината. Звучит как имена двух загадочных персонажей!",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Имена, на которые Лайла откликается
|
||||||
|
LAYLA_NAMES = ["лайла", "лайл", "лая"]
|
||||||
|
|
||||||
|
|
||||||
|
def find_character_answer(text: str) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
Проверяет:
|
||||||
|
1. Есть ли в тексте обращение к Лайле
|
||||||
|
2. Есть ли имя персонажа
|
||||||
|
|
||||||
|
Возвращает случайный ответ или None.
|
||||||
|
"""
|
||||||
|
text_lower = text.lower()
|
||||||
|
|
||||||
|
# Проверяем обращение к Лайле
|
||||||
|
if not any(name in text_lower for name in LAYLA_NAMES):
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Ищем персонажа
|
||||||
|
for character, data in CHARACTERS.items():
|
||||||
|
for alias in data["aliases"]:
|
||||||
|
if alias in text_lower:
|
||||||
|
return random.choice(data["answers"])
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@router.message()
|
||||||
|
async def handle_triggers(message: Message) -> None:
|
||||||
|
"""
|
||||||
|
Реагирует только если:
|
||||||
|
- Сообщение от живого человека
|
||||||
|
- В тексте есть обращение к Лайле
|
||||||
|
- В тексте есть имя персонажа
|
||||||
|
|
||||||
|
На всё остальное — молчит.
|
||||||
|
"""
|
||||||
|
#if not message.text or not message.from_user or message.from_user.is_bot:
|
||||||
|
#return
|
||||||
|
|
||||||
|
#response = find_character_answer(message.text)
|
||||||
|
|
||||||
|
#if response:
|
||||||
|
#await message.reply(response)
|
||||||
|
return
|
||||||
Reference in New Issue
Block a user