コマンドビルダー

オプション(コマンド引数)

スラッシュコマンドを使うとき、Discord では /コマンド名 オプション名:値 のように、コマンドに「値」を渡せます。この「値を渡すための入力欄」が**オプション(引数)**です。

たとえば送金コマンドなら「金額」、お知らせコマンドなら「本文」のように、ユーザーがコマンド実行時に入力する内容を受け取れます。受け取った値は変数として、後ろにつないだノードで自由に使えます。

/送金 金額:500 相手:@フレンド

この例では「金額」と「相手」がオプションです。入力された値は、メッセージ本文に差し込んだり、条件分岐や計算に使ったりできます。コマンドの土台となる「スラッシュコマンド」ノードの作り方は、コマンドビルダーの基本をご覧ください。

8 種類のオプション

オプションには、受け取りたい値の種類に応じて 8 種類が用意されています。コマンドビルダー左側のサイドバーで「選択」カテゴリーを開くと、「オプション」グループの中に並んでいます(サイドバーでは「テキスト」のように「オプション」を省いた名前で表示されます)。

ノード名受け取る値値の型デフォルト値
「テキストオプション」自由なテキスト入力文字列設定可(文字列をそのまま入力)
「数値オプション」数値の入力数値設定可(整数なら int、小数なら float として扱われます)
「真偽値オプション」「はい」または「いいえ」真偽値(boolean)設定可(「未設定」「true (オン)」「false (オフ)」から選択)
「選択オプション」あらかじめ用意した選択肢から 1 つ選択肢オブジェクト設定可(定義済みの選択肢から 1 つを選択)
「添付ファイルオプション」ファイルの添付ファイルオブジェクト設定不可
「チャンネルオプション」サーバー内のチャンネル選択チャンネルオブジェクト設定不可
「ロールオプション」サーバー内のロール選択ロールオブジェクト設定不可
「ユーザーオプション」サーバーのメンバー選択ユーザーオブジェクト設定不可

オプションを追加してつなぐ

オプションは、まずキャンバスに追加してから「スラッシュコマンド」ノードへ線でつなぎます。オプションノードの接続点は1 つだけです。

使いたいオプションをキャンバスに追加する

サイドバーの「選択」カテゴリーから、使いたいオプション(例:「テキストオプション」)をキャンバスにドラッグ&ドロップするか、項目をクリックして追加します。

オプションを「スラッシュコマンド」ノードへつなぐ

追加したオプションノードの接続点から、起点の「スラッシュコマンド」ノードへ線をドラッグしてつなぎます。オプションは「スラッシュコマンド」ノードにだけ接続でき、接続して初めてコマンドの引数として登録されます。つながっていないオプションはコマンドに反映されません。

共通の設定項目

どのオプションでも、設定パネルの上部には共通の項目が並びます。設定パネルの一番上には、現在の変数名を使った {変数名} の表示と、それをコピーできるボタンがあります。

設定項目必須説明
「オプション名」必須Discord 上で引数として表示される名前。例: /cmd オプション名:value
「オプション変数」必須コマンドの中でこの値を参照するための変数名。例: option_amount
「オプション説明」任意ユーザーに表示される、この引数の説明文
「必須項目にするかどうか」任意オンにすると、ユーザーは必ずこの値を入力しないとコマンドを実行できなくなります
「デフォルト値」任意入力されなかったときに使われる初期値(対応する種類のみ・必須でないときのみ表示)

新しくオプションを追加したときは、「オプション変数」に option_var_1 のような名前が自動で入ります。そのまま使ってもよいですが、option_amount のように分かりやすい名前に変えておくと、後でフローを組むときに迷いません。

選択オプションの選択肢

「選択オプション」だけは、共通設定に加えて選択肢のリストを設定します。ほかの 7 種類に追加の入力項目はありません。

設定パネルの「選択肢」セクションで「選択肢を追加」をクリックすると、1 件分の入力欄が追加されます。各選択肢には次の項目があります。

項目説明
「選択肢名」ユーザーに表示されるラベル(最大 100 文字)
「値」その選択肢が選ばれたときに変数に格納される値
「値の型」「文字列 (str)」「整数 (int)」「小数 (float)」から選択

不要になった選択肢は、各選択肢のヘッダーにあるごみ箱アイコンをクリックすると削除できます。

「選択オプション」の「デフォルト値」は、追加済みの選択肢の中から選びます。

入力された値を変数で参照する

オプションに入力された値は、「オプション変数」で決めた名前を使って {変数名} の形で後ろのノードから参照できます。

たとえば「オプション変数」を option_amount にしたなら、メッセージ送信ノードの本文に次のように書けます。

受け取った金額は {option_amount} です。

