Skip to Content
コマンドビルダーノードの種類リファレンス

ノードの種類リファレンス

コマンドビルダーで使えるすべてのブロック(ノード)を、カテゴリ別に一覧でまとめました。各ノードの名前・役割・どのカテゴリにあるかが一目で分かります。「このコマンドではどのブロックを置けばいいの?」と迷ったときの早見表としてお使いください。

ここで紹介するのは正式なノード名です。ノードを使った具体的な組み立て方(つなぎ方や設定の入力)は、各機能のページやコマンドビルダーの基本もあわせてご覧ください。

ノードの全体像

コマンドビルダーの画面左側には「ブロック」パネルがあり、ここにノードがカテゴリ別に並んでいます。カテゴリは4つのタブに分かれます。

カテゴリタブ役割主な色
「選択」コマンドに渡す入力(オプション)を定義します青系
「動作」Bot に実際の処理を行わせます(メッセージ送信、ロール付与など)青系/濃い紫(変数操作)
「条件」状況に応じて処理を分岐させます紫系
「制御」待機やくり返しなど、処理の流れをコントロールします黄/水色など

このほかに、パネルには並ばないものの自動的に登場するノードがあります。

  • 起点ノード: キャンバスに最初から置かれている「スラッシュコマンド」と「エラーハンドラー」。
  • 構造ノード: 条件分岐やくり返しを追加すると自動で生まれる「Else(それ以外)」「条件後」「ループ本体」「ループ後」。
  • コンポーネント: 「メッセージを送信」ノードに後から付け足す「ボタン」「選択メニュー」。

ノードの探し方・追加のしかた

カテゴリタブを切り替える

「ブロック」パネル上部のカテゴリタブをクリックして、目的のノードがあるカテゴリに切り替えます。各カテゴリの中はさらに「メッセージ応答」「ロール操作」などのグループに分かれて並んでいます。

キーワードで絞り込む

ノードが多くて探しにくいときは、パネル上部の「検索…」欄にキーワードを入力します。名前に一致するノードだけが表示されます。該当がない場合は「検索結果がありません…」と表示されます。

キャンバスに追加する

見つけたノードを、右側のキャンバスへドラッグ&ドロップするか、クリックして追加します。追加したノード同士を線でつないで流れを作ります。

起点ノード(最初から置かれているノード)

これらは新しいコマンドを開いたときにキャンバスに自動で置かれています。削除したり移動したりはできません。すべてのコマンドの土台になるノードです。

ノード名役割
「スラッシュコマンド」コマンドの入口です。「選択」「動作」「条件」からブロックをドラッグ&ドロップし、つなぐことでコマンドを組み立てます。キャンバスに1つだけ存在します。
「エラーハンドラー」コマンドの処理中にエラーが起きたときに動く、もう一つの起点です。下流につないだノードでエラー時の応答を組み立てられます。コマンドごとに自動で1つ用意されます。

「エラーハンドラー」は、エラー応答を実行した本人だけに見せるかどうかを設定できます。エラー時に出すメッセージなどは、このノードの下にさらにノードをつないで組み立てます。

「選択」カテゴリ(オプションノード)

コマンドを実行するときにユーザーから受け取る入力(パラメータ)を定義するノードです。「スラッシュコマンド」ノードにのみつなげます。全部で8種類あります。受け取った値は、後続のノードから変数として参照できます。

ノード名受け取るもの
「テキストオプション」テキスト(文字列)の入力を受け取ります。
「添付ファイルオプション」添付ファイルを受け取ります。
「チャンネルオプション」チャンネルの選択を受け取ります。
「選択オプション」あらかじめ用意した選択肢の中から1つを選ばせて受け取ります。
「真偽値オプション」「はい」または「いいえ」を受け取ります。
「数値オプション」数値の入力を受け取ります。
「ロールオプション」選択されたロールを受け取ります。
「ユーザーオプション」選択されたユーザーを受け取ります。

