Ir para o conteúdo principal

Plugin de início rápido

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.

Pré-requisitos

  • Um servidor Owncast que você pode administrar, versão 0.3.0 ou mais recente.
  • Node.js 18 ou mais recente (node --version para verificar) para a toolchain @owncast/plugin-sdk.

1. Crie um novo plugin

O identificador de um plugin é seu slug: letras minúsculas, dígitos e hífens, começando com uma letra. É usado como o nome do diretório, o nome do arquivo de saída e o prefixo da URL.

Crie um projeto com create-owncast-plugin, passando o slug:

npx create-owncast-plugin@latest my-plugin
cd my-plugin
npm install

Você agora tem:

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 também cria node_modules/. Nenhum destes é criado para você, mas você pode adicionar um icon.png (exibido na lista de plugins do admin), um diretório public/ (arquivos estáticos servidos em /plugins/meu-plugin/), e um diretório assets/ (arquivos que o host insere para campos de manifesto).

O manifesto possui tanto um nome de exibição legível por humanos ("name": "Meu Plugin") quanto um slug ("slug": "meu-plugin"). O nome de exibição é o que os administradores veem nas listas. O slug é o identificador canônico. Veja a referência do manifesto para as regras.

2. Escreva algum código

Um manipulador reage a um evento. O SDK deriva a lista de assinaturas do manifesto a partir dos manipuladores que você define, então não há nada mais para manter em sincronia. Aqui está um bot de eco:

Abra src/plugin.js:

const { definePlugin, owncast } = require('@owncast/plugin-sdk');

module.exports = definePlugin({
onChatMessage(msg) {
owncast.chat.send(`echo: ${msg.body}`);
},
});

Veja a referência de manipuladores para tudo que você pode conectar, e a referência de APIs para cada método owncast.*.

3. Construa o plugin

Isto produz meu-plugin.ocpkg na raiz do seu projeto: um único arquivo contendo seu manifesto, o plugin compilado e o conteúdo de public/ e assets/. O .ocpkg é o formato de distribuição: aquele arquivo é tudo que um administrador precisa.

npm run package

4. Execute os testes

Cada cenário gera eventos através do tempo de execução real do plugin com efeitos colaterais simulados, então um teste bem-sucedido significa o mesmo comportamento em produção. Veja o guia de testes para o modelo de dados completo.

npm test

5. (Opcional) iterar contra um servidor de desenvolvimento local

Serve o plugin em http://localhost:8080/plugins/meu-plugin/ para testar endpoints, abrir páginas estáticas no navegador ou acionar manipuladores de eventos através dos endpoints auxiliares /_dev/ (por exemplo POST /_dev/chat). Reinicie o servidor de desenvolvimento quando você mudar seu código.

npm run serve

6. Instale no seu servidor

No admin do Owncast, abra Plugins na barra lateral e clique em Fazer upload do plugin. Escolha o arquivo meu-plugin.ocpkg que sua construção gerou. O plugin aparece na lista imediatamente. Ative Habilitado para carregá-lo.

A página de Plugins no admin, listando plugins instalados com suas permissões solicitadas, status, um botão de ativação e os botões Upload plugin e Configurar

Alternativamente, copie meu-plugin.ocpkg para o diretório data/plugins/ do seu servidor e a próxima verificação o pegará:

scp my-plugin.ocpkg user@your-owncast-server:/path/to/owncast/data/plugins/

Se o plugin declarar permissões, o administrador as revisa na aba Permissões na página de detalhes do plugin antes de habilitá-lo. A primeira ativação captura o conjunto de permissões aprovadas. 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.

A aba de Permissões na página de detalhes do plugin, listando cada permissão solicitada com uma descrição em linguagem simples

O que ler em seguida

Quando as coisas dão errado

  • O plugin não aparece na lista do admin. Certifique-se de que o .ocpkg está em data/plugins/, não apenas plugins/, e o nome do arquivo termina em .ocpkg. A página Plugins do admin tem um botão Atualizar se você não quiser esperar pela próxima verificação.
  • O plugin aparece, mas não pode ser ativado. Verifique a visualização de detalhes do plugin do admin. A coluna Status mostra erro se o manifesto for inválido ou o plugin falhou ao instanciar. Passe o mouse para ver a mensagem ou execute seus testes localmente para capturar o mesmo problema antes de enviar.
  • O plugin é ativado, mas não faz nada. Certifique-se de que está usando o nome de manipulador correto (onChatMessage / on_chat_message, não onMessage) e que a permissão correspondente está em seu manifesto. 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.
  • O plugin é desativado automaticamente. Um filtro que lança ou congela cinco vezes consecutivas é desativado pelo resto da sessão. Corrija o bug, reconstrua, reimplante e reabilite.

Improve this page

See something missing or incorrect? Edit this page and improve the documentation for everyone.

Contributors to this documentation