コマンドビルダー

コマンドビルダーの概要と使い方

コマンドビルダーは、ブロック(ノード)を線でつなぐだけで、プログラミングの知識がなくてもオリジナルのスラッシュコマンドを組み立てられるビジュアルエディタです。

コマンドビルダーとは

  • ノード(ブロック) … 1 つひとつの動作や条件を表す箱です。たとえば「メッセージを送信」「ロール付与」「比較による条件分岐」などがあります。
  • エッジ(線) … ノードどうしをつなぐ線です。線でつないだ順番に、上から下へと動作が実行されていきます。

エディタを開く

Bot の「カスタムコマンド」を開く

サイドバー(Bot の詳細画面)から「カスタムコマンド」を開きます。すでに作成済みのコマンドがある場合は、一覧として表示されます。

新しいコマンドの作成を始める

コマンドがまだ 1 つもないときは、画面中央の「最初のコマンドを作成」をクリックします。すでにコマンドがある場合は、一覧の右上にある「新規作成」をクリックします。

無料プランでは作成できるカスタムコマンドの数に上限があります(目安として 3 個まで)。上限に達すると新規作成ができなくなります。

画面の構成

エディタは大きく 4 つの領域でできています。

領域役割
ヘッダー戻る・エディタ設定(歯車)・テーマ切替・コマンド切替セレクター・保存状態の表示・保存ボタン
アイコンストリップ + パネルブロックの一覧や変数・グループ・解析・ログなどのパネルを切り替える
キャンバスノードを置いて線でつなぐ作業スペース
設定パネル選択中のノードの細かい設定を行う(ノードを選ぶと現れる)

コマンド切替セレクター

ヘッダーのセレクターをクリックすると、コマンドの一覧がポップアップで開きます。「コマンドを検索...」で絞り込み、一覧から編集するコマンドを選べます。「新規コマンド」からは新しいコマンドの編集を始められます。

セレクターは画面が狭いとき(スマートフォンなど)には表示されないことがあります。その場合はいったん「戻る」でカスタムコマンド一覧に戻り、目的のコマンドを開き直してください。

左サイドバーの 5 つのパネル

画面左端のアイコンをクリックすると、その内容のパネルが横に開きます。利用できるパネルは「ブロック」「変数」「グループ」「解析」「ログ」の 5 つです。「ブロック」にはコマンドに置けるノードの一覧が、「解析」にはコマンド全体のエラー・警告が、「ログ」にはこの Bot の実行ログが表示されます。

左サイドバーの「画像」「タイミング」「イベント」は近日公開予定です。

ブロックパネルの 4 カテゴリ

「ブロック」パネルのカテゴリは次の 4 つです。

カテゴリ主な内容
「選択」コマンドの入力項目(オプション)。テキスト・数値・ユーザー・ロールなど
「動作」実際の処理。メッセージ送信、ロール付与、チャンネル作成、変数の操作など
「条件」条件によって動きを分ける分岐。確率・比較・ロール・時刻などによる条件分岐
「制御」流れの制御。待機・反復処理(ループ)・反復中断・反復スキップ

タブを切り替えると、そのカテゴリのブロックが小カテゴリ(「メッセージ応答」「ロール操作」など)ごとに並びます。目的のブロックが見つからないときは、上部の「検索...」にブロック名の一部を入力すると一覧を絞り込めます。

ノードの追加方法

ブロックは 2 通りの方法でキャンバスに追加できます。

方法 1: ドラッグ&ドロップで置く

「ブロック」パネルの中の置きたいブロックをつかんで、そのまま中央のキャンバスの好きな位置へドラッグ&ドロップします。

方法 2: クリックで中央に追加する

ブロックを 1 回クリックすると、キャンバスの中央付近にそのノードが追加されます。ドラッグが難しいときに便利です。

1 つのコマンドに置けるノードの数は最大 100 個です。上限を超えるブロックは追加されません。

ノードのつなぎ方

ノードどうしは、ノードの縁にある小さな丸い「接続点(ハンドル)」を線でつないで連結します。

つなぎ元のハンドルから線を引き出す

つなぎ元になるノードのハンドル(多くは下側にあります)にカーソルを合わせ、押したまま次のノードへドラッグします。

つなげられる先で離す

ドラッグ中は、つなげられる相手のハンドルが光ります。光っているハンドルの上でマウスを離すと、2 つのノードが線でつながります。

起点となる 2 つの固定ノード

エディタを開いた時点で、すでに次の 2 つのノードが置かれています。

ノード役割
「スラッシュコマンド」コマンドのスタート地点。ここから線でつないだノードが順番に実行されます
「エラーハンドラー」コマンドの実行中にエラーが起きたときに動く、別の流れのスタート地点

この 2 つのノードは移動・削除ができません。

コマンドの基本の流れは、まず「スラッシュコマンド」ノードを選んで、右パネルでコマンド名と説明を入力するところから始めます(Discord 上で表示されるコマンド名になります)。

ノードの編集

ノードをクリックすると右側に設定パネルが開き、送信するメッセージの内容や対象のロールなど、ノードの動作内容を入力・選択できます。

ノードの複製・削除

選択中のノードは、右パネル下部の「ノードを複製」「ノードを削除」で操作できます。削除は 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 件になっているか確認することをおすすめします。

作ったコマンドが実行されるときの流れ

保存したコマンドは、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 までループのくり返しもステップ数に数えられます。超えると残りの処理がスキップされます

クールダウン

コマンドごとに、連続実行を防ぐクールダウンを設定できます。クールダウンを有効にし、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 の権限による許可リスト・拒否リストの設定方法はコマンド設定にまとめています。

  • コマンドごとの設定がない場合は、カスタムコマンド全体の既定の権限設定が使われます。
  • 管理者権限を持つメンバーは、通常は権限の確認を通り越してコマンドを実行できます(コマンド側で厳格な権限設定を選んだ場合を除きます)。
  • 拒否リストに当てはまると実行できず、許可リストに当てはまると実行できます。

次のステップ / 関連ページ

  • コマンド設定 — コマンド名・クールダウン・権限・エラーハンドラーの設定
  • ストレージ — コマンドで使うデータの保存場所について
  • レベリング — 既製のモジュール機能を使う場合

最終更新:

目次