Перейти к содержимому
Paper Bot/Документация

Формат правила

Правило автоматизации можно написать вручную и загрузить файлом: «Автоматизации → Новое правило → Загрузить из файла». Здесь — все поля, допустимые значения и пределы. Загруженное правило приезжает выключенным: проверьте его в редакторе и включите.

Файл

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_idID сервера, для которого написано правило, строкой. Это число в адресе веб-панели после /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)

ПолеЗначения
key4–16 знаков: a–z и 0–9. Правило на эту кнопку — триггер button с тем же ключом.
labelПодпись, до 80 символов (нужна подпись или эмодзи).
emojiЭмодзи, до 64 символов.
styleprimary | secondary | success | danger (по умолчанию secondary)
whoКто может нажать: author | staff | all (по умолчанию all)

Вложенность

  • •if_else можно положить в repeat или в другой if_else на верхнем уровне — глубже нельзя.
  • •repeat — только на верхнем уровне правила; внутри него нельзя wait и repeat.

Что проверяется при загрузке

  • •Правило приезжает выключенным — включите его в редакторе после проверки («Проверить», «Прогон на тикете»).
  • •Если guild_id не совпадает с сервером, куда загружаете, или не указан, — шаги и условия с ролями и каналами отбрасываются.
  • •Категории, которых нет на этом сервере, выпадают: из условий, из «Перенести в категорию», из триггера «Перенесён в категорию» (он становится «в любую»).
  • •Незнакомые поля выкидываются, числа подрезаются под пределы. Без триггера или без единого действия правило не загрузится — ошибка скажет, чего не хватает.
  • •Бан, кик, разбан, роли и доступ к тикету включить сможет только владелец сервера или администратор Lolka.
  • •Не больше 25 правил на сервер.
Готовое правило удобнее переносить кодом: «Код» в редакторе правила, затем «Новое правило → Импорт по коду» на нужном сервере. Файл нужен, когда правило пишется вручную.