""" Триггер-хэндлер: реагирует на обращения к Лайле с именем персонажа. Формат: "Лайла [что угодно] [имя или псевдоним]" """ from typing import Dict, List, 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