--- url: /automation/event.md description: >- Переменная event в автоматизации Astral Moderation. Какие свойства есть у каждого события, как использовать их в тексте сообщений и условиях сценария. --- # Переменная event
В тексте сообщений и в условиях сценария доступна переменная `event`: она описывает событие, из-за которого сценарий сработал. Свойства зависят от события, поэтому здесь они собраны по каждому из них.
## Что еще есть в шаблоне { #context } Кроме `event`, в тексте доступны обычные переменные [шаблонов сообщений](../templates/): | Переменная | Что это | |---|---| | `member` | Участник события: тот, о ком оно (`event.targetId`), а если такого нет, то тот, кто его вызвал (`event.actorId`). Если участника нет совсем, например при событии по расписанию, это бот | | `chat` | Чат, в котором работает сценарий | | `bot` | Бот | | `event` | Событие, свойства ниже | ## Общие свойства { #common } Эти свойства есть у любого события. У событий по расписанию участников нет, поэтому `event.actorId` и `event.targetId` пустые. | Свойство | Тип | Что содержит | |---|---|---| | `event.type` | Строка | Тип события, например `level.up` или `mod.warn` | | `event.actorId` | Число или пусто | ID того, кто совершил действие, например модератора. Если действие совершил не человек, пусто | | `event.targetId` | Число или пусто | ID того, кого событие касается | | `event.threadId` | Число или пусто | ID топика, если событие произошло в топике | Свойства из таблиц ниже добавляются к общим. Если у события нет нужного свойства, оно пустое. Проверяйте это условием: `{% if event.reason %}…{% endif %}`. ## Участники { #members } | Событие | Свойства | |---|---| | Участник вошел | Только общие: `event.targetId` вошедший, `event.actorId` тот, кто его добавил | | Участник вышел | Только общие. `event.actorId` есть, если участника удалил другой человек | | Заявка на вступление | Только общие: `event.targetId` подавший заявку | | Участник сменил имя | `event.from` старое имя, `event.to` новое имя. Событие приходит, только если в чате включен журнал смены имен | | Закончился режим новичка | Только общие | | Капча пройдена, Капча провалена | Только общие | | Новый уровень | `event.level` достигнутый уровень | ## Модерация { #moderation } Во всех событиях модерации `event.actorId` это модератор, `event.targetId` наказанный участник. | Событие | Свойства | |---|---| | Выдано предупреждение | `event.caseNo` номер кейса, `event.reason` причина | | Снято предупреждение | `event.caseNo` номер кейса и `event.relatedCase` номер снятого предупреждения. При снятии всех сразу вместо них `event.clearedCount` сколько снято | | Выдан мут | `event.caseNo`, `event.reason`, `event.until` время окончания в миллисекундах Unix, если срок задан | | Снят мут | `event.caseNo` | | Выдан бан | `event.caseNo`, `event.reason`, `event.until` | | Снят бан | `event.caseNo` | | Участник исключен | `event.caseNo`, `event.reason` | | Наказание истекло | `event.caseNo` номер кейса. Вид истекшего наказания в шаблон не передается: `event.type` всегда тип самого события | ## Роли и права { #roles } | Событие | Свойства | |---|---| | Назначен администратор | Только общие. `event.actorId` назначивший | | Администратор разжалован | Только общие | | Изменены права администратора | `event.rights_diff.added` и `event.rights_diff.removed`: списки прав, которые добавили и убрали | ## Сообщения { #messages } | Событие | Свойства | |---|---| | Новое сообщение | `event.message.id` номер сообщения, `event.message.text` текст, `event.message.linkCount` число ссылок. `event.actorId` и `event.targetId` это автор | | Сообщение изменено | `event.message_id` номер сообщения | | Бот удалил сообщение | Автомодерация: `event.message_id`, `event.thread_id`, `event.filter` название фильтра, `event.earlier` пометка, что удалено раньше. Команда `/del`: `event.messageId` | | Сообщение закреплено | `event.message_id`, если закрепил человек в Telegram, и `event.messageId`, если закрепили командой `/pin` | ::: info Названия свойств Свойства разных событий исторически названы по-разному: где-то `message_id`, где-то `messageId`. Названия в таблицах точные, пишите их так же. ::: ## Автомодерация { #automod } | Событие | Свойства | |---|---| | Сработала автомодерация | `event.filter` название фильтра, `event.action` примененное наказание, `event.excerpt` фрагмент сообщения, `event.infraction_case` номер кейса, если наказание выдано. `event.targetId` нарушитель | ## Чат { #chat } | Событие | Свойства | |---|---| | Изменено название чата | `event.from` старое название, `event.to` новое | | Изменено фото чата | Только общие | | Создан топик | `event.thread_id` ID топика, `event.name` название | | Изменен топик | `event.from` старое название, `event.to` новое | | Закрыт топик | `event.thread_id` | | Начат видеочат | Только общие | ## По расписанию { #schedule } События «Каждый день», «Каждую неделю» и «Через равные промежутки» несут только `event.type`. Участника нет, поэтому `member` это бот, а действия и условия про участника недоступны. ## Клубы { #club } События «Игрок вступил в клуб» и «Игрок покинул клуб» описывают игрока Brawl Stars, а не участника чата. | Свойство | Тип | Что содержит | |---|---|---| | `event.player.tag` | Строка | Тег игрока с решеткой, например `#2YPLR8Y` | | `event.player.name` | Строка | Никнейм | | `event.player.trophies` | Число | Кубки | | `event.player.role` | Строка | Роль в клубе | | `event.club.tag` | Строка | Тег клуба с решеткой | | `event.club.name` | Строка | Название клуба | | `event.telegram.linked` | Да или нет | Привязан ли тег игрока к Telegram | | `event.telegram.username` | Строка | Юзернейм в Telegram без `@`, пусто, если не привязан или юзернейма нет | | `event.telegram.userId` | Число или пусто | ID в Telegram | Если Telegram привязан и ID известен, `member` это этот участник чата, и можно писать `{{ member }}`. Подробнее: [События клуба](./clubs). ## Примеры { #examples } Поздравление с уровнем: ```template {{ member }} получил уровень {{ event.level }}! ``` Предупреждение с причиной, если она указана: ```template {{ member }}, вам вынесено предупреждение №{{ event.caseNo }}.{% if event.reason %} Причина: {{ event.reason }}.{% endif %} ``` Игрок вышел из клуба: ```template Игрок {{ event.player.name }} ({{ event.player.tag }}) покинул клуб {{ event.club.name }} Кубки: {{ number_format(event.player.trophies) }} {% if event.telegram.linked %}Telegram: {% if event.telegram.username %}@{{ event.telegram.username }}{% else %}привязан{% endif %}{% else %}Telegram не был привязан{% endif %} ``` Сообщение со ссылкой (для события «Новое сообщение»): ```template {{ member }}, ссылок в сообщении: {{ event.message.linkCount }} ``` ## События, которые пока не срабатывают { #not-yet } ::: warning Внимание Эти события есть в списке выбора, но бот пока их не отправляет, поэтому сценарии на них не запустятся: «Заявка одобрена», «Заявка отклонена», «Изменились роли», «Добавлен буст», «Сработала лесенка». Не стройте на них сценарии, пока они не появятся в заметках к версии. :::