Vovó Справка

action.json и pad.json

Каждый ключ двух файлов, которые Vovó читает из папки или zip-архива, создан из кода самой Vovó, поэтому всегда соответствует этой версии. Vovó проверяет каждый файл при получении и отклоняет его фразой о том, что не так; незнакомый ключ она молча пропускает, а редактор, читающий схему, его подчёркивает.

Ключ состоит из строчных латинских букв, цифр и _, а имя может содержать ещё и -; каждый не длиннее 32 символов.

Чтобы редактор подсказывал ключи и подчёркивал ошибки, укажите схему в начале файла, как в примерах. vovo dev записывает action.schema.json рядом с частями действия; в исходном коде Vovó обе схемы лежат в папке api.

action.json

Манифест действия: как оно называется, что слушает, что запрашивает и что предлагает ведущему стрим. Он лежит рядом с index.html, style.css, script.js и files/, в пакете или папке.

{
    "$schema": "./action.schema.json",
    "name": "Raffle",
    "id": "example.raffle",
    "version": "1.2.0",
    "api": 1,
    "author": "A maker",
    "site": "https://example.com/raffle",
    "description": "!join in chat joins the wheel; the panel draws the winner.",
    "license": "MIT",
    "triggers": ["chat", "timer"],
    "bindings": [
        { "event": "chat", "filter": [{ "field": "text", "op": "starts", "value": "!join" }] },
        { "event": "timer", "filter": [{ "field": "every", "op": "is", "value": 300 }] }
    ],
    "permissions": ["chat.send"],
    "controls": [
        { "key": "open", "label": "Entries open", "kind": "toggle" },
        { "key": "prize", "label": "Prize", "kind": "text" }
    ],
    "settings": [
        { "key": "color", "label": "Wheel colour", "kind": "color", "default": "#840926" },
        { "key": "size", "label": "Size", "kind": "number", "min": 200, "max": 800, "step": 10, "unit": "px", "default": 420 },
        { "key": "side", "label": "Side", "kind": "choice", "options": ["Left", "Right"], "default": "Right" }
    ],
    "panel": [
        { "kind": "control", "key": "open" },
        { "kind": "control", "key": "prize" },
        { "kind": "form", "name": "add", "label": "Put someone in", "button": "Put", "fields": [{ "key": "who", "label": "Name" }] },
        { "kind": "button", "name": "draw", "label": "Draw", "confirm": true },
        { "kind": "list", "key": "names", "label": "In the wheel", "empty": "Nobody yet", "buttons": [{ "name": "out", "label": "Take out", "confirm": true }] }
    ]
}

Условия

Каждый триггер ещё раз, с условиями, которые все должны выполняться, чтобы он запустил действие, — так их сохраняет редактор. По одному на каждое имя в triggers, в любом порядке: если они не совпадают один к одному, все условия молча отбрасываются и каждый триггер срабатывает на всё.

Условие

Одно из полей события, сравниваемое со значением. Тексты сравниваются без учёта регистра; число, записанное текстом, читается как число.

Элементы управления

Что пад меняет, пока действие работает: каждое значение хранится в vovo.state под своим ключом и сообщается действию событием control, которое оно слышит без указания в списке.

Настройки

Что тот, кто пользуется действием, может менять без его кода, в «Настроить»: читается как vovo.settings.<key>, как --vovo-<key> в его CSS и, для включено/выключено и выбора, как data-vovo-<key> на его документе. Выбранное остаётся с действием, а пакет несёт только значения по умолчанию. Текстовых настроек не больше восьми.

Настройки: color

Цвет; винный цвет Vovó, #840926, если действие не укажет другой.

Настройки: number

Число от минимума до максимума с шагом; минимум, если действие не укажет другое.

Настройки: toggle

Включено или выключено; выключено, если действие не укажет иное.

Настройки: choice

Один из вариантов; первый, если действие не укажет другой.

Настройки: text

Строка текста; пустая, если действие не укажет другую.

Настройки: file

Картинка, звук или видео, которые выбирает тот, кто пользуется действием, не больше 50 МБ; как задано в действии — один из его собственных файлов по пути или ничего.

Настройки: font

Один из шрифтов компьютера, по семейству; Segoe UI, если действие не укажет другой.

Настройки: camera

Одна из камер компьютера, которую выбирает в «Настроить» тот, кто пользуется действием, показанная там, где её разместит действие (vovo.camera.place, с разрешением camera.show); не больше четырёх. Приходит без камеры, поэтому значения по умолчанию нет.

Панель

Что действие показывает ведущему стрим в «Панелях» на боковой панели: элементы по порядку, каждый задан своим kind и нарисован Vovó. То, что там делают, приходит к действию событием panel, которое оно слышит без указания в списке. Элемент panel начинает ещё одну панель с элементами после него до следующего, а элементы до первого видны на каждой; tab так же делит панель на разделы. Имена кнопок, форм и кнопок списка уникальны в действии. Действие объявляет не больше 24 панелей, в каждой не больше 40 элементов и 12 вкладок.

Панель: panel

Здесь начинается ещё одна панель со своим пунктом в «Панелях».

Панель: tab

Раздел панели: элементы после него до следующей вкладки.

Панель: heading

Заголовок над следующими элементами, которые делят одну карточку.

Панель: note

Строка с пояснением.

Панель: control

Один из элементов управления действия, которым здесь пользуются как на паде.

Панель: button

Кнопка.

Панель: form

Несколько полей и кнопка: введённое уходит вместе с нажатием, в values события. Форма из одного поля заполняется прямо на панели.

Поля формы

Каждое — строка, вводимая на панели и отправляемая с формой под своим ключом.

Панель: list

Список из состояния действия, по строке на элемент, хоть тысячи; у списка длиннее восьми строк есть свой поиск.

Кнопки списка

Кнопки в каждой строке списка.

pad.json

Пакет кнопок для пада: zip или папка со звуками и видео, где в корне лежит pad.json с группами и их кнопками; без него каждая папка — группа, а каждый звук или видео — кнопка с именем файла. Принесённый снова, он обновляет то, что называет, и оставляет остальное как есть.

{
    "$schema": "./pad.schema.json",
    "groups": [
        {
            "name": "Sounds",
            "color": "#2F6FDB",
            "buttons": [
                { "label": "Applause", "icon": "👏", "sound": "sounds/applause.mp3", "favorite": true, "hotkey": "F13" },
                { "label": "Drum roll", "sound": "sounds/drums.ogg", "volume": 130 },
                { "label": "Rain", "video": "videos/rain.mp4", "key": "luma", "loop": true }
            ]
        },
        {
            "name": "Live",
            "buttons": [
                { "label": "Raffle", "action": "Raffle" },
                { "label": "Entries", "action": "Raffle", "control": "open" },
                { "label": "Starting", "scene": "Starting soon" },
                { "label": "Camera", "scene": "Game", "source": "Camera" },
                { "label": "Blur", "source": "Camera", "filter": "Blur" },
                { "label": "One minute", "team": "One minute, then I'm back." }
            ]
        }
    ]
}

Группы

Группа пада и её кнопки по порядку.

Кнопки

Кнопка и то, что она делает: Vovó читает первое из найденного в таком порядке: sound; video; action с control; action; source с filter или scene с source; scene. Пакет приносит не больше 2000 кнопок.