左パネルでは短い名前(「テキスト」「ユーザー」など)で並んでいますが、いずれもキャンバスに置くと「テキストオプション」「ユーザーオプション」といった正式名で表示されます。

「動作」カテゴリ(アクションノード)

Bot に実際の処理を行わせるノードです。最も種類が多く、用途別のグループに分かれています。

メッセージ応答

ノード名役割
「メッセージを送信」Bot がメッセージ(プレーンテキスト&埋め込み)を送信します。
「モーダルを送信」Bot がモーダル(入力フォーム)をユーザーに表示し、入力された値を変数に受け取ります。

「モーダルを送信」について

設定パネルには「モーダルの送信設定」と表示されます。実行者にポップアップの入力フォーム(モーダル)を出して、入力された値を変数として後続のノードで使えるようにするノードです。アンケートや応募フォーム、設定ウィザードのように、スラッシュコマンドの「選択」(オプション)だけでは足りない複数項目の入力を受け取りたいときに使います。

  • 表示するタイミング(起動経路)は2通りです。コマンドの最初のアクションに置くと、コマンド実行の最初の応答としてモーダルが開きます。フローの途中では、「ボタン」を押したときにモーダルを開くこともできます。
  • 入力フィールドは1つのモーダルにつき最大5個まで置けます。フィールドの種別は「テキスト入力」のほか、「選択メニュー(固定の選択肢)」「ユーザー選択(Discord)」「ロール選択(Discord)」「メンション選択(ユーザー/ロール)」「チャンネル選択(Discord)」「ラジオボタン(単一選択)」から選べます。各フィールドには必須かどうか、案内文、初期値などを設定できます。
  • 入力された値はフィールドごとの変数名で受け取れます。後続のノードからは変数名で参照し、メッセージ送信やロール付与などの処理にそのまま使えます。

フィールドの種別ごとの詳しい設定や、モーダルビルダーの使い方は動作(アクション)ノードの「モーダルを送信」をご覧ください。なお、表示したモーダルをユーザーがキャンセル(閉じる)した場合は何も処理されません(後述の「注意点・うまくいかないとき」も参照)。

メッセージ操作

ノード名役割
「メッセージをピン止めする」Bot が特定のメッセージをピン止めします。
「メッセージにリアクションをする」Bot が特定のメッセージにリアクションをします。
「メッセージを編集」Bot が送信した特定のメッセージを編集します。
「メッセージを削除」特定のメッセージを削除します。
「メッセージの消去」チャンネル内のメッセージをまとめて削除します。

API操作

ノード名役割
「APIリクエストを行う」外部の API に HTTP リクエストを行います。
「IFTTTトリガーを実行する」外部の IFTTT サービスのトリガーを実行します。

チャンネル操作

ノード名役割
「チャンネルを作成」Bot がチャンネルを作成します。
「チャンネルを編集」Bot が特定のチャンネルを編集します。
「チャンネルを削除」Bot が特定のチャンネルを削除します。

ロール操作

ノード名役割
「ロールを付与」Bot が特定のユーザーにロールを付与します。
「ロールをはく奪」Bot が特定のユーザーのロールをはく奪します。
「ロールを作成」Bot がサーバーでロールを作成します。
「ロールを削除」Bot がサーバー上のロールを削除します。
「ロールを編集」Bot がサーバー上のロールを編集します。

サーバー操作

ノード名役割
「メンバーのBan」Bot が特定のメンバーをサーバーから Ban します。
「メンバーのKick」Bot が特定のメンバーをサーバーから Kick します。
「メンバーのTimeout」Bot が特定のメンバーをサーバーで Timeout します。
「メンバーのニックネーム編集」Bot が特定のメンバーのニックネームを編集します。
「インスタント招待の作成」Bot がサーバーのインスタント招待(招待リンク)を作成します。

変数操作

ここだけは色が濃い紫で、ほかの動作ノードと区別されています。コマンドの中で値を一時的に覚えたり計算したりするためのノードです。

