action.json i pad.json
Każdy klucz obu plików, które Vovó czyta z folderu lub zipa, wygenerowany z kodu samej Vovó, więc zawsze zgadza się z tą wersją. Vovó sprawdza każdy plik, gdy przychodzi, i odrzuca go zdaniem mówiącym, co jest nie tak; klucz, którego nie zna, pomija bez słowa, a edytor czytający schemat go podkreśla.
Klucz to małe litery, cyfry i _, a nazwa może mieć też -, każde najwyżej 32 znaki.
Żeby edytor podpowiadał klucze i podkreślał błędy, wskaż schemat na początku pliku, tak jak robią to przykłady. vovo dev zapisuje action.schema.json obok części akcji; kod źródłowy Vovó ma oba w folderze api.
action.json
Manifest akcji: jak się nazywa, czego słucha, o co prosi i co daje osobie prowadzącej transmisję. Leży obok index.html, style.css, script.js i files/, w paczce lub folderze.
{
"$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 }] }
]
}
$schema(tekst): Gdzie edytor znajdzie schemat tego pliku:./action.schema.json, któryvovo devzapisuje obok. Vovó niczego tu nie czyta.name(tekst; wymagane): Jej nazwa, unikalna w profilu: akcja wprowadzona z nazwą już istniejącej proponuje zajęcie jej miejsca albo wchodzi jako „Raffle 2”.id(tekst, jeden wiersz, najwyżej 64 znaków): Nazwa, którą twórca nadaje jej raz i nigdy nie zmienia: nazwa twórcy i nazwa akcji z kropką pomiędzy, jakexample.raffle, małymi literami, cyframi i-. Wprowadzona nowsza wersja znajduje po niej akcję, którą aktualizuje, jakkolwiek ta akcja się wtedy nazywa; bez niej szuka po nazwie. Kopia zrobiona w Vovó jej nie zachowuje.version(tekst, jeden wiersz, najwyżej 32 znaków): Jej własna wersja, widoczna na liście akcji oraz, gdy pakiet zajmuje miejsce akcji, obok tej, którą akcja miała, z informacją, gdy pakiet jest tą samą wersją lub starszą. Liczby rozdzielone kropkami są czytane jako liczby (1.10.0jest nowsza niż1.9.2, a1.0.0-beta.1poprzedza1.0.0); zapisane inaczej, dwie wersje są tylko takie same albo nie. Bez niej1.0.0.api(liczba całkowita, 1 lub więcej; wymagane): Wersja API, dla której ją napisano:1. Nowsza niż w tej Vovó zostaje odrzucona, z informacją, co zrobić.triggers(lista zdarzeń): Zdarzenia, których słucha: te z API albo jej własne nazwy, które wywołująvovo.emitivovo emit. Nazwa podobna do jednej z API zostaje odrzucona, z tą, o którą chodziło.control,settingsipaneldocierają do akcji, która deklaruje kontrolki, ustawienia albo panel, bez umieszczania ich na liście.bindings(lista): Warunki wyzwalaczy.permissions(lista uprawnień): O co może prosić Vovó, pokazane osobie, która ją wprowadza. Uprawnienie, którego Vovó nie zna, zostaje odrzucone, z tym, o które chodziło.persistent(prawda lub fałsz): Czy zostaje na ekranie (czat, pasek celu), zamiast pokazywać się, gdy przychodzą jej zdarzenia; tak nazywają ją edytor i lista akcji. Nie zmienia to niczego w tym, jak działa.operator(prawda lub fałsz): Tylko dla osoby prowadzącej transmisję: słucha padu, skrótów, timerów, swoich kontrolek i tego, co mówią OBS i komputer, nigdy widzów, czatu, nagród, webhooków ani zdarzenia innej akcji. Wyzwalacz, który mógłby uruchomić ktoś inny, zostaje odrzucony.controls(lista, najwyżej 32): Co pad zmienia, gdy działa.settings(lista, najwyżej 32): Co osoba, która jej używa, może zmienić bez jej kodu.panel(lista): Co pokazuje osobie prowadzącej transmisję, w Panelach.author(tekst, jeden wiersz, najwyżej 80 znaków): Kto ją zrobił.site(adres internetowy, najwyżej 200 znaków): Gdzie przeczytać więcej o niej albo o osobie, która ją zrobiła.description(tekst, jeden wiersz, najwyżej 300 znaków): Co robi, w jednym wierszu, pokazane przy wprowadzaniu.license(tekst, jeden wiersz, najwyżej 100 znaków): Na jakich warunkach jest przekazywana, tak jak mówi jej twórca: nazwa licencji (MIT,CC-BY-4.0) albo własne zdanie, widoczne przy imporcie i na liście akcji. Pełny tekst licencji leży obok tego pliku jakoLICENSE(alboLICENSE.md,LICENSE.txt), najwyżej 64 KB tekstu, i jest czytany w oknie importu, zanim akcja wejdzie. Vovó mówi to, co zapisano, i nikogo do niczego nie zobowiązuje: nie sprawdza klucza, konta ani zakupu.
Warunki
Każdy wyzwalacz jeszcze raz, z warunkami, które muszą być spełnione wszystkie, żeby uruchomił akcję, tak jak zapisuje je edytor. Po jednym na każdą nazwę z triggers, w dowolnej kolejności: gdy nie pasują jeden do jednego, wszystkie warunki zostają pominięte bez słowa, a każdy wyzwalacz działa na wszystko.
event(zdarzenie; wymagane): Jedna z nazw ztriggers.filter(lista): Jego warunki; bez nich uruchamia ją każde takie zdarzenie.
Warunek
Jedno z pól zdarzenia porównane z wartością. Teksty porównuje się bez względu na wielkość liter; liczba zapisana jako tekst jest czytana jako liczba.
field(tekst; wymagane): Pole zdarzenia, tak jak nazywa je dokumentacja API:viewers,reward,text. Odstęptimerto poleevery(sekundy, 5 lub więcej), a kombinacjahotkeyto polekeys, każde zis.op(jedno zis,not,above,atleast,below,atmost,contains,starts; wymagane): Jak się porównuje:isinotwprost,above,atleast,belowiatmostjako liczby,containsistartsjako teksty.value(tekst, liczba albo prawda lub fałsz; wymagane): Z czym porównuje się pole.
Kontrolki
Co pad zmienia, gdy akcja działa: każda trzymana w vovo.state pod swoim kluczem i przekazywana akcji jako zdarzenie control, którego słucha bez umieszczania go na liście.
key(klucz; wymagane): Gdzievovo.stateją trzyma; dwie kontrolki nie dzielą jednego.label(tekst; wymagane): Jak nazywa ją pad.kind(jedno ztoggle,choice,counter,text; wymagane): Włączone lub wyłączone; jedna z jej opcji; liczba całkowita, o jeden w górę lub w dół naraz; albo wiersz tekstu, najwyżej 300 znaków.options(lista tekstów): Opcje wyboru, dwie lub więcej.max(liczba): Cel licznika, pokazany obok jego stanu.
Ustawienia
Co osoba używająca akcji może zmienić bez jej kodu, w Dostosuj: czytane jako vovo.settings.<key>, jako --vovo-<key> w jej CSS, a dla włączone lub wyłączone i wyboru jako data-vovo-<key> na jej dokumencie. To, co wybrane, zostaje z akcją, a paczka niesie tylko wartości domyślne. Najwyżej osiem z nich to teksty.
kind(jedno zcolor,number,toggle,choice,text,file,font,camera; wymagane): Czym jest, jak mówią części poniżej.key(klucz; wymagane): Jak akcja je czyta; dwa ustawienia nie dzielą jednego, i żaden nie jestaccent.label(tekst, najwyżej 60 znaków; wymagane): Jak nazywa je Dostosuj.
Ustawienia: color
Kolor; wiśniowy Vovó, #840926, jeśli akcja nie poda innego.
default(kolor,#RRGGBB): Tak, jak przychodzi akcja; bez tego wartość rodzaju.
Ustawienia: number
Liczba od minimum do maksimum, co krok; minimum, jeśli akcja nie poda innej.
min(liczba; wymagane): Minimum.max(liczba; wymagane): Maksimum, powyżej minimum.step(liczba): Jak daleko sięga każdy krok, powyżej 0; bez tego 1.unit(jedno zpx,%,s,ms,em,deg): Jednostka, którą niesie jej zmienna CSS; bez niej zwykła liczba.default(liczba): Tak, jak przychodzi akcja; bez tego wartość rodzaju.
Ustawienia: toggle
Włączone lub wyłączone; wyłączone, jeśli akcja nie poda inaczej.
default(prawda lub fałsz): Tak, jak przychodzi akcja; bez tego wartość rodzaju.
Ustawienia: choice
Jedna z jej opcji; pierwsza, jeśli akcja nie poda innej.
options(lista tekstów, od 2 do 12; wymagane): Opcje, każda raz.default(tekst): Tak, jak przychodzi akcja; bez tego wartość rodzaju.
Ustawienia: text
Wiersz tekstu; pusty, jeśli akcja nie poda innego.
default(tekst, jeden wiersz, najwyżej 200 znaków): Tak, jak przychodzi akcja; bez tego wartość rodzaju.
Ustawienia: file
Obraz, dźwięk lub film, który wybiera osoba jej używająca, najwyżej 50 MB; tak, jak przychodzi akcja, jeden z jej własnych plików, po ścieżce, albo żaden.
accept(jedno zimage,sound,video): Czym może być: obrazem, jeśli akcja nie poda inaczej.default(ścieżka pliku albonull): Tak, jak przychodzi akcja; bez tego wartość rodzaju.
Ustawienia: font
Jedna z czcionek komputera, po rodzinie; Segoe UI, jeśli akcja nie poda innej.
default(tekst, jeden wiersz, najwyżej 64 znaków): Tak, jak przychodzi akcja; bez tego wartość rodzaju.
Ustawienia: camera
Jedna z kamer komputera, którą wybiera w Dostosuj ten, kto używa akcji, pokazana tam, gdzie umieści ją akcja (vovo.camera.place, z uprawnieniem camera.show); najwyżej cztery. Przychodzi bez żadnej, więc nie ma wartości domyślnej.
Panel
Co akcja pokazuje osobie prowadzącej transmisję w Panelach, na pasku bocznym: elementy po kolei, każdy wskazany przez swój kind, rysowane przez Vovó. To, co się tam zrobi, dociera do akcji jako zdarzenie panel, którego słucha bez umieszczania go na liście. Element panel zaczyna kolejny panel z elementami po nim aż do następnego, a elementy przed pierwszym pokazują się w każdym; tab tak samo dzieli panel na sekcje. Nazwy przycisków, formularzy i przycisków listy są w akcji unikalne. Akcja deklaruje najwyżej 24 panele, każdy z najwyżej 40 elementami i 12 kartami.
kind(jedno zpanel,tab,heading,note,control,button,form,list; wymagane): Czym jest, jak mówią części poniżej.
Panel: panel
Tu zaczyna się kolejny panel, z własną pozycją w Panelach.
label(tekst, najwyżej 30 znaków; wymagane): Jego nazwa w Panelach.icon(tekst, najwyżej 32 znaków): Jedna z ikon Vovó po nazwie albo emoji; bez niej ikona pierwszego przycisku akcji na padzie.
Panel: tab
Sekcja panelu: elementy po niej, aż do następnej karty.
label(tekst, najwyżej 30 znaków; wymagane): Jej nazwa.
Panel: heading
Tytuł nad elementami po nim, które dzielą jedną kartę.
label(tekst, najwyżej 60 znaków; wymagane): Jego tekst.
Panel: note
Wiersz, który coś mówi.
label(tekst, najwyżej 60 znaków; wymagane): Jego tekst.
Panel: control
Jedna z kontrolek akcji, obsługiwana tu jak na padzie.
key(klucz; wymagane): Klucz kontrolki.
Panel: button
Przycisk.
name(nazwa; wymagane): Co według zdarzeniapanelnaciśnięto.label(tekst, najwyżej 60 znaków; wymagane): Jego tekst.confirm(prawda lub fałsz): Pierwsze naciśnięcie pyta, drugie wykonuje.
Panel: form
Kilka pól i przycisk: to, co wpisano, idzie z naciśnięciem, w values zdarzenia. Formularz z jednym polem wypełnia się w samym panelu.
name(nazwa; wymagane): Co według zdarzeniapanelwysłano.label(tekst, najwyżej 60 znaków; wymagane): Jego tekst.button(tekst): Tekst przycisku.fields(lista, od 1 do 4; wymagane): Jego pola.
Pola formularza
Każde to wiersz wpisany w panelu, wysyłany z formularzem pod swoim kluczem.
key(nazwa; wymagane): Jego klucz wvalueszdarzenia, raz w formularzu.label(tekst, najwyżej 60 znaków; wymagane): Jak nazywa się pole.
Panel: list
Lista czytana ze stanu akcji, po wierszu na element, nawet tysiące; lista z ponad ośmioma wierszami ma własne wyszukiwanie.
key(tekst; wymagane): Kluczvovo.state, który ją przechowuje.path(tekst): W nim klucze prowadzące do listy, połączone kropkami:round.names.label(tekst, najwyżej 60 znaków; wymagane): Jej nazwa.show(tekst): Dla elementów będących obiektami: pole, które pokazuje wiersz, albo wiersz z{field}wypełnianymi z każdego elementu.empty(tekst): Co mówi, gdy jest pusta.buttons(lista, najwyżej 3): Przyciski w każdym wierszu: naciśnięcie przekazuje akcjiitemiindexwiersza.
Przyciski listy
Przyciski w każdym wierszu listy.
name(nazwa; wymagane): Co według zdarzeniapanelnaciśnięto.label(tekst, najwyżej 60 znaków; wymagane): Jego tekst.confirm(prawda lub fałsz): Pierwsze naciśnięcie pyta, drugie wykonuje.
pad.json
Paczka przycisków dla padu: zip albo folder dźwięków i filmów z pad.json w katalogu głównym, który podaje grupy i ich przyciski; bez niego każdy folder jest grupą, a każdy dźwięk lub film przyciskiem nazwanym od pliku. Wprowadzona ponownie aktualizuje to, co nazywa, a resztę zostawia bez zmian.
{
"$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." }
]
}
]
}
$schema(tekst): Gdzie edytor znajdzie schemat tego pliku, na przykład./pad.schema.jsonobok. Vovó niczego tu nie czyta.groups(lista; wymagane): Grupy, po kolei.
Grupy
Grupa padu i jej przyciski, po kolei.
name(tekst, najwyżej 60 znaków; wymagane): Jej nazwa: grupa profilu o tej nazwie, bez względu na wielkość liter, zostaje zaktualizowana.color(kolor,#RRGGBB): Jej kolor; bez niego istniejąca grupa zachowuje swój, a nowa dostaje następny.buttons(lista): Jej przyciski.
Przyciski
Przycisk i to, co robi: Vovó czyta pierwsze z tych, które znajdzie, w tej kolejności: sound; video; action z control; action; source z filter albo scene z source; scene. Paczka wnosi najwyżej 2000 przycisków.
label(tekst, najwyżej 60 znaków; wymagane): Jego nazwa na padzie: przycisk jego grupy o tej nazwie, bez względu na wielkość liter, zostaje zaktualizowany.icon(tekst): Jedna z ikon Vovó po nazwie albo emoji.sound(ścieżka pliku): Dźwięk z paczki, po ścieżce w niej: MP3, OGG, WAV, M4A, WEBM lub FLAC, najwyżej 20 MB.video(ścieżka pliku): Film z paczki, po ścieżce w niej: MP4 lub M4V, najwyżej 200 MB; odtwarza się na całej scenie.key(tekst): Co zostaje usunięte z filmu, tak jak robią to filtry OBS:none,luma(czerń),chroma(zieleń) albochroma:#RRGGBB.loop(prawda lub fałsz): Film odtwarza się w kółko, aż jego przycisk zostanie naciśnięty ponownie.action(tekst): Jedna z akcji profilu, po nazwie, uruchamiana jako jej zdarzeniebutton.control(klucz): Zaction: jedna z jej kontrolek, po kluczu, obsługiwana tak, jak robi to jej przycisk na padzie.value(tekst): Zcontrol, dla wyboru: opcja, którą wybiera; bez niej przechodzi kolejno przez wszystkie.scene(tekst): Scena OBS, po nazwie, wprowadzana na antenę.source(tekst): Zscene: źródło w niej, pokazywane lub ukrywane. Zfilter: źródło, na którym jest filtr.filter(tekst): Zsource: jeden z jej filtrów, włączany lub wyłączany.team(tekst, najwyżej 300 znaków): Wiersz, który wpisuje do rozmowy zespołu jako streamer, nigdy do transmisji ani na czat; pad urządzenia nigdy nie ma tego przycisku.favorite(prawda lub fałsz): W Ulubionych albo nie; bez tego istniejący przycisk zachowuje to, co ma.hotkey(tekst): Kombinacja, która naciska go z dowolnego programu, zapisana tak, jak się ją pisze:F13,Ctrl+Shift+1. Dwa przyciski profilu nie dzielą jednej.volume(liczba całkowita, od 0 do 150): Jak głośno gra dźwięk lub film, w procentach pliku; bez tego istniejący przycisk zachowuje swoją głośność.