EDBP (Easy Discord Bot Builder) の機能を拡張するためのプラグインを作成するための公式ガイドです。
プラグインは、以下の2つのファイルを同梱したフォルダ(または ZIP 形式)で構成されます。
manifest.json: プラグインのメタデータ。plugin.js: プラグインのロジックを記述した JavaScript ファイル。
GitHub で公開する場合は、リポジトリのルートにこれらのファイルを配置し、トピックに edbp-plugin を追加してください。
プラグインの情報を定義します。以下のフィールドが推奨されます。
{
"id": "my-custom-plugin",
"name": "サンプルプラグイン",
"version": "1.0.0",
"author": "あなたの名前",
"description": "このプラグインは新しいコマンドブロックを追加します。",
"icon": "https://example.com/icon.png",
"tags": ["utility", "commands"],
"affectsStyle": false,
"affectsBlocks": true,
"repo": "https://github.com/YourName/my-plugin",
"externalPackages": ["requests", "aiohttp"],
"pipInstall": ["discord.py[voice]", "aiohttp"],
"requiredPlugins": ["core-utils-plugin"],
"api": {
"name": "Example API",
"baseUrl": "https://api.example.com"
},
"minAppVersion": "1.1.0"
}| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
id |
string | 任意 | システム内部で使用されるID。未指定時は名前から自動生成されます。 |
name |
string | 必須 | プラグインの表示名。 |
version |
string | 必須 | プラグインのバージョン。書き方は自由。 |
minAppVersion |
string | 必須 | 1.1.0 (JavaScript推奨) または 1.0.1 (PHP) を指定。JavaScript は 1.0.0 も後方互換として許可。 |
author |
string | 必須 | 開発者名。 |
description |
string | 任意 | 短い説明文。 |
icon |
string | 任意 | アイコンのURLまたは絵文字。 |
tags |
string[] | 任意 | 検索に使用されるタグ。 |
affectsStyle |
boolean | 必須 | CSS等でUIに干渉するかどうか。 |
affectsBlocks |
boolean | 必須 | Blocklyブロックの追加・変更を行うかどうか。 |
repo |
string | 任意 | ソースコードのリポジトリURL(GitHubなど)。 |
externalPackages |
string[] | 任意 | 実行時に必要な外部パッケージ名の配列(例: requests, aiohttp)。 |
pipInstall |
string[] | 任意 | pip install ○○ の ○○ 部分だけを並べる配列。pip install というコマンド文字列は書かない。 |
requiredPlugins |
string[] | 任意 | このプラグインの前提となるプラグインIDの配列。 |
api |
object | 任意 | 利用する外部API情報。最低でも name を含める。 |
licenseフィールドは廃止されました。manifest.json には含めないでください。
- 形式:
major.minor.runtime(例:1.2.0) major: 主要バージョンminor: 小規模アップデートruntime:0=JavaScript,1=PHPを識別- 現在の互換判定対象バージョン:
1.1.0(JavaScript,1.0.0互換あり) /1.0.1(PHP) ※PHPのサポートは外れています。
プラグインは、Plugin クラスをエクスポートする形式で記述します。
class Plugin {
/**
* @param {Blockly.Workspace} workspace
*/
constructor(workspace) {
this.workspace = workspace;
this.styleElement = null;
}
/**
* プラグインが有効化された時に実行される
*/
async onload() {
console.log("Plugin Loaded!");
// 1. スタイルの追加
this.applyStyles();
// 2. ブロックの登録
this.registerBlocks();
}
/**
* プラグインが無効化または削除された時に実行される
* ※必ずクリーンアップを行ってください
*/
async onunload() {
console.log("Plugin Unloaded");
// スタイルの削除
if (this.styleElement) {
this.styleElement.remove();
}
// ブロックの削除(必要に応じて)
// ※通常、Blockly.Blocksからの削除のみでOK
}
applyStyles() {
const css = `
.my-custom-block-style {
color: #555;
}
`;
this.styleElement = document.createElement('style');
this.styleElement.textContent = css;
document.head.appendChild(this.styleElement);
}
registerBlocks() {
// ブロックの定義
Blockly.Blocks['my_plugin_hello'] = {
init: function() {
this.appendDummyInput()
.appendField("こんにちは!");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(160);
}
};
// コード生成ロジック (Python)
// Blockly.Python はグローバルにアクセス可能です
Blockly.Python['my_plugin_hello'] = function(block) {
return 'print("Hello from Plugin!")\n';
};
}
}既存のカテゴリにブロックを追加するだけでなく、独自のカテゴリを作成することも可能です。
onload 内で script タグを動的に生成することで、外部 JS ライブラリを読み込めます。ただし、セキュリティ上の理由から推奨されません。
GitHub リポジトリのトピックに edbp-plugin を追加してください。
EDBP の「GitHub で探す」機能で自動的にクロールされるようになります。
公式チームによる審査を通過すると「公認」バッジが付与されます。 公認を受けたプラグインは、共有URL機能において制限なく利用できるようになります。
isCustom: trueに設定されている場合、セキュリティ保護のためそのプラグインを含むプロジェクトの「共有」が制限されることがあります。- ユーザーのトークンを外部に送信するような悪意のあるコードは、発見次第ブラックリストに登録され、実行がブロックされます。
EDBP のプラグイン検索では、以下のコマンドを使用することで高度なフィルタリングが可能です。
| コマンド | 説明 | 例 |
|---|---|---|
tag: |
指定したタグ(トピック)で検索します。 | tag:utility |
author: |
特定の開発者のプラグインを検索します。 | author:YourName |
badge: |
バッジ(信頼レベル)でフィルタリングします。 | badge:公式, badge:公認, badge:使用不可 |
※複数のコマンドを組み合わせて使用することも可能です(例: tag:utility badge:公式)。