オブジェクト型のオプションのサブプロパティ

ユーザー・ロール・チャンネル・添付ファイル・選択の各オプションは、値が「オブジェクト」になっており、. をつけて中の細かい情報を取り出せます。「オプション変数」が target の場合の例です。

オプション種類参照できる主なサブプロパティ
「ユーザーオプション」{target.id} / {target.name} / {target.mention} / {target.icon.url} ほか
「ロールオプション」{target.id} / {target.name} / {target.mention} / {target.color} / {target.position}
「チャンネルオプション」{target.id} / {target.name} / {target.mention}
「添付ファイルオプション」{target.url} / {target.name} / {target.size} / {target.contentType}
「選択オプション」{target.name}(選んだラベル)/ {target.value}(選んだ値)

テキスト・数値・真偽値のオプションは単純な値なので、サブプロパティはなく {変数名} でそのまま使います。添付ファイルの {target.size} はバイト数で、{target.contentType}(MIME タイプ)はファイルの種類が判別できないときは空文字になります。

値を省略したときとデフォルト値の扱い

必須項目をオフにしたオプションは、ユーザーが値を省略できます。

  • 「デフォルト値」を設定していれば、その値がオプションの型にそろえられて使われます。
  • 「デフォルト値」を設定していなければ、{変数名} には**空文字(空の文字列)**が入ります。

「デフォルト値」の型そろえは、保存時とは別に実行時にも行われます。

  • 「数値オプション」: 3.5 のように入力した文字列は数値として解釈され、3 のような整数になる値は整数として、それ以外は小数として扱われます。
  • 「真偽値オプション」: true / 1 / yes / on(大文字小文字は区別しません)は true に、それ以外は false になります。文字列の 0false になります。
  • ユーザー・ロール・チャンネル・添付ファイルのオプションに「デフォルト値」を入れても無視されます。これらは実行時に Discord 上の対象へ解決される値で、文字列から元のオブジェクトを復元できないためです。

名前の正規化と変数名の自動決定

「オプション名」を英字で付けると、Discord に登録される際に小文字へそろえられ、スペースはアンダースコアに置き換わります(例: My Parammy_param)。日本語などの Unicode 名はそのまま登録され、コマンド入力時の候補にもそのまま表示されます。

「オプション変数」を空のままにすると、変数名は「オプション名」を同じ規則で正規化した名前になります。

上限

オプションそのものに個別の上限・権限・クールダウンはありません。

項目上限
「オプション説明」の長さ100 文字(超えても保存時にエラーにはならず、登録時に先頭 100 文字へ切り詰められます)
「選択オプション」の選択肢の数最大 25 件
テキスト入力の長さDiscord 側の仕様による(おおむね 2000 文字)
添付ファイルのサイズDiscord 側の仕様による(サーバーのブースト状況などで変わります)

クールダウンと実行権限は、個々のオプションではなくコマンド全体にかかり、判定はオプションの処理よりも前に実行されます。設定方法はコマンドの設定、表示されるメッセージはコマンドビルダーの基本をご覧ください。オプション側に一時的な返信(ephemeral)の設定はありません。

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

  • 「オプション名」を空にしたオプションは登録されません。 エラーは出ませんが、そのオプションはコマンドに反映されないので、名前は必ず入力してください。
  • 同じコマンドの中で「オプション名」が重複していると保存できません。 Discord 側で引数名は一意でなければならないためです。重複チェックの対象になるのは「オプション名」だけで、「オプション変数」は対象外です。
  • 「オプション説明」を空にしてもエラーにはなりません。 空のときは自動で代わりの説明文が入り、コマンドは問題なく登録されます。
  • 「選択オプション」で値が重複していると、最初の 1 件だけが残ります。 たとえば数値の 1 と文字列の 1 のように見た目が同じ値を別々の選択肢にすると、後から追加したほうは候補から除かれます。値はそれぞれ別のものにしてください。
  • 「選択オプション」は、選択肢が 1 件もない・「選択肢名」や「値」が空・「値の型」に整数や小数を選んだのに値が数値として正しくない、のいずれかがあると保存できません。 型が合わないときは 値が「整数 (int)」の形式と一致しません。保存できません。 のように表示されます。
  • 「数値オプション」の「デフォルト値」に数値以外を入れると保存できません。 「数値を入力してください。」と表示されます。
  • 必須オプションを空のまま送信することはできません。 Discord の入力画面で This is a required option と表示され、Bot まで届く前に止まります。
  • 必須オプションは、Discord の仕様上、任意オプションより前に並びます。 並び順は Bot 側で自動的にこの規則に合わせて調整されるため、追加した順序とコマンド上の表示順が異なることがあります。

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

最終更新:

目次