Vovó 帮助

action.json 与 pad.json

Vovó 从文件夹或 zip 读取的两个文件的每个键,由 Vovó 自己的代码生成,因此始终与这个版本一致。Vovó 会在每个文件进来时检查它,并用一句话说明哪里不对而拒绝它;它不认识的键会被悄悄跳过,读取 schema 的编辑器会给它画下划线。

键由小写字母、数字和 _ 组成,名称还可以有 -,各自最多 32 个字符。

要让编辑器补全键并标出错误,请像示例那样在文件开头写明 schema。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> 读取,在 CSS 中为 --vovo-<key>,开关和选项还会作为文档上的 data-vovo-<key>。所选内容随动作保存,包只携带默认值。其中文本最多八个。

设置: color

颜色;动作未指定时为 Vovó 的酒红色 #840926。

设置: number

从最小到最大、按步长变化的数字;动作未指定时为最小值。

设置: toggle

开或关;动作未指定时为关。

设置: choice

它的选项之一;动作未指定时为第一个。

设置: text

一行文本;动作未指定时为空。

设置: file

使用者选择的图片、声音或视频,最多 50 MB;动作自带的值为它自己的某个文件(按路径)或无。

设置: 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;带 control 的 action;action;带 filter 的 source,或带 source 的 scene;scene。一个包最多带入 2,000 个按钮。