プラグインのクイックスタート
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.
前提条件
- 管理できるOwncastサーバー(バージョン0.3.0以上)。
- JavaScript
- Python
@owncast/plugin-sdkツールチェーン用に、Node.js 18以上(node --versionで確認可能)。
- Python 3.8以上および
uvまたはpipを使用してowncast-plugin-pyツールチェーンをインストールします。
1。 新しいプラグインを作成する
プラグインの識別子はスラグです:小文字の文字、数字、ハイフンで構成され、文字で始まります。 これはディレクトリ名、出力ファイル名、およびURLプレフィックスとして使用されます。
- JavaScript
- Python
create-owncast-pluginを使用してプロジェクトをスキャフォールドし、スラグを渡します:
npx create-owncast-plugin@latest my-plugin
cd my-plugin
npm install
これで次のものが得られました:
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はnode_modules/も作成します。 これらのファイルは自動的には作成されませんが、icon.png(管理者プラグインリストに表示)、public/ディレクトリ(/plugins/my-plugin/で提供される静的ファイル)、およびassets/ディレクトリ(ホストがマニフェストフィールドにインラインで追加するファイル)を追加できます。
newを使ってプロジェクトをスキャフォールドし、スラグを渡します。 uvxは、何もインストールせずにPyPIから直接スキャフォールダーを実行します:
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
これで次のものが得られました:
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
マニフェストには人間が読み取れる表示名("name": "My Plugin")とスラグ("slug": "my-plugin")が含まれています。 表示名は管理者がリストで見るものです。 スラグは標準の識別子です。 マニフェストリファレンスでルールを確認してください。
2。 コードを書く
ハンドラはイベントに反応します。 SDKは、あなたが定義したハンドラからマニフェストのサブスクリプションリストを派生させるため、同期する必要があるものはありません。 これがエコーボットです:
- JavaScript
- Python
src/plugin.jsを開きます:
const { definePlugin, owncast } = require('@owncast/plugin-sdk');
module.exports = definePlugin({
onChatMessage(msg) {
owncast.chat.send(`echo: ${msg.body}`);
},
});
src/plugin.pyを作成します:
from owncast_plugin import plugin, owncast
@plugin.on_chat_message
def echo(msg):
owncast.chat.send(f"echo: {msg.body}")
ハンドラリファレンスを参照して、フックできるすべてのもの、APIリファレンスでowncast.*メソッドを確認してください。
3。 プラグインをビルドする
これはプロジェクトルートにmy-plugin.ocpkgを生成します。一つのファイルにマニフェスト、コンパイルされたプラグイン、およびpublic/とassets/の内容が含まれています。 .ocpkgは配布形式です。この一つのファイルが管理者に必要なすべてです。
- JavaScript
- Python
npm run package
owncast-plugin-py package
4。 テストを実行する
各シナリオは、実際のプラグインランタイムを通じてイベントを発生させ、モックされた副作用が発生します。したがって、テストが合格すれば、製品環境でも同じ動作を意味します。 テストガイドで完全なデータモデルを確認してください。
- JavaScript
- Python
npm test
owncast-plugin-py test
5。 (オプション)ローカル開発サーバーに対して反復実行する
プラグインはhttp://localhost:8080/plugins/my-plugin/でサーバーし、エンドポイントをcurlしたり、ブラウザで静的ページを開いたり、/_dev/ヘルパーエンドポイントを通じてイベントハンドラをトリガーしたりします(例:POST /_dev/chat)。 コードを変更した場合、開発サーバーを再起動してください。
- JavaScript
- Python
npm run serve
owncast-plugin-py serve
6。 サーバーにインストールする
Owncast管理者で、サイドバーのプラグインを開き、プラグインのアップロードをクリックします。 ビルドしたmy-plugin.ocpkgファイルを選択してください。 プラグインはすぐにリストに表示されます。 有効を切り替えてロードします。
あるいは、my-plugin.ocpkgをサーバーのdata/plugins/ディレクトリにコピーし、次のスキャンで検出させることができます:
scp my-plugin.ocpkg user@your-owncast-server:/path/to/owncast/data/plugins/
プラグインが権限を宣言する場合、管理者は有効化前にプラグインの詳細ページの権限タブでそれらを確認します。 最初の有効化は承認された権限セットをキャプチャします。 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.
次に読むべきこと
- SDKの選択およびそのJavaScript/Pythonページで、言語固有の完全なリファレンスを確認してください。
- マニフェストリファレンスで
plugin.manifest.jsonの完全なスキーマを確認してください。 - ハンドラリファレンスで、購読可能なすべてのイベントを確認してください。
- Owncast APIで、プラグインコードから呼び出すことができるすべてのメソッドを確認してください。
問題が発生した場合
- プラグインが管理者リストに表示されません。
.ocpkgがdata/plugins/にあり、単にplugins/にないこと、ファイル名が.ocpkgで終わっていることを確認してください。 管理者のプラグインページには、次のスキャン間隔を待たないためのリフレッシュボタンがあります。 - プラグインが表示されますが、有効になりません。 管理者のプラグイン詳細ビューを確認してください。 状態列には、マニフェストが無効であるか、プラグインのインスタンス化に失敗した場合、
errorと表示されます。 メッセージをホバーするか、ローカルでテストを実行して、出荷前に同じ問題を捕まえてください。 - プラグインは有効になっていますが、何も機能しません。 正しいハンドラ名(
onChatMessage/on_chat_message、onMessageではない)を使用していること、マニフェストに一致する権限が含まれていることを確認してください。 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. - プラグインは自動的に無効になっています。 5回連続してエラーを発生させるフィルタが、残りのセッションの間無効にされます。 バグを修正し、再ビルド、再デプロイ、再有効化してください。
Improve this page
See something missing or incorrect? Edit this page and improve the documentation for everyone.
