Guida rapida al plugin
The quickest way to build a plugin is with the JavaScript or Python SDK. Pick a tab below and follow it through installation. To use Rust, TinyGo, AssemblyScript, Zig, or another compiled language instead, see Native WebAssembly.
Prerequisiti
- Un server Owncast che puoi amministrare, versione 0.3.0 o superiore.
- JavaScript
- Python
- Node.js 18 o superiore (
node --versionper controllare) per il toolchain@owncast/plugin-sdk.
- Python 3.8 o superiore, e
uvopipper installare il toolchainowncast-plugin-py.
1. Crea un nuovo plugin
L'identificatore di un plugin è il suo slug: lettere minuscole, numeri e trattini, che inizia con una lettera. Viene usato come nome della directory, nome del file di output e prefisso dell'URL.
- JavaScript
- Python
Crea un progetto con create-owncast-plugin, passando lo slug:
npx create-owncast-plugin@latest my-plugin
cd my-plugin
npm install
Ora hai:
my-plugin/
├── package.json
├── plugin.manifest.json display name, slug, version, permissions
├── README.md how to build, test, package, and install it
├── INSTRUCTIONS.md optional, rendered as a tab in the admin
├── AGENTS.md notes for AI coding agents
├── .agents/ a bundled skill for AI coding agents
├── src/
│ └── plugin.js your code, with a sample handler
└── __tests__/
└── plugin.test.js a sample scenario test
npm install crea anche node_modules/. Nessuno di questi è creato per te, ma puoi aggiungere un icon.png (mostrato nell'elenco dei plugin dell'amministrazione), una directory public/ (file statici serviti a /plugins/my-plugin/), e una directory assets/ (file che l'host incorpora per i campi di manifest).
Crea un progetto con new, passando lo slug. uvx esegue il generatore direttamente da PyPI senza installare nulla:
uvx owncast-plugin-py new my-plugin
cd my-plugin
uv tool install owncast-plugin-py # or: pip install owncast-plugin-py — for build/test/serve/package
Ora hai:
my-plugin/
├── plugin.manifest.json display name, slug, version, permissions
├── README.md how to build, test, package, and install it
├── INSTRUCTIONS.md optional, rendered as a tab in the admin
├── AGENTS.md notes for AI coding agents
├── .agents/ a bundled skill for AI coding agents
├── src/
│ └── plugin.py your code, with a sample handler
└── __tests__/
└── plugin.test.json a sample scenario test
Il manifest ha sia un nome visualizzato leggibile dall'uomo ("name": "My Plugin") che uno slug ("slug": "my-plugin"). Il nome visualizzato è quello che gli amministratori vedono nelle liste. Lo slug è l'identificatore canonico. Vedi il riferimento al manifest per le regole.
2. Scrivi del codice
Un gestore reagisce a un evento. L'SDK deriva l'elenco delle sottoscrizioni del manifest dai gestori che definisci, quindi non c'è nient'altro da tenere sincronizzato. Ecco un echo bot:
- JavaScript
- Python
Apri src/plugin.js:
const { definePlugin, owncast } = require('@owncast/plugin-sdk');
module.exports = definePlugin({
onChatMessage(msg) {
owncast.chat.send(`echo: ${msg.body}`);
},
});
Crea src/plugin.py:
from owncast_plugin import plugin, owncast
@plugin.on_chat_message
def echo(msg):
owncast.chat.send(f"echo: {msg.body}")
Vedi il riferimento ai gestori per tutto ciò a cui puoi collegarti, e il riferimento alle API per ogni metodo owncast.*.
3. Costruisci il plugin
Questo produce my-plugin.ocpkg nella radice del tuo progetto: un file singolo contenente il tuo manifest, il plugin compilato e i contenuti di public/ e assets/. Il .ocpkg è il formato di distribuzione: quel file singolo è tutto ciò di cui un amministratore ha bisogno.
- JavaScript
- Python
npm run package
owncast-plugin-py package
4. Esegui i test
Ogni scenario genera eventi attraverso il vero runtime del plugin con effetti collaterali simulati, quindi un test superato significa lo stesso comportamento in produzione. Vedi la guida ai test per il modello di dati completo.
- JavaScript
- Python
npm test
owncast-plugin-py test
5. (Opzionale) itera contro un server di sviluppo locale
Serve il plugin a http://localhost:8080/plugins/my-plugin/ per curling gli endpoint, aprendo pagine statiche in un browser, o attivando i gestori di eventi attraverso gli endpoint helper /_dev/ (ad esempio POST /_dev/chat). Riavvia il server di sviluppo quando cambi il tuo codice.
- JavaScript
- Python
npm run serve
owncast-plugin-py serve
6. Installa sul tuo server
Nell'amministrazione di Owncast, apri Plugin nella barra laterale e fai clic su Carica plugin. Scegli il file my-plugin.ocpkg prodotto dalla tua build. Il plugin appare immediatamente nell'elenco. Attiva Abilitato per caricarlo.
In alternativa, copia my-plugin.ocpkg nella directory data/plugins/ del tuo server e il prossimo ciclo di scansione lo prenderà:
scp my-plugin.ocpkg user@your-owncast-server:/path/to/owncast/data/plugins/
Se il plugin dichiara permessi, l'amministratore li esamina nella scheda Permessi nella pagina di dettaglio del plugin prima di abilitarlo. Il primo abilitazione cattura l'insieme di permessi approvati. If you later ship an update that asks for more access, the already-approved version keeps running with its existing permissions while the update waits as pending until the admin re-approves.
Cosa leggere dopo
- Scegliere un SDK e le sue pagine JavaScript / Python per il riferimento completo specifico per linguaggio.
- Riferimento al manifest per lo schema completo per
plugin.manifest.json. - Riferimento ai gestori per ogni evento a cui puoi iscriverti.
- API di Owncast per ogni metodo che puoi chiamare dal codice del plugin.
Quando le cose vanno male
- Il plugin non appare nell'elenco degli amministratori. Assicurati che il
.ocpkgsia indata/plugins/, non solo inplugins/, e che il nome del file termini con.ocpkg. La pagina Plugin dell'amministratore ha un pulsante Aggiorna se non vuoi aspettare il prossimo ciclo di scansione. - Il plugin appare ma non si abilita. Controlla la vista di dettaglio del plugin dell'amministratore. La colonna Stato mostra
errorse il manifest è invalido o il plugin non è riuscito a istanziarsi. Passa sopra per il messaggio, o esegui i tuoi test localmente per catturare lo stesso problema prima della spedizione. - Il plugin si abilita ma non fa nulla. Assicurati di usare il nome del gestore corretto (
onChatMessage/on_chat_message, nononMessage) e che il permesso corrispondente sia nel tuo manifest. A call without its permission never reaches Owncast: the denial is logged on the server and the call returns an empty or zero value, so watch the Owncast logs. - Il plugin è disabilitato automaticamente. Un filtro che genera errori o si blocca cinque volte di seguito viene disabilitato per il resto della sessione. Correggi il bug, ricostruisci, ridistribuisci e riabilita.
Improve this page
See something missing or incorrect? Edit this page and improve the documentation for everyone.
