Формат правила
Правило автоматизации можно написать вручную и загрузить файлом: «Автоматизации → Новое правило → Загрузить из файла». Здесь — все поля, допустимые значения и пределы. Загруженное правило приезжает выключенным: проверьте его в редакторе и включите.
Файл
JSON-файл (кодировка UTF-8) такого вида:
{
"format": "paperbot-automation",
"guild_id": "123456789012345678",
"rule": {
"name": "Напомнить автору и закрыть",
"trigger": { "type": "author_silent", "minutes": 1440 },
"conditions": [
{ "type": "status", "value": "open" },
{ "type": "paused", "value": false }
],
"actions": [
{ "type": "message", "text": "{user}, вопрос ещё актуален?",
"buttons": [
{ "key": "stillneed", "label": "Да, нужно", "style": "primary", "who": "author" }
] },
{ "type": "wait", "minutes": 1440 },
{ "type": "close", "reason": "Автор не ответил" }
]
}
}| Поле | Что это |
|---|---|
format | Всегда paperbot-automation. Другой файл не примется. |
guild_id | ID сервера, для которого написано правило, строкой. Это число в адресе веб-панели после /dashboard/. Если не указан или указан другой сервер — роли и каналы из правила выпадают (см. «Что проверяется»). |
rule.name | Название, до 100 символов. Пусто — «Без названия». |
rule.trigger | Когда срабатывает — один объект, триггеры. |
rule.conditions | Если — список, до 20 условий, должны выполниться все; можно пустой. Условия. |
rule.actions | Что сделать — список, от 1 до 10 шагов по порядку. Действия. |
Где взять ID
- •Сервер — число в адресе веб-панели:
/dashboard/ID/…. - •Категория тикетов — число в адресе её страницы:
/dashboard/…/categories/ID. - •Роль и канал — ID на Lolka. ID всегда пишутся числом или строкой из цифр.
- •Своя кнопка — ключ, который вы придумываете сами: 4–16 знаков, латиница в нижнем регистре и цифры (
stillneed,helped1).
Триггеры (rule.trigger)
Поле type обязательно, остальные — по таблице. Минуты у таймеров — от 5 до 43200 (30 дней).
opened- Когда
- Тикет открыт
- Поля
- —
first_staff_reply- Когда
- Первый ответ персонала
- Поля
- —
claimed- Когда
- Тикет взят
- Поля
- —
unclaimed- Когда
- Тикет снят с сотрудника
- Поля
- —
closed- Когда
- Тикет закрыт
- Поля
- —
reopened- Когда
- Тикет переоткрыт
- Поля
- —
rated- Когда
- Поставлена оценка
- Поля
- — (какая — условием rating)
button- Когда
- Нажата своя кнопка
- Поля
button— ключ кнопки (обязательно)
message- Когда
- Сообщение в открытом тикете
- Поля
from:any|author|staff(по умолчанию any);match: пусто (любое),containsилиregex;text— что искать, до 200 символов (для contains варианты через|, без учёта регистра);once: true — один раз на тикет (по умолчанию true);files: true — только сообщения с вложением (по умолчанию false)
priority_changed- Когда
- Сменился приоритет
- Поля
to:low|medium|highили пусто — любой
moved- Когда
- Перенесён в категорию
- Поля
category_id— ID категории или пусто — в любую
author_left- Когда
- Автор покинул сервер
- Поля
- —
role_changed- Когда
- У автора появилась или пропала роль
- Поля
role_ids— до 10 ID ролей (обязательно);change:added|removed(по умолчанию added)
crowded- Когда
- Открытых в категории стало больше N
- Поля
count— от 1 до 500 (обязательно);category_idили пусто — любая
participant- Когда
- Участник добавлен или убран (запустивший — сам участник)
- Поля
change:any|added|removed(по умолчанию any)
pause_ended- Когда
- Кончилась пауза автозакрытия (срок вышел или сняли)
- Поля
- —
staff_left- Когда
- Взявший тикет сотрудник ушёл с сервера
- Поля
- —
command- Когда
- В тикете вызвана своя команда
- Поля
name— имя команды без префикса, до 32 символов, или пусто — любая
author_silent- Когда
- Автор молчит столько минут
- Поля
minutes(обязательно)
staff_silent- Когда
- Персонал молчит столько минут
- Поля
minutes(обязательно)
unclaimed_for- Когда
- Никто не взял столько минут
- Поля
minutes(обязательно)
open_for- Когда
- Открыт дольше стольких минут
- Поля
minutes(обязательно)
Регулярка в message — без учёта регистра и не больше одного повтора (*, +, {n,m}); сверяется первая 1000 символов сообщения.
Условия (rule.conditions)
Каждое условие — объект с type. Где есть op: gte — «не меньше», lte — «не больше». Условие с пустым обязательным полем отбрасывается.
category- Проверяет
- Категория тикета
- Поля
op:in|not_in;value— список ID категорий
status- Проверяет
- Статус
- Поля
value:open|closed
claimed- Проверяет
- Взят ли тикет
- Поля
value: true | false
priority- Проверяет
- Приоритет
- Поля
value— список изlow,medium,high
author_role- Проверяет
- Роль автора
- Поля
op:has|has_not;value— список ID ролей
claimer_role- Проверяет
- Роль взявшего
- Поля
op:has|has_not;value— список ID ролей
rating- Проверяет
- Оценка
- Поля
op:gte|lte;value— от 1 до 5
waiting- Проверяет
- Кого ждёт тикет
- Поля
value:staff(ответа персонала) |author
hours- Проверяет
- Часы поддержки
- Поля
value:in(сейчас рабочее время) |out
answer- Проверяет
- Ответ в форме открытия
- Поля
question— текст вопроса (до 100, пусто — любой вопрос);contains— что содержит ответ (до 200, обязательно)
paused- Проверяет
- Пауза автозакрытия
- Поля
value: true | false
time- Проверяет
- День и время (время сервера)
- Поля
days— список изmon…sun(пусто — все дни);from,to— «ЧЧ:ММ». Нужны дни или оба времени
author_open- Проверяет
- Открытых тикетов у автора
- Поля
op;value— от 1 до 100
messages- Проверяет
- Сообщений в тикете
- Поля
op;value— от 0 до 10000;from:any|author|staff
age- Проверяет
- Сколько тикет открыт
- Поля
op;minutes— от 1 до 525600
reopens- Проверяет
- Сколько раз переоткрывали
- Поля
op;value— от 0 до 1000
member_for- Проверяет
- Сколько дней автор на сервере
- Поля
op;value— от 0 до 3650
Действия (rule.actions)
Шаги выполняются по порядку, до 10 в списке и в каждой ветке. Тексты — до 2000 символов, в них работают подстановки. Шаг с незнакомым type отбрасывается; шаг без обязательного поля — ошибка загрузки с объяснением.
message- Что делает
- Написать в тикет
- Поля
text;buttons— до 5 своих кнопок (нужен текст или кнопки);pin: true — закрепить;role_ids— до 10 ролей для пинга
channel_message- Что делает
- Написать в канал
- Поля
channel_id,text(оба обязательны);role_ids— пинг
reply_template- Что делает
- Ответ из шаблона
- Поля
name— имя шаблона ответа из раздела «Команды», до 50
close- Что делает
- Закрыть тикет
- Поля
reason— до 500
delete_channel- Что делает
- Удалить канал (открытый тикет сначала закрывается)
- Поля
- —
reopen- Что делает
- Переоткрыть
- Поля
- —
priority- Что делает
- Приоритет
- Поля
value:low|medium|high
move_category- Что делает
- Перенести в категорию
- Поля
category_id
rename- Что делает
- Переименовать канал
- Поля
name— до 100
claim_actor- Что делает
- Взять тикет на того, кто нажал кнопку
- Поля
- —
unclaim- Что делает
- Снять с сотрудника
- Поля
- —
pause- Что делает
- Пауза автозакрытия
- Поля
hours— от 1 до 720; 0 — снять паузу; null — без срока
ask_rating- Что делает
- Попросить оценку
- Поля
- —
add_role- Что делает
- Выдать роль автору
- Поля
role_ids— до 10
remove_role- Что делает
- Снять роль с автора
- Поля
role_ids— до 10
add_to_ticket- Что делает
- Дать доступ к тикету
- Поля
role_idsи/илиactor: true — тому, кто запустил правило
remove_from_ticket- Что делает
- Убрать доступ к тикету
- Поля
role_idsи/илиactor: true
mute_author- Что делает
- Запретить автору писать
- Поля
minutes— от 1 до 43200; null — до шага «разрешить»
unmute_author- Что делает
- Разрешить автору писать
- Поля
- —
blacklist_author- Что делает
- В чёрный список
- Поля
hours— от 1 до 8760 или null — навсегда;reason— до 500
unblacklist_author- Что делает
- Убрать из чёрного списка
- Поля
- —
kick- Что делает
- Исключить автора с сервера
- Поля
reason— до 500
ban- Что делает
- Забанить автора
- Поля
reason— до 500
unban- Что делает
- Разбанить автора
- Поля
reason— до 500
webhook- Что делает
- POST во внешний сервис
- Поля
url— https, публичный адрес;format:json|message;text— обязателен для message
remove_buttons- Что делает
- Убрать кнопки с сообщения, на котором нажали
- Поля
- —
stop_rules- Что делает
- Не запускать следующие правила на это событие
- Поля
- —
wait- Что делает
- Подождать перед следующими шагами
- Поля
minutes— от 1 до 43200
repeat- Что делает
- Повторять
- Поля
every_minutes— от 5 до 43200;times— от 1 до 10;while— условия (как вconditions), пока верны;actions— что повторять (без wait и repeat)
if_else- Что делает
- Если / иначе
- Поля
conditions— хотя бы одно;then,else— списки шагов (хотя бы один не пустой)
Своя кнопка (в message.buttons)
| Поле | Значения |
|---|---|
key | 4–16 знаков: a–z и 0–9. Правило на эту кнопку — триггер button с тем же ключом. |
label | Подпись, до 80 символов (нужна подпись или эмодзи). |
emoji | Эмодзи, до 64 символов. |
style | primary | secondary | success | danger (по умолчанию secondary) |
who | Кто может нажать: author | staff | all (по умолчанию all) |
Вложенность
- •
if_elseможно положить вrepeatили в другойif_elseна верхнем уровне — глубже нельзя. - •
repeat— только на верхнем уровне правила; внутри него нельзяwaitиrepeat.
Что проверяется при загрузке
- •Правило приезжает выключенным — включите его в редакторе после проверки («Проверить», «Прогон на тикете»).
- •Если
guild_idне совпадает с сервером, куда загружаете, или не указан, — шаги и условия с ролями и каналами отбрасываются. - •Категории, которых нет на этом сервере, выпадают: из условий, из «Перенести в категорию», из триггера «Перенесён в категорию» (он становится «в любую»).
- •Незнакомые поля выкидываются, числа подрезаются под пределы. Без триггера или без единого действия правило не загрузится — ошибка скажет, чего не хватает.
- •Бан, кик, разбан, роли и доступ к тикету включить сможет только владелец сервера или администратор Lolka.
- •Не больше 25 правил на сервер.