ノード名役割
「変数を設定」指定した名前の変数に値(式も可)を代入します。後続ノードから変数名で参照できます。
「変数に演算を適用」既存の変数に対して演算(加減乗除/連結)を適用し、結果で上書きします。
「変数を削除」指定した永続変数の値を空にリセットします。

配列操作

配列(Array)型の変数を出し入れするためのノードです。対象には、BSVAR_ で始まる永続変数と、コマンド内のローカル変数のどちらも指定できます。対象変数名を入力するときは { } を付けず、名前だけを入力してください。

ノード名役割
「配列に追加」配列変数の末尾に要素を1つ追加します。
「配列から取り出し」配列変数の末尾の要素を取り除きます。取り除いた要素は、任意のローカル変数に退避できます(空欄なら破棄)。
「配列を更新」配列変数の指定した添字の要素を、新しい値で上書きします。範囲外の添字は無視されます。
「配列に挿入」配列変数の指定した添字の前に要素を挿入します。
「配列から削除」配列変数の指定した添字の要素を取り除きます。範囲外の添字は無視されます。
「配列を空にする」配列変数を空の配列にリセットします。

添字は0始まりで指定します。負の添字を入れると末尾から数えます。「配列から取り出し」の退避先や、配列操作で参照できる {変数名.length}(要素数)・{変数名.first}(先頭要素)などの記法については変数の使い方を参照してください。

乱数

ランダムな値を生成して、結果をローカル変数に格納するノードです。生成した値は後続ノードから {結果変数名} で参照できます。

ノード名役割
「乱数(数値)」指定した範囲(最小値〜最大値)の乱数を1回だけ生成します。整数・小数を切り替えられます。
「配列から抽選」配列変数からランダムに要素を抽選します。個数が1なら単一の要素、2以上なら配列を返します。

変数のしくみや使い方(参照のしかた、永続変数とコマンド内変数の違いなど)は、専用ページにまとめています。あわせて変数の使い方もご覧ください。

「条件」カテゴリ(条件ノード)

状況に応じて処理を分岐させるノードです。全部で7種類あります。条件を設定して追加すると、後述の「Else(それ以外)」「条件後」ノードがいっしょに自動生成されます。

ノード名役割
「確率による条件分岐」設定した確率(0〜100)で、動作がトリガーされるかどうかを分岐します。
「チャンネルによる条件分岐」指定したチャンネルに応じて分岐します。
「比較による条件分岐」二つの値の比較によって分岐します。
「権限による条件分岐」ユーザーが持つ権限によって分岐します。
「ロールによる条件分岐」ユーザーが持つロールによって分岐します。
「ユーザーによる条件分岐」コマンドを実行したユーザーによって分岐します。
「時刻による条件分岐」現在の曜日・時刻・日時によって分岐します。

「制御」カテゴリ(制御ノード)

処理の流れをコントロールするノードです。全部で4種類あります。

ノード名役割
「待機」指定した時間だけ処理を一時停止します。
「反復処理」接続されたブロックを指定した回数だけくり返し実行します。
「反復中断」現在のループを中断して、「ループ後」の処理へ移動します。
「反復スキップ」現在の反復をスキップして、次の反復へ進みます。

「反復中断」と「反復スキップ」は、「反復処理」のくり返しの中(「ループ本体」につながった範囲)でのみ意味を持ちます。ループの外に置いても効果はありません。

自動生成される構造ノード

条件分岐やくり返しを追加すると、自動でいっしょに作られるノードです。これらは流れの合流点や分岐先を表すための「枠」のような存在で、設定項目はほとんどなく、単独では削除できません(親のノードといっしょに削除されます)。

