Команды чата (DSL)
Основной способ описания сценариев теперь — DSL. JSON оставлен для экспорта и обратной совместимости.
Типы
- text — одиночный шаблон.
- actions — многошаговый сценарий (DSL).
Плейсхолдеры
Placeholder | Назначение |
---|---|
{user} | Пользователь вызвавший команду |
{target} | Цель (если указана) |
{rand} | Случайное число 0–100 |
{rand:MIN-MAX} | Случайное число диапазона |
{rand:["A","B"]} | Случайный элемент из списка |
{arg1} , {arg2} | Аргументы команды |
{var:name} | Переменная из сценария |
Доступ и лимиты
Доступ | Кто может |
---|---|
all | Любой пользователь |
auth | Авторизованные |
owner | Владелец канала |
staff | Владелец или персонал |
Cooldown и лимиты в минуту защищают от спама.
DSL синтаксис
Каждая строка — текст или токен в скобках. Пустые строки игнорируются.
Строка | Значение | Action |
---|---|---|
(текст) | Добавить текст | text |
{var:x=10} | Установить переменную | set_var |
{math y = {var:x} * 2} | Вычисление | math |
{random:["A","B"]} | Случайный выбор | random_choice |
{random:1-10} | Число диапазона (в тексте) | text |
{delay:500} | Пауза ≤1000мс | delay |
{clip} | Создать клип | clip |
{if points > 5 then} | Начало условия | if |
{else} | Альтернативная ветка | — |
{end} | Закрыть блок | — |
Операторы условий: == != > <
. Переменные в условии пишутся без префикса {var:}
.
Быстрый старт
Привет, {user}!
{delay:300}
Готово
Примеры
Условие с else
{var:points={rand:1-10}}
{if points > 5 then}
Много очков: {var:points}
{else}
Мало очков: {var:points}
{end}
Вложенные условия
{var:x={rand:1-10}}
{if x > 3 then}
x>3: {var:x}
{if x > 7 then}
x>7!
{end}
{else}
x<=3: {var:x}
{end}
Math цепочка
{var:base={rand:1-5}}
{math dbl = {var:base} * 2}
{math quad = {var:dbl} * 2}
base={var:base} dbl={var:dbl} quad={var:quad}
Random список
{random:["Привет","Hello","Yo"]}
{user}
Клип + пауза
Создаю клип
{clip}
{delay:500}
Готово!
Конфеты без else
{var:give={rand:1-10}}
{user} дарит {var:give} конфет {target}!
{if give > 7 then}
ОГО щедрость!
{end}
Комплексный сценарий
{var:a={rand:1-10}}
{var:b={rand:1-10}}
{math sum = {var:a} + {var:b}}
Значения: a={var:a} b={var:b}
{if sum > 12 then}
Большая сумма: {var:sum}
{else}
Скромная сумма: {var:sum}
{end}
Частые ошибки
Проблема | Причина | Решение |
---|---|---|
Ошибка парсинга: missing end | Пропущен {end} | Закрывайте каждый {if} |
Пустой {var:x} | Переменная не установлена | Добавьте {var:x=...} раньше |
Bad random list | Невалидный JSON внутри {random:[...]} | Исправьте кавычки/запятые |
Math даёт 0 | Ошибка выражения | Проверьте скобки и переменные |
delay > 1000 | Ограничение | Снизьте до ≤1000 |
Формирование ответа
Текстовые части соединяются разделителем |
. Плейсхолдеры подставляются после вычислений.
Экспорт / JSON
DSL при экспорте конвертируется в массив action-объектов.
{
"name":"имя",
"type":"actions",
"actions":[...],
"cooldown":5,
"version":1
}
Legacy конструктор
Старый визуальный конструктор оставлен для старых команд. При наличии DSL он имеет приоритет и JSON пересобирается автоматически.
Примечания
{var:имя}
пуст, если переменная не установлена.delay
— только короткие паузы.- Доступ и кулдауны проверяются до выполнения сценария.
Версия документа: DSL v1