Estendi Owncast con i plugin
Owncast può essere esteso con plugin: piccoli programmi che il server carica a runtime per reagire ai messaggi della chat, agli eventi di streaming, alle attività del fediverse e alle richieste HTTP. Essi girano all'interno di un ambiente isolato, quindi un plugin può bloccarsi senza abbattere il server e l'host applica un chiaro modello di autorizzazione affinché un amministratore sappia sempre cosa può toccare un plugin.
I plugin sono una funzionalità completamente nuova, introdotta in Owncast 0.3.0, e l'API è ancora in evoluzione. Se trovi un bug o hai un suggerimento, ti prego di aprire un problema o chiacchierare dal vivo con la comunità.
You can write a plugin with the JavaScript SDK, the Python SDK, or as a native WebAssembly module. The two SDKs are the recommended paths for most plugins. Native WebAssembly is an advanced option for compiled languages and direct access to the plugin wire protocol.
Cosa puoi costruire
- Bot della chat che rispondono a parole chiave o comandi, postano promemoria, conducono sondaggi o moderano lo spam.
- Filtri che riscrivono o rimuovono i messaggi della chat prima che raggiungano gli spettatori.
- Sovrapposizioni rese sopra al tuo stream, comunicando con gli endpoint HTTP del tuo plugin.
- Integrazioni che collegano Owncast a Discord, al fediverse, a notifiche del browser, o a qualsiasi servizio HTTPS.
- Strumenti per amministratori che aggiungono una scheda all'interfaccia amministrativa di Owncast per le impostazioni specifiche del plugin.
- Pulsanti d'azione che appaiono sotto il tuo stream, avviando widget, pagine di donazione o qualsiasi altra cosa tu offra.
Ogni plugin di esempio nell'SDK è un punto di partenza completo che puoi copiare.
Choose an authoring path
All three paths produce the same .ocpkg format and use the same manifest, permissions, events, and Owncast APIs.
- JavaScript con
@owncast/plugin-sdk. Scaffold withnpx create-owncast-plugin, writedefinePlugin({ ... }), and build withnpm run package. - Python con
owncast-plugin-py. Scaffold withuvx owncast-plugin-py new, write decorated functions, and build withowncast-plugin-py package. - Native WebAssembly with Rust, TinyGo, AssemblyScript, Zig, or another compiled language. Implement the wire protocol directly and package the compiled module as
plugin.wasm.
The same echo bot in each SDK:
// JavaScript
const { definePlugin, owncast } = require('@owncast/plugin-sdk');
module.exports = definePlugin({
onChatMessage(msg) {
owncast.chat.send(`echo: ${msg.body}`);
},
});
# Python
from owncast_plugin import plugin, owncast
@plugin.on_chat_message
def echo(msg):
owncast.chat.send(f"echo: {msg.body}")
Come si incastra tutto
Un plugin è un singolo file .ocpkg contenente il manifesto del tuo plugin, il codice compilato, e qualsiasi asset statico. Un amministratore inserisce il file nella directory data/plugins/ di Owncast e lo abilita dalla pagina Plugin nell'amministrazione.
Una volta abilitato, il plugin gira all'interno del processo di Owncast. I gestori che hai definito si attivano quando accadono eventi corrispondenti. Le API che chiami (inviando chat, leggendo la configurazione, recuperando URL) passano attraverso l'host, che controlla le autorizzazioni dichiarate nel tuo manifesto.
Each enabled plugin uses more server memory. JavaScript and Python share one runtime per language, so the first plugin in either language has a larger one-time cost. A native WebAssembly plugin loads its own compiled module instead of a shared language runtime.
Cosa può fare un plugin
- Iscriviti agli eventi. Messaggi di chat, avvio e arresto dello streaming, seguito del fediverse, nuovo utente della chat che si unisce. Definisci un metodo gestore e l'SDK deriverà l'iscrizione.
- Filtra la chat. Vedi ogni messaggio della chat prima che venga trasmesso, modificalo o rimuovilo.
- Chiama le API di Owncast.
owncast.chat.send(text),owncast.kv.get(key),owncast.http.fetch(url), e decine di altri, la maggior parte gateati da un'autorizzazione dichiarata. - Servi HTTP. Ogni plugin può possedere lo spazio URL a
/plugins/<your-slug>/...per asset statici e gestori dinamici. - Aggiungi interfaccia utente. Dichiara pagine amministrative, pulsanti d'azione, fogli di stile dei plugin, script dei plugin, o un blocco di contenuto HTML extra nel tuo manifesto e Owncast li in linea nel suo stesso chrome.
- Controlla l'accesso. Un plugin può essere il fornitore di autenticazione del sito. Costringe gli spettatori a effettuare il login (OAuth, una password, qualsiasi cosa in HTTP) prima che possano raggiungere la pagina, il video, la chat o l'API.
Cosa un plugin non può fare
Per design:
- Nessun accesso diretto al filesystem, rete o processi dell'host. Il sandbox applica questo. I plugin fanno ciò che le API dell'host espongono, e solo con autorizzazioni dichiarate.
- Nessuna impersonificazione dell'identità. Ogni plugin ottiene un'identità di chat (il bot fornito da Owncast durante l'installazione), e i post outbound del fediverse provengono dall'account stesso dello streamer.
- Nessuna lettura cross-plugin. Il negozio chiave-valore di ogni plugin è namespaced.
- Nessun blocco di chat indefinito. Le chiamate al filtro sono limitate nel tempo a 50 ms, e un plugin che solleva ripetutamente viene disabilitato automaticamente.
Questo è il motivo per cui un amministratore può installare un plugin di terze parti senza controllare ogni riga di codice. Il confine di fiducia è l'elenco delle autorizzazioni del manifesto.
Dove andare dopo
- Inizio rapido. Struttura un nuovo plugin, costruiscilo, installalo.
- JavaScript, Python, and Native WebAssembly. Choose a language and build path.
- Riferimento al manifesto. Ogni campo che il tuo
plugin.manifest.jsonpuò contenere. - Plugin della chat. Costruisci bot, strumenti di moderazione e filtri per la chat.
- Eventi. Ogni evento a cui il tuo plugin può iscriversi, con forme del payload.
- API di Owncast. Ogni metodo
owncast.*, cosa fa e quale autorizzazione richiede. - Autorizzazioni. L'elenco completo e come funziona il modello di sicurezza.
- Servire HTTP. Servi URL dal tuo plugin e invia eventi in tempo reale ai browser.
- Contributo interfaccia utente. Registra pagine amministrative e contribuisci con pulsanti d'azione sotto lo stream.
- Testing. Test scenario che guidano il tuo plugin attraverso il runtime reale.
- Imballaggio e pubblicazione. Imballa il
.ocpkg, installalo e elencalo nella directory.
Fonte
- Sorgente SDK: github.com/owncast/plugin-sdk
- Example plugins: JavaScript · Python
Improve this page
See something missing or incorrect? Edit this page and improve the documentation for everyone.
Gabe Kangas