ノード名いつ生まれるか役割
「Else(それ以外)」条件分岐を追加したとき条件に当てはまらなかった場合に進む先です。
「条件後」条件分岐を追加したとき条件分岐(当てはまった側/それ以外の側)の評価がすべて終わった後に実行されます。
「ループ本体」「反復処理」を追加したときここにつないだブロックが、指定した回数くり返し実行されます。
「ループ後」「反復処理」を追加したときくり返しが終わった後に実行されます。「反復中断」で抜けたときもここへ移ります。

これらの構造ノードをつなぐ構造上の線(エッジ)も、手動では消せないようになっています。

メッセージに付くコンポーネント

次の2つは「ブロック」パネルには並びません。「メッセージを送信」ノードの設定から「ボタンを追加」「選択メニューを追加」を選ぶことで、そのメッセージにくっつく形で追加します。

ノード名役割
「ボタン」「メッセージを送信」につなげて使う、クリックできるボタンです。
「選択メニュー」メッセージにドロップダウンの選択メニューを追加します。実行者が選んだ値を後続フローで使えます。

ボタン・選択メニューのコンテキスト変数

「ボタン」「選択メニュー」には、それぞれ設定の最後に「変数名」を入力する欄があります。ここに名前を入れておくと、ボタンが押された・選択メニューが操作されたときの情報が、その名前のローカル変数として後続ノードから参照できるようになります。この変数は object 型で、ドット記法でサブプロパティを取り出します。空欄のままなら変数は作られません(必要なときだけ設定する仕組みです)。

「ボタン」に変数名(例として button)を設定した場合、次のような値を参照できます。押した人・押されたチャンネル・押されたサーバーは、それぞれさらにサブプロパティを持ちます。

参照内容
{button.user}ボタンを押したユーザー({button.user.name} などでさらに細かく参照できます)。
{button.channel}ボタンが押されたチャンネル({button.channel.name} など)。
{button.guild}ボタンが押されたサーバー({button.guild.name} など)。
{button.label}押されたボタンのラベル。
{button.style}ボタンのスタイル(PRIMARY / SECONDARY / SUCCESS / DANGER / LINK)。
{button.disabled}ボタンが無効化されているかどうか。

「選択メニュー」に変数名(例として select)を設定した場合、選ばれた値に加えて、操作した人・チャンネル・サーバーのコンテキストも参照できます。

参照内容
{select.value}選択された値(単一選択時)。
{select.user}選択メニューを操作したユーザー({select.user.name} など)。
{select.channel}操作されたチャンネル({select.channel.name} など)。
{select.guild}操作されたサーバー({select.guild.name} など)。

「選択メニュー」の変数は、以前は選ばれた値そのもの(文字列)を表していましたが、現在は上記のような object になりました。選んだ値は {変数名.value} で取り出します。複数選択したときの選択値の一覧(配列)は今後の対応予定です。

ボタン・選択メニューを押したときの実際の動作

「ボタン」「選択メニュー」は、メッセージに付けて終わりではなく、ユーザーがクリックした瞬間に Bot 側で処理が走ります。ここでは、実行時に何が起きるかを順を追って説明します。

押したときの流れ

クリック・選択を受け取る

ユーザーがボタンをクリックする、または選択メニューから値を選ぶと、Bot がそのコンポーネントを受け取って処理を開始します。コマンドビルダーで作ったコマンドの場合、まず応答が「考え中(thinking)」の状態として一瞬表示され、その後に結果のメッセージが返されます。コマンド内のボタン・選択メニューへの応答は、押した本人にだけ見える形(他の人には見えない応答)で返されます。

押された内容に応じて分岐する

ボタンの場合は「どのボタンが押されたか」、選択メニューの場合は「どの値が選ばれたか」がフローに渡され、つないだ先の処理へ進みます。ボタン・選択メニューに「変数名」を設定しておくと、押下/操作時のコンテキストを後続ノードから参照できます(詳しくは前述の「ボタン・選択メニューのコンテキスト変数」)。複数選択を許可している場合は、選ばれた順番がそのまま保たれます。

続きの処理を実行する

