Персональные данные API
Войдите в аккаунт, чтобы увидеть свой токен, slug'и и готовые команды для OBS.
Команды чата (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 синтаксис
Каждая строка — текст или токен в скобках. Пустые строки игнорируются.
Дополнительные действия команд
| Токен | Описание | Пример | Требуемый scope |
|---|---|---|---|
{pin} | Закрепить сообщение в чате | Правила чата! | moderator:manage:chat_messages |
{delete} | Удалить сообщение | {delete} | moderator:manage:chat_messages |
{timeout:600:причина} | Выдать таймаут пользователю | {timeout:600:Спам} | moderator:manage:banned_users |
{announce:blue:текст} | Цветное объявление | {announce:purple:Внимание!} | moderator:manage:announcements |
{shoutout} / {shoutout:username} | Официальный шаутаут Twitch | {shoutout:streamer} | moderator:manage:shoutouts |
{vip} | Добавить VIP статус | {vip} | channel:manage:vips |
{unvip} | Убрать VIP статус | {unvip} | channel:manage:vips |
{marker:описание} | Создать маркер в VOD | {marker:Эпик момент!} | channel:manage:broadcast |
{raid:username} | Начать рейд | {raid:friendstreamer} | channel:manage:raids |
{commercial:60} | Запустить рекламу | {commercial:60} | channel:edit:commercial |
{slow:30} / {slowoff} | Медленный режим (вкл/выкл) | {slow:30} | moderator:manage:chat_settings |
{followers:10} / {followersoff} | Режим только для подписчиков | {followers:10} | moderator:manage:chat_settings |
{emoteonly} / {emoteonlyoff} | Режим только эмоций | {emoteonly} | moderator:manage:chat_settings |
{counter:name:action:value} | Счётчик (сохраняется между сессиями) | Смерть #{counter:deaths:increment} | — |
{repeat:N:текст} | Повторить текст N раз | {repeat:3:🔥} HYPE! | — |
{random_user} | Случайный зритель из текущего чата | Победитель: {random_user} | — |
{time} | Текущее время | Время: {time} | — |
{date} | Текущая дата | Дата: {date} | — |
{uptime} | Время работы стрима | Стрим идёт: {uptime} | — |
Важно: Для использования дополнительных действий необходимо переподключить Twitch аккаунт и предоставить новые разрешения (OAuth scopes).
Быстрый старт
Привет, {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=10}
{math dbl = {var:base} * 2}
{math quad = {var:dbl} * 2}
base={var:base} dbl={var:dbl} quad={var:quad}
Random список
Вы получили: {rand:["Меч","Щит","Зелье","Свиток"]}!
Клип + пауза
Создаю клип
{delay:500}
{clip}
Готово!
Счётчик смертей
!death -> Упс! Смерть #{counter:deaths:increment}
!deaths -> Всего смертей: {counter:deaths:get}
!resetdeaths -> {counter:deaths:reset}Счётчик сброшен!
Розыгрыш среди зрителей
!giveaway ->
Случайный победитель: {random_user} 🎉
{shoutout:{random_user}}
Маркер с таймстампом
!clip ->
{marker:Момент для клипа}
{clip}
Клип создан и отмечен в VOD!
Повторение для эффекта
!hype ->
{repeat:3:🔥} {announce:purple:ЧТО-ТО ПРОИСХОДИТ!} {repeat:3:🔥}
Информация о стриме
!info ->
📅 Дата: {date}
🕐 Время: {time}
⏱️ Uptime: {uptime}
Розыгрыш с временем
!giveaway ->
🎉 Розыгрыш в {time}!
Победитель: {random_user}
{shoutout:{random_user}}
Автомодерация с закреплением
!rules ->
Правила чата: 1) Уважение 2) Без спама 3) Позитив
{pin}
{clip}
{delay:500}
Готово!
Конфеты без else
{var:give={rand:1-10}}
{if give > 7 then}
Вам повезло! Получаете {var:give} конфет
{end}
Комплексный сценарий
{var:a={rand:1-100}}
{var:b={rand:1-100}}
{math sum = {var:a} + {var:b}}
Значения: a={var:a} b={var:b}
Скромная сумма: {var:sum}
Закреплённые правила
Правила чата:
1. Уважайте других зрителей
2. Без спама и флуда
3. Следуйте инструкциям модераторов
{pin}
Шаутаут с объявлением
{announce:primary:Обратите внимание на {target} - отличный стример!}
{shoutout}
Заходите на канал {target}!
Умная модерация
{var:warned={arg1}}
{if warned > 3 then}
{timeout:600:Повторное нарушение}
{announce:orange:{target} получил таймаут на 10 минут за повторное нарушение}
{var:warned=0}
{else}
{math warned = {var:warned} + 1}
{announce:blue:{target}, предупреждение {var:warned}/3. Следите за поведением!}
{end}
Автоматический VIP за активность
{vip}
{announce:primary:{target} получил VIP статус за активность!}
{marker:Новый VIP - {target}}
Поздравляем!
Подготовка к рейду
{announce:blue:Подготовка к рейду на {arg1}!}
{marker:Рейд на {arg1}}
{delay:5000}
{announce:orange:5 секунд до рейда!}
{delay:5000}
{raid:{arg1}}
{announce:green:Рейд начат! Всем спасибо за стрим!}
Создание маркера
{marker:{arg1}}
Момент сохранён в записи!
Управление режимами чата
{slow:45}
{followers:10}
{announce:blue:Включён медленный режим (45с) и фильтр подписчиков (10+ мин)}
Сброс режимов чата
{slowoff}
{followersoff}
{emoteonlyoff}
{announce:green:Все ограничения чата сняты!}
Рекламная пауза
{announce:blue:Небольшой рекламный перерыв (60 секунд)}
{commercial:60}
Спасибо за понимание!
Комплексная команда приветствия
{var:first_time={arg1}}
{announce:green:Добро пожаловать, {target}!}
{if first_time == 1 then}
{announce:primary:Это первый визит {target} на канале!}
{vip}
{target} получил VIP за первое посещение!
{var:first_time=0}
{else}
Рады видеть тебя снова, {target}!
{end}
{shoutout}
Частые ошибки
| Проблема | Причина | Решение |
|---|---|---|
| Ошибка парсинга: missing end | Пропущен {end} | Закрывайте каждый {if} |
| delay > 1000 | Максимальная разрешённая задержка | Снизьте до ≤1000 |
Формирование ответа
Текстовые части соединяются разделителем | . Плейсхолдеры подставляются после вычислений.
Экспорт / JSON
DSL при экспорте конвертируется в массив action-объектов.
{
"name": "hello",
"type": "actions",
"cooldown": 5,
"version": 1,
"actions": [
{"type": "say", "text": "Привет, {user}!"},
{"type": "delay", "milliseconds": 300},
{"type": "say", "text": "Готово"}
]
}
Legacy конструктор
Старый визуальный конструктор оставлен для старых команд. При наличии DSL он имеет приоритет и JSON пересобирается автоматически.
Примечания
{var:имя}пуст, если переменная не установлена.delay— только короткие паузы (максимум 1000мс).- Доступ и кулдауны проверяются до выполнения сценария.
- DSL v2.0: Некоторые действия требуют, чтобы вы были модератором своего канала (обычно это так для владельца канала).
- DSL v2.0: Действия
{pin}и{delete}имеют ограниченную функциональность в текущей версии. - DSL v2.0: Для
{timeout}максимальная длительность — 1,209,600 секунд (14 дней). - DSL v2.0: Для
{commercial}доступны только значения: 30, 60, 90, 120, 150, 180 секунд.
Версия документа: DSL v2.0 | Последнее обновление: Октябрь 2025