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>로, CSS에서는 --vovo-<key>로 읽으며, 켜짐·꺼짐과 선택은 문서의 data-vovo-<key>로도 읽습니다. 고른 값은 액션과 함께 남고, 패키지에는 기본값만 담깁니다. 텍스트는 최대 여덟 개입니다.

설정: color

색입니다. 액션이 정하지 않으면 Vovó의 와인색 #840926입니다.

설정: number

최솟값부터 최댓값까지 단계별로 움직이는 숫자입니다. 액션이 정하지 않으면 최솟값입니다.

설정: toggle

켜짐이나 꺼짐이며, 액션이 정하지 않으면 꺼짐입니다.

설정: choice

선택지 중 하나이며, 액션이 정하지 않으면 첫 번째입니다.

설정: text

텍스트 한 줄이며, 액션이 정하지 않으면 비어 있습니다.

설정: file

사용하는 사람이 고르는 이미지, 소리, 동영상으로 최대 50MB입니다. 액션의 처음 값은 자체 파일 중 하나(경로로 지정)이거나 없음입니다.

설정: 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개입니다.