分岐先につないだノード(メッセージ送信、ロール付与など)が実行され、最終的な結果が返されます。

リンク(Link)スタイルのボタンは例外です。これは設定した URL を開くためのボタンで、クリックしても Bot 側の処理は呼び出されません。ページ遷移だけを行います。

選択メニューの単一選択と複数選択

選択メニューは、初期状態では「1つだけ選べる」単一選択になっています。複数選択を有効にすると、選べる個数の下限・上限(0〜25 の範囲)を設定できます。単一選択のときは Discord 側で「ちょうど1つ」に固定されます。

フォームモード(複数の選択をまとめて確定する)

選択メニューには、選ぶたびにすぐ次へ進む通常の動作のほかに、複数のメニューの選択をいったん貯めておき、最後に「確定」ボタンでまとめて反映する「フォームモード」があります。フォームモードでは次のように動きます。

  • 各選択メニューで選んでも、その時点ではフローは止まりません。複数のメニューを自由に選べます。
  • 「確定」ボタンを押すと、貯めておいた選択内容がまとめて変数に反映され、続きの処理へ進みます。
  • 「キャンセル」ボタンを押すと、貯めておいた選択内容は破棄され、変数には反映されません。

フォームモードを使うときは、必ず「確定」または「キャンセル」にあたるボタンをいっしょに置いてください。確定・キャンセルのボタンがないと、選択内容がいつまでも確定されず、最終的にコンポーネントの有効期限(後述)が切れるまで宙ぶらりんになります。

上限とタイムアウト

ボタン・選択メニューには、Discord の仕様やコマンドの実行時間に由来する上限・時間制限があります。設定が上限を超えた場合は、超えた分が自動的に切り詰められます(エラーにはなりません)。

コンポーネントの上限

項目上限
ボタンのラベル80 文字まで
選択メニューのプレースホルダー(未選択時の案内文)150 文字まで
選択メニューの選択肢の数25 個まで
選択肢ごとのラベル・値・説明それぞれ 100 文字まで
複数選択時の選べる個数(下限・上限)0〜25 の範囲

これらの上限は、変数を埋め込んだ文字列が展開された「後」の長さで判定されます。たとえばラベルに変数を入れている場合は、実行時に変数が値へ置き換わった結果が 80 文字を超えると切り詰められます。選択肢が 25 個を超えた分も、静かに切り詰められます。

タイムアウトと自動無効化

項目時間内容
コンポーネントの有効期限約 300 秒(5分)この時間内にボタン・選択メニューが操作されないと、自動的に押せない状態(グレーアウト)になります。
コマンド全体の実行時間最大 30 秒コマンド1回の処理がこの時間を超えると、タイムアウトとして中断されます。

有効期限を過ぎたときの無効化はできる範囲で行われ、特にメッセージへの通知は表示されません(静かに無効化されます)。

コンポーネントの有効期限内であれば、ユーザーは何度でもボタンをクリックできます。クリックのたびに「考え中」の表示が出て、その後に応答が返ります。なお、同じメニュー(view)の中で複数のボタンをほぼ同時に押した場合は、最初の1回だけが確実に処理されます。

押したときに表示されるメッセージ

コマンドの実行中によく表示される、Bot からの定型メッセージです。原文のまま掲載します。

状況表示されるメッセージ
権限が足りずに実行を拒否されたときBotの権限設定により、このコマンド/メニューを実行する権限がありません。
クールダウン中に実行しようとしたときクールダウン中です。あと {remaining:.0f}秒 お待ちください。
コマンドの処理が時間内に終わらなかったときコマンドの実行がタイムアウトしました。
コマンドが見つからない・無効になっているときこのコマンドは利用できません。

クールダウンのメッセージにある {remaining:.0f}秒 の部分には、実際の残り秒数が入ります(例: あと 12秒 お待ちください)。権限拒否やタイムアウトのメッセージは、押した本人にだけ見える形で表示されます。クールダウンに引っかかったときは「考え中」の表示は出ず、すぐにこのメッセージが返ります。

