API di Vovó 1
Generata dal codice stesso di Vovó, quindi corrisponde sempre a questa versione. Il testo degli spettatori arriva sempre come testo semplice, mai come HTML.
Eventi semplici
Uguali su ogni piattaforma; {platform} dice quale. Per ciò che ha una sola piattaforma, usa il suo evento, più in basso.
follow
Qualcuno ha iniziato a seguire il canale. Viene da twitch.follow.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.platform(piattaforma): Dove è successo.
sub
Qualcuno si è abbonato, ha rinnovato o ha ricevuto un abbonamento in regalo. Viene da twitch.sub.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.tier(numero): 1, 2 o 3.months(numero): Mesi di abbonamento in tutto.gift(sì o no): Se era un regalo.platform(piattaforma): Dove è successo.
raid
Un altro canale ha fatto un raid su questo. Viene da twitch.raid.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.viewers(numero): Quanti sono arrivati.platform(piattaforma): Dove è successo.
chat
Un messaggio in chat. Viene da twitch.chat.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.text(testo): Il messaggio, come testo semplice.parts(testo ed emote): Il messaggio in parti, in ordine: iltextdi ciascuna e, per un'emote, anche la sua immagine, comeimage, servita da Vovó.vovo.chat.parts(e)le trasforma in nodi da mostrare.platform(piattaforma): Dove è successo.
tip
Qualcuno ha inviato denaro o Bits. Viene da twitch.cheer.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.amount(numero): Quanto, incurrency.currency(testo):bits, o un codice di valuta comeBRL.text(testo): Il messaggio, come testo semplice.platform(piattaforma): Dove è successo.
Twitch
twitch.follow
Un follow su Twitch.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.
twitch.sub
Un abbonamento, rinnovo o abbonamento regalato su Twitch.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.tier(numero): 1, 2 o 3.months(numero): Mesi di abbonamento in tutto.gift(sì o no): Se era un regalo.gifter(testo): Chi l'ha regalato, se era un regalo.text(testo): Il messaggio, come testo semplice.
twitch.raid
Un raid su Twitch.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.viewers(numero): Quanti sono arrivati.
twitch.chat
Un messaggio in chat su Twitch.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.text(testo): Il messaggio, come testo semplice.parts(testo ed emote): Il messaggio in parti, in ordine: iltextdi ciascuna e, per un'emote, anche la sua immagine, comeimage, servita da Vovó.vovo.chat.parts(e)le trasforma in nodi da mostrare.color(testo): Il colore del nome,#RRGGBB.badges(testo): I badge, separati da virgole:moderator,subscriber.persona(sì o no): True quando la riga è della persona stessa, scritta in chat dal suo account.
twitch.viewers
Quante persone guardano la diretta. Twitch viene letto circa una volta al minuto durante la diretta; questo arriva quando il numero cambia, e con live a false quando la diretta finisce.
viewers(numero): Quanti guardano ora.live(sì o no): True mentre la diretta è in onda.
twitch.cheer
Bits inviati su Twitch.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.bits(numero): Quanti Bits.text(testo): Il messaggio, come testo semplice.
twitch.redemption
È stato riscattato un premio punti canale.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.reward(testo): Il titolo del premio.reward_id(testo): L'id di Twitch per il premio, che resta uguale quando viene rinominato.input(testo): Ciò che ha scritto, per i premi che lo chiedono.redemption(testo): L'id di Twitch per questo riscatto: lo stesso nel suotwitch.redemption.resolved.
twitch.redemption.resolved
Un riscatto in attesa nella coda del premio è stato approvato o rifiutato (rifiutare restituisce i punti).
user(testo): Chi l'ha fatto, come appare sulla piattaforma.reward(testo): Il titolo del premio.reward_id(testo): L'id di Twitch per il premio, che resta uguale quando viene rinominato.input(testo): Ciò che ha scritto, per i premi che lo chiedono.status(testo):approved(approvato) orejected(rifiutato).redemption(testo): L'id di Twitch per questo riscatto, come nel suotwitch.redemption.
twitch.hypetrain
Un Hype Train è partito, è avanzato o è finito.
level(numero): Il livello attuale.progress(numero): Punti in questo livello.goal(numero): Punti che servono a questo livello.ended(sì o no): Se è appena finito.
Da Vovó e OBS
button
È stato premuto il suo pulsante nel pad.
label(testo): L'etichetta del pulsante.
hotkey
È stata premuta una scorciatoia globale, con il gioco in primo piano o no. L'attivatore indica la combinazione con una condizione, keys è Ctrl+Alt+1, e l'app la ascolta mentre il profilo è attivo.
keys(testo): La combinazione, per esempioCtrl+Alt+1.
timer
È scattato un timer. L'attivatore indica ogni quanto con una condizione, every è un numero di secondi (5 o più); senza, scatta ogni minuto. Conta da quando compare l'attivatore, e si ferma durante il panico.
every(numero): Il suo intervallo, in secondi.
control
Uno dei controlli dell'azione è stato cambiato nel pad. Il suo nuovo valore è anche in vovo.state, sotto la chiave del controllo, così una pagina aperta dopo lo mostra. Un'azione che offre controlli riceve questo senza aggiungerlo come attivatore.
key(testo): La chiave del controllo, come la dichiara l'azione.value(valore di un controllo): Il suo nuovo valore: true o false, un'opzione, un numero intero o una riga di testo.
settings
È cambiato ciò che è stato scelto tra le impostazioni dell'azione, in Personalizza: vovo.settings, le sue variabili --vovo-<key> e i suoi attributi data-vovo-<key> hanno già i nuovi valori. Un'azione che dichiara impostazioni riceve questo senza aggiungerlo come attivatore.
key(testo): La chiave dell'impostazione, o vuoto quando sono tornate tutte come arriva l'azione.
panel
È stato fatto qualcosa nel pannello dell'azione (panel nel suo manifesto, mostrato in Pannelli, nella barra laterale): un pulsante premuto, un modulo inviato o un pulsante in una riga di un elenco. Come control, un'azione con un pannello riceve questo senza aggiungerlo come attivatore; lo fa scattare solo chi gestisce la diretta.
name(testo): Il nome del pulsante, del modulo o del pulsante della riga, come lo dichiara il pannello.values(valore di un controllo): I campi di un modulo, per chiave, ognuno una riga di testo; vuoto per un pulsante.item(valore di un controllo): Per una riga di elenco, l'elemento che mostra, come lo conserva lo stato.index(numero): Per una riga di elenco, la sua posizione nell'elenco, da 0; -1 altrimenti.
webhook
È stato chiamato un webhook in entrata.
hook(testo): Il nome del webhook.data(dati): Ciò che è stato inviato, non affidabile: mostralo solo come testo.
obs.scene
OBS ha cambiato scena.
scene(testo): La scena ora in onda.previous(testo): La scena precedente.
media.track
È cambiato ciò che suona su questo computer: un altro brano, o play e pausa. Viene da qualsiasi app che dice a Windows cosa sta riproducendo (Spotify, un browser, un lettore).
title(testo): Il titolo del brano.artist(testo): Chi lo esegue.album(testo): Il suo album, se noto.playing(sì o no): True mentre suona; false quando è in pausa o fermo.art(testo): L'indirizzo della copertina, per un<img src>; vuoto se non c'è.source(testo): L'app in cui suona.
audio.level
Quanto è forte il microfono, circa 20 volte al secondo mentre cambia: per una bocca che si muove, un indicatore, un bagliore. Vovó ascolta solo mentre un overlay aperto mostra un'azione che aspetta questo; il suono in sé non lascia mai il computer, solo il suo volume.
level(numero): Volume da 0 (silenzio) a 1 (il massimo), su una scala che segue l'orecchio.peak(numero): Il momento più forte dal precedente, da 0 a 1.speaking(sì o no): True finché c'è voce, mantenuto un attimo nelle pause brevi.
screen.color
Il colore dello schermo principale, qualche volta al secondo mentre cambia: per un bagliore o una cornice che segue il gioco. Viene letto solo mentre un overlay aperto mostra un'azione che aspetta questo; l'overlay a schermo di Vovó non c'è mai.
color(testo): Il colore medio,#RRGGBB.vivid(testo): Il colore più vistoso sullo schermo,#RRGGBB: la media tende al grigio, questo no.brightness(numero): Quanto è chiaro lo schermo, da 0 (nero) a 1 (bianco).
input.move
Come si muove chi fa la diretta in un gioco, fino a 60 volte al secondo mentre cambia: quanto ha girato la camera, dove cammina e se salta. Per una scena che ondeggia con la camera, si inclina negli spostamenti laterali e scende al salto. Viene dal mouse, dai tasti di movimento (W, A, S e D per la loro posizione sulla tastiera, qualunque sia il layout, o le frecce, e la barra spaziatrice) e dal primo controller collegato (le levette e il tasto A), sempre come una direzione, mai come quale tasto. Viene letto solo mentre un overlay aperto mostra un'azione che aspetta questo, niente del resto della tastiera, e i tasti no mentre la finestra di Vovó è in primo piano (il mouse e un controller sì, a meno che il computer non metta in pausa anche loro). Un gioco eseguito come amministratore può nascondere i suoi input a Vovó, che gira senza.
dx(numero): Quanto ha girato la camera di lato dall'ultima volta, verso destra positivo: il movimento proprio del mouse, nei suoi conteggi (non la posizione del puntatore, che il gioco tiene ferma), con la levetta destra di un controller che si somma.dy(numero): Quanto ha girato verso l'alto o il basso, verso il basso positivo.walk(numero): Da -1 (indietro) a 1 (avanti): W o S, o le frecce, danno 1 o -1, la levetta sinistra di un controller quanto è spinta; 0 da fermo.strafe(numero): Da -1 (sinistra, A) a 1 (destra, D), allo stesso modo.jump(sì o no): True mentre è premuta la barra spaziatrice, o la A di un controller.
speech.text
Ciò che chi fa la diretta ha detto al microfono, trascritto una frase alla volta, per i sottotitoli: da Whisper su questo computer, o da OpenAI se chi fa la diretta l'ha scelto (Impostazioni > Voce, Voce in testo). Il microfono viene letto solo mentre un overlay aperto mostra un'azione in ascolto; ogni frase arriva alla fine della sua pausa, un secondo o due dopo essere stata detta, e non si conserva nulla.
text(testo): La frase, come testo.
screen.shared
Uno schermo condiviso è andato in onda o ne è uscito: uno schermo, una finestra o una scheda del browser, quello di chi fa la diretta (catturato da Vovó stessa, o dalla sua pagina di condivisione nel browser), o quello di un ospite che chi fa la diretta ha mandato in onda. Un'azione che lo colloca (vovo.screen.place) lo mostra. Arriva di nuovo, con on ancora vero, quando qualcos'altro prende il posto di ciò che era condiviso.
on(sì o no): True mentre qualcosa è condiviso.kind(testo): Cosa è condiviso:screen,windowotab(una scheda, solo dalla pagina di condivisione); vuoto quando niente lo è.audio(sì o no): True quando arriva anche il suo audio.guest(testo): L'ospite di cui è lo schermo, con il nome che gli ha dato chi fa la diretta; vuoto per quello di chi fa la diretta.
camera
Una videocamera che l'azione ha collocato (vovo.camera.place) ha cominciato a vedersi nella sua pagina, o ha smesso: chi fa la diretta l'ha accesa o spenta, il panico l'ha spenta, è stata scollegata, o la sta usando un altro programma. Come settings, un'azione che colloca una videocamera riceve questo senza aggiungerlo come trigger.
camera(testo): La chiave dell'impostazione di videocamera che mostra, come la dichiara l'azione.on(sì o no): true finché la sua immagine si vede.
persona.answer
La persona ha risposto a qualcuno, approvata quando l'approvazione è attiva. L'app la manda già in chat e la pronuncia quando è impostata così; un'azione la mostra.
persona(testo): Il nome della persona.user(testo): Chi l'ha fatto, come appare sulla piattaforma.question(testo): Ciò che è stato chiesto.answer(testo): La sua risposta.mood(testo): Ciò che la risposta chiede alla persona di fare, da una parola tra parentesi quadre all'inizio o alla fine ([dancing] abbiamo vinto!), in minuscolo; vuoto se non c'è. La parola viene tolta dalla risposta, che arriva in chat e alla voce senza di essa, così la personalità può dire alla persona come agire mentre parla.
tts.spoken
L'app ha letto qualcosa ad alta voce in onda: un messaggio della chat che chi gestisce la diretta ha scelto di leggere, o il testo di un premio una volta approvato. Lo dice lei stessa, con la voce di lettura (Impostazioni > Voce); un'azione lo mostra, o dà qualcosa da fare alla bocca di un personaggio. Una riga che la persona stessa ha scritto in chat arriva con persona a true, e l'app la dice con la voce della persona solo quando la persona è impostata per parlare, quindi un'azione che dà voce alla persona la dice al suo posto.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.text(testo): Ciò che è stato letto.source(testo): Da dove è arrivato:chatoreward.persona(sì o no): True quando la riga è della persona stessa, scritta in chat dal suo account.
music.request
Uno spettatore ha chiesto un brano al lettore musicale di Vovó, con il suo premio o il suo comando in chat (Impostazioni > Musica), ed ecco cosa ne è stato: aspetta l'approvazione, è entrato in coda, ha iniziato a suonare, è stato scartato, o è stato rifiutato e perché. Vovó non scrive niente in chat; un'azione risponde lì, o mostra chi ha chiesto ciò che suona.
user(testo): Chi l'ha fatto, come appare sulla piattaforma.text(testo): Cosa ha scritto per chiederlo.song(testo): Il brano trovato, con titolo e artista; vuoto se non ne ha trovato nessuno.state(testo): Cosa ne è stato:waiting,queued,playing,discardedorefused.why(testo): Perché è stata rifiutata:none(nessun brano corrisponde),many(più brani corrispondono allo stesso modo),busy(ne ha già una in attesa o in coda),full(troppe in attesa),queued(il brano è già in coda) oagain(è passato da poco); vuoto altrimenti.source(testo): Come l'hanno chiesto:rewardochat.
sound.played
Un pulsante audio del pad ha riprodotto il suo suono, o quello estratto tra i suoi suoni.
label(testo): Il nome del pulsante.button(numero): L'id del pulsante.file(testo): Il nome del file riprodotto, quale tra vari quando il pulsante ne estrae uno.seconds(numero): Quanto dura il file, in secondi al decimo; 0 quando Vovó non è riuscita a saperlo.
video.played
Un pulsante video del pad ha riprodotto il suo video sopra il palco, o quello estratto tra i suoi video.
label(testo): Il nome del pulsante.button(numero): L'id del pulsante.file(testo): Il nome del file riprodotto, quale tra vari quando il pulsante ne estrae uno.seconds(numero): Quanto dura il file, in secondi al decimo; 0 quando Vovó non è riuscita a saperlo.
remote.talk
Qualcuno ha parlato in onda dal telefono, tenendo premuto il pulsante per parlare come con un walkie-talkie: la sua voce suona ora su tutti gli overlay della diretta, dalla pagina della scena. Un'azione mostra chi sta parlando, finché parla.
name(testo): Il telefono, con il nome che chi fa la diretta gli ha dato associandolo.seconds(numero): Quanto dura la voce, in secondi, al decimo.
call.started
La chiamata vocale chiesta dall'azione (vovo.call.start) è aperta: il modello è lì, sente silenzio, e ciò che dice non viene ancora riprodotto, fino a vovo.call.answer. Ogni pagina che mostra l'azione riceve questo, così ognuna può far squillare il suo telefono e rispondere allo stesso passo.
seconds(numero): Il tetto della chiamata, in secondi, contato da quando è stata chiesta.
call.answered
La chiamata ha avuto risposta (vovo.call.answer, da qualsiasi pagina): il microfono arriva al modello e la sua voce suona in diretta.
call.text
Ciò che è appena stato detto nella chiamata, trascritto, poche parole alla volta e mentre si parla: i due lati possono sovrapporsi. Per un sottotitolo o una trascrizione; la voce la riproduce la pagina della scena.
who(testo):caller, chi gestisce la diretta al microfono, omodel.text(testo): Le parole, da unire alle precedenti come sono arrivate.start(numero): Quando sono iniziate nella chiamata, in millisecondi.end(numero): Quando sono finite, in millisecondi.
call.ended
La chiamata è finita, o non si è mai aperta: la voce si è fermata su ogni pagina.
reason(testo):hangup(l'azione, o l'app),panic,limit(il tetto),content(la moderazione del modello), o qualsiasi altra cosa per una chiamata caduta o mai aperta.seconds(numero): Quanto è durata, da quando è stata chiesta.
overlay.connected
Si è connessa una pagina di overlay del profilo attivo: OBS ha caricato o ricaricato una scena. Anche le azioni della pagina lo ricevono, una volta caricate.
scene(testo): Il nome della scena.pages(numero): Quante pagine mostrano ora quella scena.
JavaScript
vovo.on: Chiamalistenerogni volta che l'evento si verifica. L'azione deve avere l'evento tra i suoi attivatori.vovo.show: Mostra il template marcatodata-name="name", con i{fields}compilati daecome testo semplice.vovo.emit: Avvisa l'app che è successo qualcosa, come la fine di un'animazione: le azioni che hannonametra i loro attivatori lo ricevono. Due pagine che mostrano l'azione lo emettono una sola volta mentre gestiscono lo stesso evento; una chiamata fatta più tardi (quando l'animazione finisce) indica coneventl'evento a cui risponde, come invovo.chat.send, e senza un evento alle spalle lo stesso nome con gli stessi dati entro 5 secondi sono un solo evento.vovo.say: Dicetextad alta voce in diretta, con la voce del profilo o quella indicata invoice(parte del suo nome, una lingua comept-BR, o una voce dalla cartella di Piper comepiper:pt_BR-faber-medium). Una voce che questo computer non sa produrre (manca Piper o la sua voce, nessuna chiave OpenAI) parla invece con la voce del profilo, e la console dell'app lo dice.pitch(da 0,5 a 2) la rende più acuta o più grave a parità di durata,ring(da 0 a 1) le dà un bordo metallico esmallle toglie il petto: la voce di un personaggio da qualsiasi voce. L'app genera la voce una volta per le pagine che la chiedono mentre gestiscono lo stesso evento, e ognuna riproduce lo stesso file;eventcome invovo.chat.send, e senza un evento alle spalle lo stesso testo con la stessa voce entro 5 secondi viene generato una volta sola. Si risolve quando finisce di parlare.vovo.draw: Estrae una delleentries, ognuna con la stessa probabilità. A estrarre è l'app, quindi l'estrazione è equa, e il registro annota il vincitore. Due pagine che mostrano l'azione (OBS e la finestra di anteprima) e che estraggono gestendo lo stesso evento ricevono la stessa risposta: un vincitore, un'estrazione nel registro.eventcome invovo.chat.send.vovo.chat.send: Scrivetextnella chat della diretta tramite l'app: una riga, fino a 500 caratteri, come chi fa la diretta, o conas: "persona"tramite l'account Twitch proprio della persona (Integrazioni, sotto Twitch). Finché quell'account non è connesso, una riga così viene rifiutata e al suo posto non viene scritto nulla come chi fa la diretta. Richiede il permessochat.send, e l'app tiene il ritmo (20 righe in 30 secondi, una al secondo per azione, qualunque account le scriva); una riga oltre, o durante il panico, viene esclusa e la promise viene rifiutata. Due pagine che mostrano l'azione scrivono una volta ciò che chiedono gestendo uno stesso evento; una chiamata fatta dopo che il suo listener è tornato (dopo unawait, in un timer) indica coneventl'evento a cui risponde, lo stesso oggetto ricevuto dal listener, altrimenti l'app non la distingue da una seconda. Nell'anteprima dell'editor non viene scritto nulla: l'editor mostra la riga.vovo.pad.play: Preme uno dei pulsanti audio o video del pad, per la sua etichetta (senza badare a maiuscole), come farebbe una pressione: un premio o un comando di chat può riprodurre un suono che chi fa la diretta ha messo nel pad, e le azioni in ascolto disound.playedlo sentono. Solo pulsanti audio e video. Richiede il permessopad.play; il panico lo rifiuta, il registro dice che l'ha premuto l'azione, e due pagine che gestiscono un evento lo premono una volta. La promise viene rifiutata se il pulsante non esiste.eventcome invovo.chat.send. Nell'anteprima dell'editor non suona nulla: l'editor dice cosa suonerebbe.vovo.pad.busy: Mostra uno dei pulsanti di questa azione (di azione o di controllo, per etichetta, senza badare a maiuscole) come in corso nel pad perseconds: il suo piede si svuota man mano che passa il tempo, sul computer e sui telefoni, così chi gestisce la diretta sa che è ancora in corso, come fa il pulsante di un suono mentre suona. Conlock: true, premerlo non fa nulla fino ad allora, e la console dice perché.0lo termina subito. Si vede solo mentre una pagina mostra l'azione, finisce con il panico e dura al massimo 15 minuti; non serve alcun permesso, perché non raggiunge altri pulsanti oltre a quelli dell'azione. Nell'anteprima dell'editor il pad non cambia: l'editor dice cosa cambierebbe.vovo.pad.lock: Blocca uno dei pulsanti di questa azione (per etichetta, come lo prendevovo.pad.busy): sbiadito nel pad e sui telefoni, e premerlo non fa nulla se non dirlo nella console, finché l'azione non lo rilascia confalse. Per uno stato dell'azione più che per qualcosa in corso (un pulsante che non significa nulla mentre la sua parte della scena è nascosta), quindi niente si svuota: per ciò che dura un po',vovo.pad.busy. Blocca solo mentre una pagina mostra l'azione, e il panico rilascia; un'azione che riparte lo dice di nuovo. Nell'anteprima dell'editor il pad non cambia: l'editor dice cosa cambierebbe.vovo.obs.source: Mostra (true) o nasconde (false) una fonte in una scena di OBS, con i nomi che OBS dà loro, senza badare a maiuscole e accenti; senzaon, inverte lo stato. Richiede il permessoobs.toggle; il panico lo rifiuta, il registro lo annota, e due pagine che gestiscono un evento lo chiedono una volta. La promise si risolve appena OBS è stato interpellato; un nome che OBS non ha viene detto nella console, con quello inteso.eventcome invovo.chat.send, al posto dionquando questo manca. Nell'anteprima dell'editor non cambia nulla: l'editor dice cosa cambierebbe.vovo.obs.filter: Attiva (true) o disattiva (false) un filtro di una fonte di OBS, con i loro nomi in OBS; senzaon, inverte lo stato. Lo stesso permesso e le stesse regole divovo.obs.source.vovo.chat.parts: Il messaggio di un evento di chat come nodi da mettere nella pagina: le sue parole come testo, mai come markup, e le sue emote come<img class="vovo-emote">con il nome dell'emote inalt. Un messaggio senza parti è il suo testo.vovo.webhook.send: Chiede all'app di inviaredata, come JSON (al massimo 16 KB), al webhook del profilo chiamatoname, configurato in Impostazioni > Webhook. L'azione non vede mai l'indirizzo e non raggiunge mai la rete. Richiede il permessowebhook; l'app tiene il ritmo (30 al minuto, uno al secondo per azione), invia una volta ciò che due pagine chiedono insieme, e non chiama nulla durante il panico. La promise si risolve quando il webhook risponde 2xx e viene rifiutata altrimenti.eventcome invovo.chat.send. Nell'anteprima dell'editor non viene inviato nulla: l'editor mostra cosa verrebbe inviato.vovo.screen.place: Mostra lo schermo condiviso dove si trovaelement, sotto il disegno dell'azione stessa (quindi l'elemento e ciò che sta dietro devono essere trasparenti lì), e lo segue quando si muove;nulllo toglie.fitècontain(intero, il predefinito) ocover(riempiendo lo spazio);radiusarrotonda gli angoli, in pixel;backgroundè un colore (#000000) per lo spazio checontainlascia attorno a un'immagine di altra forma, che senza di esso resta trasparente e mostra ciò che sta dietro la scena. Richiede il permessoscreen.show.vovo.camera.place: Mostra la videocamera che chi fa la diretta ha scelto in una delle impostazioni di videocamera dell'azione (camera, la sua chiave; la prima se non è data) dove si trovaelement, sotto il disegno dell'azione stessa (quindi quella parte deve essere trasparente), e lo segue quando si muove;nullla toglie.fitècover(riempiendo lo spazio, il predefinito) ocontain(intera);radiusebackgroundcome invovo.screen.place;mirrorla mostra come farebbe uno specchio. La videocamera viene aperta solo finché qualche pagina la mostra, la videocamera di chi fa la diretta è accesa e il panico è spento; l'eventocameradice quando si vede. L'azione non vede mai le sue immagini né sa quale videocamera sia. Richiede il permessocamera.show.vovo.media.play: Riproduce una clip di Twitch, un video di Twitch o un video di YouTube, dal suo link, nel player ufficiale, dove l'ha messovovo.media.place(altrimenti su tutto il palco), con il suo audio; uno più nuovo prende il suo posto. Un'azione che fa scattare solo chi gestisce la diretta lo riproduce subito; qualsiasi altra aspetta che qualcuno lo approvi, qui o da un telefono autorizzato, perché potrebbe averlo chiesto uno spettatore. La promise si risolve quando va in onda e viene rifiutata quando è respinto, scartato o chiesto durante il panico.secondslo toglie dopo quel tempo: un player non sa quando finisce una clip;eventcome invovo.chat.send. Nell'anteprima dell'editor viene riprodotto lì, in silenzio. Richiede il permessomedia.play.vovo.media.place: Dove viene riprodotto il clip o il video: dove si trovaelement, sotto il disegno dell'azione stessa (quindi l'elemento e ciò che sta dietro devono essere trasparenti lì), seguendolo quando si muove;nulltorna a tutto il palco. Il player mantiene la forma del video nello spazio;radiusarrotonda gli angoli, in pixel.vovo.media.stop: Toglie dal palco il clip o il video dell'azione, su ogni pagina che la mostra.vovo.call.start: Avvia una chiamata vocale con un modello di IA, in onda: chi gestisce la diretta parla al microfono, il modello risponde ad alta voce, e la diretta sente entrambi. L'app la apre con la chiave OpenAI di chi fa la diretta e la mantiene; le pagine riproducono solo la voce.instructionsè chi è il modello e come parla;voiceuna delle voci del modello;secondsil tetto della chiamata (al massimo 300, che è anche il predefinito);backofficecon cosa si risponde a una domanda che il modello passa "al sistema";phoneriproduce la voce come attraverso una linea telefonica. La promise si risolve quando la chiamata è aperta, con il modello che sente silenzio e non ancora riprodotto (call.started); rispondi convovo.call.answer. Viene rifiutata quando è negata. Richiede il permessocall, e parte solo da qualcosa che chi gestisce la diretta ha fatto a mano (un pulsante del pad, una scorciatoia, un controllo, il pannello dell'azione) o in un'azione che è solo sua: la chiamata si paga al secondo, porta il microfono al modello e manda in onda ciò che il modello dice senza che nessuno lo legga prima. Una chiamata alla volta; il panico riaggancia e rifiuta; l'anteprima dell'editor non ne fa nessuna.eventcome invovo.chat.send.vovo.call.answer: Risponde alla chiamata: da qui il microfono arriva al modello e la sua voce suona in diretta. Un modello aspetta che chi chiama parli; perché parli per primo,instructiongli dice come rispondere,openingcon cosa aprire, econtextcosa deve sapere senza dirlo, inviati in quest'ordine. Risposta da una pagina, è risposta: rispondere di nuovo non fa nulla.vovo.call.tell: Dice qualcosa al modello durante la chiamata, in una riga:context(il predefinito) è qualcosa da sapere senza dirlo,instructionqualcosa da seguire,aloudqualcosa da dire. Due pagine che gestiscono un evento lo dicono una volta;eventcome invovo.chat.send.vovo.call.end: Chiude la chiamata: la voce si ferma subito su ogni pagina, e seguecall.ended.vovo.state: Un oggetto che sopravvive ai ricaricamenti dell'overlay e ai riavvii dell'app. Le sue chiavi di primo livello vengono salvate appena le imposti.vovo.settings: Ciò che è stato scelto delle impostazioni dichiarate dall'azione (settingsinaction.json), per chiave, o ognuna come arriva l'azione: un colore come#RRGGBB, un numero, true o false, un'opzione, una riga, l'indirizzo di un file (null per nessuno), una famiglia di font, e per una videocamera true o false, se ne è stata scelta una, mai quale. Si scelgono in Personalizza, al computer, mai dall'azione; l'eventosettingsdice quando cambiano.
Template
{field} dentro un template viene compilato con quel campo dell'evento, come testo semplice.
data-on: Su un<template>: l'evento che lo mostra, compilato con i campi di quell'evento.data-name: Su un<template>: il nome chevovo.showusa per mostrarlo da JavaScript.data-seconds: Su un<template>: quanto resta prima di essere rimosso. Senza, resta.data-vovo-<key>: Sulla radice del documento, per ogni impostazione attivo/disattivo, di scelta o di videocamera:onooff(una videocamera scelta o no), o l'opzione scelta, per selettori comehtml[data-vovo-side="Destra"] .chat.
CSS
--vovo-accent: Il colore di accento scelto in Vovó.--vovo-<key>: Ogni impostazione dell'azione, come CSS: un colore, un numero con la sua unità (34px), 1 o 0 per attivo o disattivo o per una videocamera scelta o no, un'opzione, una riga o una famiglia di font tra virgolette, un file comeurl(...)onone.font-family: var(--vovo-font), sans-serif;
Permessi
Un'azione li chiede nel suo manifesto, e chi la installa li approva.
chat.send: Scrivere nella chat del canale, tramite l'app: come chi fa la diretta, o tramite l'account proprio della persona.media.play: Clip e video in diretta, nei loro player ufficiali; ciò che non ha chiesto chi gestisce la diretta aspetta l'approvazione.call: Chiamate vocali con un modello di IA, in onda: avviate solo da chi gestisce la diretta, pagate al secondo con la chiave OpenAI di chi fa la diretta; il microfono va al modello, e ciò che dice si sente senza che nessuno lo legga prima.screen.show: Mostrare in diretta ciò che chi fa la diretta condivide dalla pagina di condivisione di Vovó.camera.show: Mostrare in diretta la videocamera di questo computer che chi fa la diretta ha scelto per l'azione in Personalizza, mai le sue immagini all'azione.pad.play: Riprodurre i pulsanti audio e video del pad, per etichetta.obs.toggle: Mostrare o nascondere fonti e attivare o disattivare filtri in OBS.webhook: Chiedere all'app di chiamare uno dei webhook in uscita del profilo.