コマンドビルダーの概要と使い方
コマンドビルダーは、ブロック(ノード)を線でつなぐだけで、プログラミングの知識がなくてもオリジナルのスラッシュコマンドを組み立てられるビジュアルエディタです。「ユーザーがこのコマンドを実行したら → こう動く」という流れを、エディタの開き方から保存までの基本操作とあわせて、画面上で目に見える形で作っていきます。
コマンドビルダーとは
ふつう、Discord の Bot にコマンドを追加するにはプログラムを書く必要があります。コマンドビルダーは、その代わりに「ブロックを置いて、線でつなぐ」という直感的な操作でコマンドの動きを作れるしくみです。
- ノード(ブロック) … 1 つひとつの動作や条件を表す箱です。たとえば「メッセージを送信」「ロール付与」「比較による条件分岐」などがあります。
- エッジ(線) … ノードどうしをつなぐ線です。線でつないだ順番に、上から下へと動作が実行されていきます。
つまり「スラッシュコマンドが実行されたら、まずメッセージを送って、次にロールを付ける」といった流れを、ブロックと線で表現するわけです。
エディタを開く
Bot の「カスタムコマンド」を開く
サイドバー(Bot の詳細画面)から「カスタムコマンド」を開きます。すでに作成済みのコマンドがある場合は、一覧として表示されます。
新しいコマンドの作成を始める
コマンドがまだ 1 つもないときは、画面中央の「最初のコマンドを作成」をクリックします。すでにコマンドがある場合は、一覧の右上にある「新規作成」をクリックします。
無料プランでは作成できるカスタムコマンドの数に上限があります(目安として 3 個まで)。上限に達すると新規作成ができなくなります。
エディタが開く
エディタは、最初から「スラッシュコマンド」ノードと「エラーハンドラー」ノードが配置された状態でスタートします。
画面の構成
エディタは大きく 4 つの領域でできています。
| 領域 | 位置 | 役割 |
|---|---|---|
| ヘッダー | 画面上部 | 戻る・設定・テーマ切替・コマンド切替・保存などの操作 |
| アイコンストリップ + パネル | 画面左 | ブロックの一覧や変数・グループ・解析・ログなどのパネルを切り替える |
| キャンバス | 画面中央 | ノードを置いて線でつなぐ作業スペース |
| 設定パネル | 画面右 | 選択中のノードの細かい設定を行う(ノードを選ぶと現れる) |
上部ヘッダーの操作
ヘッダーには、左から順に次の操作が並んでいます。
| 場所 | アイコン / 表示 | できること |
|---|---|---|
| 左 | 戻る(矢印) | 1 つ前の画面(カスタムコマンド一覧など)へ戻ります |
| 左 | エディタ設定(歯車) | 「設定」モーダルを開き、グリッドや背景などの表示設定を変更します |
| 左 | テーマ切替 | ライト / ダークの見た目を切り替えます |
| 中央 | コマンド切替セレクター | 編集するコマンドを選び直したり、新しいコマンドへ移動したりします |
| 右 | 最終保存の表示 | 保存の状態を文字で表示します |
| 右 | 保存(フロッピー) | 編集内容を保存します |
コマンド切替セレクター
ヘッダー中央のセレクターをクリックすると、コマンドの一覧がポップアップで開きます。
- 上部の「コマンドを検索…」に文字を入力すると、コマンドを絞り込めます。
- 一覧からコマンドを選ぶと、そのコマンドの編集画面へ切り替わります。
- 「新規コマンド」をクリックすると、新しいコマンドの編集を始められます。
コマンド切替セレクターは画面が狭いとき(スマートフォンなど)には表示されないことがあります。その場合はいったん「戻る」でカスタムコマンド一覧に戻り、目的のコマンドを開き直してください。
最終保存の表示と保存状態
保存ボタンの左の表示は、保存状態に応じて次のように変わります。
| 表示 | 意味 |
|---|---|
| 「変更なし」 | まだ何も編集していない、または保存済みで変更がない状態 |
| 「最終保存: たった今」(「○分前」など) | 最後に保存してからの経過時間 |
| 「未保存の変更」 | 保存していない編集がある状態 |
左サイドバーの 5 つのパネル
画面左端のアイコンをクリックすると、その内容のパネルが横に開きます。利用できるパネルは次の 5 つです。
| アイコンのラベル | 内容 |
|---|---|
| 「ブロック」 | コマンドに置けるブロック(ノード)の一覧 |
| 「変数」 | コマンドで使う変数の管理 |
| 「グループ」 | ノードをまとめるグループの管理 |
| 「解析」 | コマンド全体のエラー・警告の確認 |
| 「ログ」 | この Bot の実行ログの確認 |
「解析」アイコンには、未解決のエラーや警告があるときに件数のバッジ(赤または黄色の小さな丸)が付きます。
左サイドバーの「画像」「タイミング」「イベント」は近日公開予定です。現在はうすく表示され、クリックできません。
ブロックパネルの 4 カテゴリ
「ブロック」パネルのカテゴリは次の 4 つです。
| カテゴリ | 主な内容 |
|---|---|
| 「選択」 | コマンドの入力項目(オプション)。テキスト・数値・ユーザー・ロールなど |
| 「動作」 | 実際の処理。メッセージ送信、ロール付与、チャンネル作成、変数の操作など |
| 「条件」 | 条件によって動きを分ける分岐。確率・比較・ロール・時刻などによる条件分岐 |
| 「制御」 | 流れの制御。待機・反復処理(ループ)・反復中断・反復スキップ |
タブを切り替えると、そのカテゴリのブロックが小カテゴリ(「メッセージ応答」「ロール操作」など)ごとに並びます。目的のブロックが見つからないときは、上部の「検索…」にブロック名の一部を入力すると一覧を絞り込めます。該当がない場合は「検索結果がありません…」と表示されます。
ノードの追加方法
ブロックは 2 通りの方法でキャンバスに追加できます。
方法 1: ドラッグ&ドロップで置く
「ブロック」パネルの中の置きたいブロックをつかんで、そのまま中央のキャンバスの好きな位置へドラッグ&ドロップします。
方法 2: クリックで中央に追加する
ブロックを 1 回クリックすると、キャンバスの中央付近にそのノードが追加されます。ドラッグが難しいときに便利です。
1 つのコマンドに置けるノードの数には上限があります(最大 100 個)。上限を超えるブロックを追加しようとすると、画面にお知らせが表示され、追加はキャンセルされます。
ノードのつなぎ方
ノードどうしは、ノードの縁にある小さな丸い「接続点(ハンドル)」を線でつないで連結します。
つなぎ元のハンドルから線を引き出す
つなぎ元になるノードのハンドル(多くは下側にあります)にカーソルを合わせ、押したまま次のノードへドラッグします。
つなげられる先が光る
線をドラッグしている間、つなげられる相手のハンドルが点滅(パルス表示)します。光っている場所が有効な接続先です。
つなぎ先のハンドルで離す
光っているハンドルの上でマウスを離すと、2 つのノードが線でつながります。
線でつないだ順序が、コマンドが実行されたときの動作の順番になります。
起点となる 2 つの固定ノード
エディタを開いた時点で、すでに次の 2 つのノードが置かれています。
| ノード | 役割 |
|---|---|
| 「スラッシュコマンド」 | コマンドのスタート地点。ここから線でつないだノードが順番に実行されます |
| 「エラーハンドラー」 | コマンドの実行中にエラーが起きたときに動く、別の流れのスタート地点 |
「スラッシュコマンド」ノードと「エラーハンドラー」ノードは移動・削除ができません。
コマンドの基本の流れは、まず「スラッシュコマンド」ノードを選んで、右パネルでコマンド名と説明を入力するところから始めます(Discord 上で表示されるコマンド名になります)。
ノードの編集
ノードの細かい設定は、右側の設定パネルで行います。
ノードをクリックする
キャンバス上のノードを 1 回クリックして選択します。
右パネルで設定する
右側の設定パネルで、送信するメッセージの内容や対象のロールなど、ノードの動作内容を入力・選択します。
別の場所をクリックして閉じる
キャンバスの何もない場所をクリックすると、設定パネルが閉じます。
ノードの複製・削除
選択中のノードは、右パネルの下部にあるボタンから操作できます。
| 操作 | 方法 |
|---|---|
| 複製 | 右パネル下部の「ノードを複製」をクリックする |
| 削除 | 右パネル下部の「ノードを削除」をクリックする、またはノードを選んで Delete キーを押す |
「スラッシュコマンド」「エラーハンドラー」などの固定ノードや、条件分岐・ループに自動で付いてくる枝(分岐の合流点など)は、単独では複製・削除できません。これらのボタンがクリックできない(うすく表示される)場合は、その種類のノードが対象であることを意味します。条件分岐やループの親ノードを削除すると、それに付いている枝もまとめて削除されます。
やり直し操作
操作を間違えたときは、キーボードショートカットで元に戻したり、やり直したりできます。
| ショートカット | できること |
|---|---|
Ctrl + Z | 直前の操作を元に戻す |
Ctrl + Y(または Ctrl + Shift + Z) | 元に戻した操作をやり直す |
Mac をお使いの場合は Ctrl の代わりに Command キーでも操作できます。
キャンバスの操作
中央のキャンバスは自由に拡大・移動できます。
- ズーム … マウスホイールや、キャンバス上のコントロールボタンで拡大・縮小します。
- 移動(パン) … 何もない場所をドラッグすると、表示範囲を動かせます。
- ノードを整列 … キャンバス右上のコントロールにある「ノードを整列」ボタンをクリックすると、ノードが自動で見やすく並べ直されます。条件分岐は「条件が成立したときの枝」「成立しなかったときの枝(Else)」「合流点」の順に左から右へ整列します。
グリッドと背景の設定
ヘッダーの歯車アイコンから開く「設定」モーダルで、キャンバスの表示を細かく調整できます。グリッドや背景のほか、ミニマップやノードの説明文を表示するかどうかも切り替えられます。
| 設定項目 | 内容 | 初期値 |
|---|---|---|
| 「グリッドにスナップ」 | オンにすると、ノードを動かしたときに格子(グリッド)に吸着します | オフ |
| 「ミニマップを表示」 | オンにすると、キャンバス右下にミニマップを表示します(PC のみ) | オン |
| 「ノードの説明を表示」 | オンにすると、各ノードカード内の説明文を表示します | オン |
| 「グリッド間隔 (px)」 | スナップする間隔。1〜100 の範囲 | 15 |
| 「背景スタイル」 | キャンバスの背景パターン。「ドット」「実線グリッド」「十字」「無背景」から選択 | ドット |
| 「背景の間隔 (px)」 | 背景パターンの間隔。4〜200 の範囲 | 15 |
| 「背景の不透明度」 | 背景パターンの濃さ(0〜100%) | 100% |
| 「初期ズーム倍率」 | キャンバスを開いたときの最大ズーム倍率。0.2〜3 の範囲 | 1.0 |
設定し終えたら、モーダル下部の「閉じる」をクリックします。
「設定」モーダルの下部には「デンジャーゾーン」があり、「すべてのノードを削除」ボタンが置かれています。これをクリックすると初期ブロック以外のすべてのノードと線が削除されます(確認のうえ実行されます)。誤ってクリックしないよう注意してください。
保存と未保存警告
編集した内容は、ヘッダー右側の保存ボタン(フロッピーのアイコン)をクリックすると保存されます。
- 未保存の編集があるときは、保存ボタンの右上に赤い丸が付きます。表示も「未保存の変更」に変わります。
- 保存に成功すると赤い丸は消え、「最終保存: たった今」と表示されます。
保存せずにページを離れようとすると警告が表示されます。保存ボタンに赤い丸が付いているときは未保存の変更があります。警告では「保存されていない変更があります。保存せずに移動すると変更内容は失われます。本当によろしいですか?」と確認され、「破棄して移動」をクリックすると変更を捨てて移動、「キャンセル」をクリックするとエディタに留まります。
解析パネルでエラー・警告を確認する
コマンドを作っている途中で、設定の不足や問題がないかを「解析」パネルで確認できます。
「解析」アイコンを開く
左のアイコンストリップで「解析」をクリックしてパネルを開きます。
エラーと警告の件数を見る
パネル上部に「エラー」(赤)と「警告」(黄色)の件数バッジが表示されます。エラーは必ず直すべき問題、警告は確認しておきたい注意点の目安です。
問題のあるノードを確認する
エラー・警告があるノードが一覧で表示されます。問題がまったくないときは「検出された問題はありません。」と表示されます。
解析にエラーが残っていると、コマンドが正しく動かない原因になります。保存する前に、エラーが 0 件になっているか確認することをおすすめします。
操作の流れ(まとめ)
コマンドを新規作成してエディタを開く
サイドバーから「カスタムコマンド」を開き、「新規作成」または「最初のコマンドを作成」をクリックします。
スラッシュコマンドの名前と説明を入力する
起点の「スラッシュコマンド」ノードをクリックし、右パネルでコマンド名と説明を入力します。
ブロックを探して追加する
左の「ブロック」パネルでカテゴリ(「選択」「動作」「条件」「制御」)を切り替えるか「検索…」を使ってブロックを探し、キャンバスへドラッグ&ドロップするか、クリックして中央に追加します。
ノードを線でつなぐ
ノードのハンドルから次のノードへ線をドラッグし、光った接続先で離してつなぎます。
各ノードを設定する
ノードをクリックして、右パネルで動作内容を設定します。
間違えたらやり直す
操作を間違えたら Ctrl + Z で元に戻し、Ctrl + Y でやり直します。
解析でエラー・警告を確認する
左の「解析」パネルで、エラー(赤)・警告(黄色)がないかを確認します。
保存する
ヘッダー右上の保存ボタンをクリックして保存します。赤い丸が消えれば保存完了です。
作ったコマンドが実行されるときの流れ
保存したコマンドは、Discord 上でスラッシュコマンドとして実行できるようになります。ユーザーがコマンドを実行すると、Bot は「スラッシュコマンド」ノードを起点に、線でつないだノードを順番にたどっていきます。
コマンドの受け付け
ユーザーがスラッシュコマンドを実行すると、Bot は応答の準備に入ります。返信が用意できるまで「考え中」の状態でいったん受け付けます。
クールダウンと権限の確認
クールダウンが設定されている場合は、まずその確認が行われます。続いて、コマンドを実行する権限があるかどうかが確認されます。どちらかで止められた場合、コマンドの中身は実行されません(後述のメッセージが本人だけに表示されます)。
ノードを順番にたどる
「スラッシュコマンド」ノードから線をたどって、各ノードが上から順に実行されます。条件分岐では成立した枝へ進み、ループでは中身が指定回数くり返されます。メッセージ送信やロール付与などの動作は、たどり着いた順に実行されます。
完了または中断
すべてのノードを実行し終えると完了です。途中でエラーや上限に達した場合は、本人だけに表示されるメッセージで知らされ、その時点で処理が止まります。
ノードを実行する順番は、ブロックを置いた順や保存した順ではなく、線のつながり方で決まります。エディタ上での見た目の位置に関係なく、つないだ経路に沿って実行されるため、意図した順番になるように線でつなぐことが大切です。
条件分岐(If)の動き
条件ブロックは、つないだ枝のうち成立した方へ進みます。動き方には次のような特徴があります。
- 条件が成立すると「成立したときの枝」へ、成立しなければ「成立しなかったときの枝(Else)」へ進みます。
- 分岐の合流点(条件のあとに必ず通る枝)は、どちらの枝を通ったあとでも実行されます。
- 確率による分岐(チャンス)を複数並べた場合は、それぞれに設定した確率(0〜100%)に応じて、どれか 1 つがくじ引きのように選ばれます。確率の合計が 100% に満たないときは、残りの割合のぶんだけ「成立しなかったときの枝(Else)」へ進みます。つまり、確率分岐だけで作ると、同じコマンドを実行しても結果が毎回変わることがあります。
- 条件の判定中に問題が起きた場合は、その条件は「成立しなかった」ものとして扱われ、コマンド全体が止まらないようになっています。
ループ(反復処理)の動き
ループブロックは、中身を指定した回数だけくり返します。
- くり返しの中では、回数を表す値を変数として参照できます。今が何回目かを表す
{ループ変数.count}(1 から数えた回数)と{ループ変数.index}(0 から数えた番号)が使えます。 - くり返し回数が 0 以下や正しく数値にならない値だった場合は、中身は実行されず、ループのあとの流れへ進みます。
- ループの中身は順番に実行され、メッセージ送信などの結果がくり返しのぶんだけ積み重なります。
ボタン・選択メニューを付けたメッセージ
メッセージ送信ブロックにボタンや選択メニューを付けると、そのメッセージは「ユーザーの操作を待つ」状態になります。
- ユーザーがボタンをクリックしたり、選択メニューを選んだりすると、その操作に対応する枝へ進みます。選択メニューの選択結果は変数として受け取れます。
- 一定時間ユーザーが操作しなかった場合は、ボタンや選択メニューが押せない状態(うすい表示)になり、その先の処理は進みません。
上限とクールダウン
作ったコマンドが無限に動き続けたり、重くなりすぎたりしないように、実行時にはいくつかの上限が設けられています。
| 項目 | 値 | 補足 |
|---|---|---|
| コマンド名の文字数 | 3〜50 文字 | 使える文字は半角英数字とハイフン・アンダースコア・ドットです |
| コマンドの説明 | 最大 100 文字 | これを超えると切り詰められます |
| 1 つのメッセージに付けられる埋め込み | 最大 10 個 | Discord の上限です。超えたぶんは送られません |
| ループのくり返し回数 | 最大 100 回 | これを超える回数を指定しても 100 回に抑えられます |
| 待機ブロックの待ち時間 | 最大 25 秒 | これを超える時間を指定しても 25 秒に抑えられます |
| コマンド全体の実行時間 | 30 秒 | これを超えるとタイムアウトして中断されます |
| 1 回の実行で処理できるステップ数 | 5000 まで | ループのくり返しもステップ数に数えられます。超えると残りの処理がスキップされます |
これらの上限は、1 回の実行が長くなりすぎたり止まらなくなったりするのを防ぐためのものです。たとえばループを 100 回くり返しても、ステップ数の上限(5000)には余裕がある設計になっています。複雑なコマンドを作るときは、待機が長すぎないか、ループの中で重い処理をくり返していないかを意識すると安定して動きます。
クールダウン
コマンドごとに、連続実行を防ぐクールダウンを設定できます。
- クールダウンは「クールダウンを有効にする」設定をオンにし、時間(0 より大きい値)を指定したときだけ有効になります。単位は秒・分・時間から選べます。
- クールダウンはユーザーごと・コマンドごとに管理されます。誰かが実行しても、ほかのユーザーのクールダウンには影響しません。
- クールダウン中のユーザーが実行しようとすると、残り時間が秒単位で知らされ、コマンドは実行されません。
- クールダウンは Bot の再起動までの一時的なものです(再起動するとリセットされます)。
オプション(入力項目)の扱い
コマンドに入力項目(オプション)を付けると、ユーザーは実行時に値を入力できます。入力された値は、メッセージや条件の中で変数として使えます。
- ユーザーが入力した値は、設定した初期値より優先されます。
- 必須でない項目をユーザーが入力しなかった場合、初期値を設定していればその値が使われます。初期値もない場合は空の値として扱われます。
- ユーザー・ロール・チャンネル・添付ファイルを受け取る項目は、それぞれ名前やメンション、ID などの情報を持つまとまり(オブジェクト)として扱われ、
{項目名.mention}・{項目名.name}・{項目名.id}のように個別の情報を取り出せます。メッセージ内では、ユーザーのメンションは<@ユーザーID>、ロールは<@&ロールID>、チャンネルは<#チャンネルID>の形で表示されます。 - 選択肢(候補から選ぶ項目)に同じ値を重複して登録した場合は、最初の 1 つだけが残り、重複は自動的に取り除かれます。
変数の扱い
コマンドの中では、一時的に値を覚えておく変数を使えます。
- 変数の作成・更新は、変数を設定するブロックで行います。同じ名前で設定し直すと、前の値は上書きされます。
- 計算結果を変数に入れることもできます。メッセージの中で
{変数名}のように書くと、その値が差し込まれて表示されます。 - 永続変数(
BSVAR_で始まる、保存され続ける変数)は、コマンドの実行開始時点の値が読み取り専用で使えます。コマンドの実行中に永続変数を新しく作ることはできません。 - メッセージや式の中で存在しない変数を参照した場合は、エラーで止まるのではなく空の値として扱われ、処理は続きます。
表示されるメッセージ
コマンドが実行されなかったときや、途中で止まったときには、本人にだけ見えるメッセージ(他の人には見えません)で理由が知らされます。Bot が表示する文言は次のとおりです。
| 状況 | 表示されるメッセージ |
|---|---|
| 実行する権限がないとき | Botの権限設定により、このコマンドを実行する権限がありません。 |
| クールダウン中のとき | クールダウン中です。あと {remaining:.0f}秒 お待ちください。({remaining:.0f} の部分に残り秒数が入ります) |
| 処理が複雑すぎて上限に達したとき | ⛔ コマンドが複雑すぎます (ステップ上限 {MAX_STEPS} 到達)。一部処理がスキップされました。({MAX_STEPS} の部分に上限値が入ります) |
| 実行時間が上限を超えたとき | コマンドの実行がタイムアウトしました。 |
| コマンドが利用できないとき | このコマンドは利用できません。 |
| 実行中に予期しないエラーが起きたとき | コマンドの実行中にエラーが発生しました。 |
メッセージ送信ブロックでも、メッセージを「本人にだけ見える(エフェメラル)」設定にできます。本人にだけ見える設定で送ったメッセージは、しばらく(約 15 秒)で自動的に消えます。一方、上の表のようなエラーやクールダウンの通知は、設定にかかわらず常に本人にだけ表示されます。
注意点・うまくいかないとき
実行時にうまく動かないときは、次の点を確認してみてください。
- 無効化したコマンドは実行できません。 コマンドを無効にすると、Discord のスラッシュコマンド一覧から外れます。無効にしたコマンドが実行された場合は
このコマンドは利用できません。と表示されます。 - 実行順は線のつながりで決まります。 ノードがどこに置かれているかではなく、線でどうつながっているかで実行順が決まります。どこからも線がつながっていない孤立したノードは、実行されません。
- 30 秒以内に終わるように作ります。 待機ブロックを長く入れすぎたり、ループの中で重い処理を多くくり返したりすると、上限を超えてタイムアウトすることがあります(上の上限表も踏まえて組み立ててください)。
- 確率分岐は結果が毎回変わります。 チャンスによる分岐を使うと、同じコマンドでも実行のたびに通る枝が変わります。意図した割合になっているか確認してください。
- 権限はサーバー内でのみ判定されます。
- 式の計算でエラーが起きたときは、その部分は計算されずに書いたままの文字として残り、コマンド全体は止まらずに続きます。意図した値が表示されないときは、式の書き方を見直してください。
現在はベータ版のため、本来プレミアムが必要な機能も含め、すべての機能をすべてのユーザーが無料で利用できます(全員にプレミアムが付与されている状態です)。無料プランとプレミアムで上限差がある挙動も、ベータ期間中はゆるやかな上限で利用できます。
コマンドの実行権限
作ったコマンドを誰が実行できるかは、コマンドごとに細かく決められます。
- コマンドごとに権限を設定でき、設定がない場合はカスタムコマンド全体の既定の権限設定が使われます。
- 管理者権限を持つメンバーは、通常は権限の確認を通り越してコマンドを実行できます(コマンド側で厳格な権限設定を選んだ場合を除きます)。
- 権限は、ロールや Discord の権限による「許可リスト」「拒否リスト」で指定できます。拒否リストに当てはまると実行できず、許可リストに当てはまると実行できます。
- 権限がないユーザーが実行しようとすると
Botの権限設定により、このコマンドを実行する権限がありません。と表示され、コマンドは実行されません。