クールダウンと権限

ボタン・選択メニューを含むコマンドにも、実行を制限するしくみがあります。

クールダウン(連続実行の制限)

コマンドごとに、続けて実行できないようにする「クールダウン」を設定できます。

  • クールダウンは各コマンドで個別に設定し、初期状態では無効です。
  • 有効にすると、待ち時間(秒/分/時間の単位で指定)を設定できます。
  • クールダウン中に同じユーザーが実行しようとすると、クールダウン中です。あと {remaining:.0f}秒 お待ちください。 というメッセージが本人にだけ表示され、処理は行われません。
  • クールダウンはすべてのユーザーに同じように適用されます。管理者でも例外なく待ち時間が必要です。

権限チェック

コマンドや右クリックメニュー(コンテキストメニュー)は、実行する前に権限が確認されます。権限が足りない場合は実行されず、Botの権限設定により、このコマンド/メニューを実行する権限がありません。 というエラーが本人にだけ表示されます。権限拒否のときは「考え中」の表示は出ず、すぐにエラーが返ります。

現在はベータ版のため、本来プレミアム向けの機能も含めて全機能を全ユーザーが無料で利用できます(全員にプレミアムが付与されています)。上限に差がある挙動(たとえばメンバー情報の保持数などは、本来は無料とプレミアムで異なります)も、現在はプレミアム相当の緩い上限で利用できます。なお、BotShader AI のみプレビューアクセス権限が必要です。

注意点・うまくいかないとき

ボタン・選択メニューを使うときに気をつけたいポイントです。

  • しばらく操作しないと押せなくなる: ボタン・選択メニューは約 5 分操作されないと自動的に無効化されます。時間が経って押せなくなった場合は、もう一度コマンドを実行してください。
  • 長く待つと反映できないことがある: Discord 側の制限により、最初の操作からおよそ 15 分が過ぎると、Bot が応答やコンポーネントの更新を行えなくなります。フォームモードで「確定」を押さずに放置した場合などは、この時間を過ぎると選択内容が反映されません。
  • 複数同時クリックは最初の1回だけ: 同じメッセージのボタンを連続・同時に押しても、確実に処理されるのは最初の1回です。続けて操作したいときは、応答が返ってから次の操作を行ってください。
  • リンクボタンは処理が走らない: リンクスタイルのボタンは URL を開くだけで、Bot 側の処理(分岐や変数の更新)は呼び出されません。
  • モーダルのキャンセルは何も起きない: 「モーダルを送信」で表示した入力フォームを、ユーザーがキャンセル(閉じる)した場合、Bot 側では何も処理されません。送信されたときだけ続きの処理が動きます。
  • 空の選択メニューは表示されない: 選択肢がすべて取り除かれて空になった選択メニューは、メッセージに表示されません。少なくとも1つは有効な選択肢が必要です。

ノードのアイコンと色の意味

各ノードには役割を表すアイコンと背景色が付いています。

主なノードの種類
青系オプション(「選択」カテゴリ)、基本的な動作(「動作」カテゴリの多く)
濃い紫変数操作(「変数を設定」「変数に演算を適用」「変数を削除」)
紫系条件分岐(「条件」カテゴリ)と、それに伴う「Else(それ以外)」「条件後」
黄系「待機」
水色「反復処理」「ループ本体」「ループ後」
赤系「反復中断」
緑系「反復スキップ」

このページは「どんなノードがあるか」の早見表です。それぞれのノードに何を入力できるか、どうつなぐかといった詳しい操作は、各機能ページで順を追って解説しています。

補足: 整理に使う「グループ」

ノードを視覚的にまとめたいときは「グループ」枠を使えます。これはノードをまとめるための枠で、グループをドラッグすると中のノードもいっしょに動きます。コマンドの実行結果(動作)には影響しません。見やすく整理したいときに活用してください。

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

最終更新: