オプション(コマンド引数)
スラッシュコマンドを使うとき、Discord では /コマンド名 オプション名:値 のように、コマンドに「値」を渡せます。この「値を渡すための入力欄」が**オプション(引数)**です。
たとえば送金コマンドなら「金額」、お知らせコマンドなら「本文」のように、ユーザーがコマンド実行時に入力する内容を受け取れます。受け取った値は変数として、後ろにつないだノードで自由に使えます。
このページでは、コマンドビルダーでオプションを追加・設定する方法を、画面の操作にそって説明します。
このページは、Bot のコマンドビルダー画面(ダッシュボードで Bot を開き、コマンドを編集する画面)での操作を前提にしています。コマンドの土台となる「スラッシュコマンド」ノードの作り方は、コマンドビルダーの基本をご覧ください。
オプションとは
オプションは、Discord 上でコマンドを入力するときに表示される「引数」です。
/送金 金額:500 相手:@フレンドこの例では「金額」と「相手」がオプションです。ユーザーが入力した値は、メッセージ本文に差し込んだり、条件分岐や計算に使ったりできます。
8 種類のオプション
オプションには、受け取りたい値の種類に応じて 8 種類が用意されています。コマンドビルダー左側のサイドバーで「選択」カテゴリーを開くと、「オプション」グループの中に並んでいます。
| ノード名 | サイドバー表示 | 受け取る値 | 値の型 |
|---|---|---|---|
| 「テキストオプション」 | 「テキスト」 | 自由なテキスト入力 | 文字列 |
| 「数値オプション」 | 「数値」 | 数値の入力 | 数値 |
| 「真偽値オプション」 | 「真偽値」 | 「はい」または「いいえ」 | 真偽値(boolean) |
| 「選択オプション」 | 「選択」 | あらかじめ用意した選択肢から 1 つ | 選択肢オブジェクト |
| 「添付ファイルオプション」 | 「添付ファイル」 | ファイルの添付 | ファイルオブジェクト |
| 「チャンネルオプション」 | 「チャンネル」 | サーバー内のチャンネル選択 | チャンネルオブジェクト |
| 「ロールオプション」 | 「ロール」 | サーバー内のロール選択 | ロールオブジェクト |
| 「ユーザーオプション」 | 「ユーザー」 | サーバーのメンバー選択 | ユーザーオブジェクト |
サイドバー表示の短い名前とノードの正式名は同じものを指します(例:「テキスト」=「テキストオプション」)。
オプションを追加してつなぐ
オプションは、まずキャンバスに追加してから「スラッシュコマンド」ノードへ線でつなぎます。オプションノードの接続点はノードの下側に 1 つだけあり、ここから起点の「スラッシュコマンド」ノードへ向けてつなぎます。
サイドバーの「選択」カテゴリーを開く
コマンドビルダー左側のサイドバーで「選択」カテゴリーを選びます。中の「オプション」グループに 8 種類のオプションが並びます。
使いたいオプションをキャンバスに追加する
使いたいオプション(例:「テキストオプション」)をキャンバスにドラッグ&ドロップするか、項目をクリックして追加します。
オプションを「スラッシュコマンド」ノードへつなぐ
追加したオプションノードの下側にある接続点(緑の丸)から、起点の「スラッシュコマンド」ノードへ線をドラッグしてつなぎます。オプションは「スラッシュコマンド」ノードにだけ接続できます。
オプションは「スラッシュコマンド」ノードに接続して初めてコマンドの引数として登録されます。つながっていないオプションはコマンドに反映されません。
オプションノードをクリックして設定を開く
オプションノードをクリックすると右側に設定パネルが開き、名前や説明などを入力できます(次のセクションで詳しく説明します)。
共通の設定項目
どのオプションでも、設定パネルの上部には共通の項目が並びます。設定パネルの一番上には、現在の変数名を使った {変数名} の表示と、それをコピーできるボタンがあります。
| 設定項目 | 必須 | 説明 |
|---|---|---|
| 「オプション名」 | 必須 | Discord 上で引数として表示される名前。例: /cmd オプション名:value |
| 「オプション変数」 | 必須 | コマンドの中でこの値を参照するための変数名。例: option_amount |
| 「オプション説明」 | 任意 | ユーザーに表示される、この引数の説明文 |
| 「必須項目にするかどうか」 | 任意 | オンにすると、ユーザーは必ずこの値を入力しないとコマンドを実行できなくなります |
| 「デフォルト値」 | 任意 | 入力されなかったときに使われる初期値(対応する種類のみ・必須でないときのみ表示) |
「オプション名」を入力する
Discord でコマンドを入力するときに表示される引数名を入れます。たとえば 金額 と入れると、ユーザーには /送金 金額: の形で表示されます。ツールチップには Discord のスラッシュコマンド引数として表示される名前 (例: /cmd <オプション名>:value)。 と表示されます。
「オプション変数」を入力する
コマンドの中で値を呼び出すための変数名を入れます。たとえば option_amount と入れると、後ろのノードで {option_amount} と書いて入力値を使えます。ツールチップには このオプションの値を参照するための変数名。テンプレートでは {変数名} の形で使用できます (例: option_amount)。 と表示されます。
「オプション説明」を入力する
ユーザー向けの説明を入れます。Discord 上で引数を選んだときのヒントになります。任意項目ですが、入れておくと親切です。
必要なら「必須項目にするかどうか」をオンにする
ユーザーに必ず入力させたい場合はオンにします。オンにすると、後述の「デフォルト値」欄は表示されなくなります。
必須でない場合は「デフォルト値」を設定する
必須にしていない場合、対応する種類のオプションでは「デフォルト値」を設定できます。ユーザーが値を省略したとき、ここで決めた初期値が使われます。
「オプション名」と「オプション変数」の違い
「オプション名」と「オプション変数」はどちらも必須ですが、役割がまったく違います。
| 項目 | 役割 | 表示・使用される場所 |
|---|---|---|
| 「オプション名」 | Discord 上に出る引数名 | Discord のコマンド入力画面(/cmd 名前:値) |
| 「オプション変数」 | コマンド内部で値を呼び出す名前 | コマンドのフローの中({変数名} で参照) |
新しくオプションを追加したときは、「オプション変数」に option_var_1 のような名前が自動で入ります。そのまま使ってもよいですが、option_amount のように分かりやすい名前に変えておくと、後でフローを組むときに迷いません。
必須項目とデフォルト値の関係
「必須項目にするかどうか」と「デフォルト値」は、片方を使うともう片方が不要になる関係です。
- 必須項目をオンにする → ユーザーは必ず値を入力します。省略できないので「デフォルト値」欄は表示されなくなります。
- 必須項目をオフのまま → ユーザーは値を省略できます。省略されたときに備えて「デフォルト値」を設定できます(対応する種類のみ)。
「デフォルト値」が設定できるのは、次の 4 種類です。
| オプション種類 | デフォルト値の指定方法 |
|---|---|
| 「テキストオプション」 | 文字列をそのまま入力 |
| 「数値オプション」 | 数値を入力(整数なら int、小数なら float として扱われます) |
| 「真偽値オプション」 | 「未設定」「true (オン)」「false (オフ)」から選択 |
| 「選択オプション」 | 定義済みの選択肢の中から 1 つを選択 |
種類ごとの追加設定
ほとんどのオプションは共通設定だけで使えますが、一部の種類には追加の入力があります。
テキスト / 数値 / 真偽値 / ユーザー / ロール / チャンネル / 添付ファイル
これらは共通設定(オプション名・オプション変数・オプション説明・必須項目・デフォルト値)だけで使えます。種類ごとの追加項目はありません。
- 「数値オプション」の「デフォルト値」は、入力した値が整数なら int、小数なら float として扱われます。数値以外を入れると「数値を入力してください。」と表示され保存できません。
- 「真偽値オプション」の「デフォルト値」は、ドロップダウンから「true (オン)」または「false (オフ)」を選びます。
- 「ユーザー」「ロール」「チャンネル」「添付ファイル」には「デフォルト値」欄がありません。
選択オプション(選択肢の設定)
「選択オプション」だけは、共通設定に加えて選択肢のリストを設定します。
設定パネルの「選択肢」セクションで「選択肢を追加」をクリックすると、1 件分の入力欄が追加されます。各選択肢には次の項目があります。
| 項目 | 説明 |
|---|---|
| 「選択肢名」 | ユーザーに表示されるラベル(最大 100 文字) |
| 「値」 | その選択肢が選ばれたときに変数に格納される値 |
| 「値の型」 | 「文字列 (str)」「整数 (int)」「小数 (float)」から選択 |
「選択肢を追加」をクリックする
「選択肢」セクションの上または下にある「選択肢を追加」ボタンをクリックすると、新しい選択肢の入力欄が開きます。選択肢は最大 25 件まで追加できます。
「選択肢名」と「値」を入力する
ユーザーに見せるラベルを「選択肢名」に、選ばれたときに変数へ入る内容を「値」に入力します。
「値の型」を選ぶ
その値を文字列・整数・小数のどれとして扱うかを選びます。整数や小数を選んだ場合、「値」がその形式に合っていないと「値が『整数 (int)』の形式と一致しません。保存できません。」のように表示され、保存できません。
不要な選択肢は削除する
各選択肢のヘッダーにあるごみ箱アイコンをクリックすると、その選択肢を削除できます。
選択肢が 1 件もない、または「選択肢名」や「値」が空の選択肢があると、コマンドを保存できません。「値の型」に整数や小数を選んだのに値が数値として正しくない場合も保存できません。
「選択オプション」の「デフォルト値」は、定義済みの選択肢の中から選びます。まだ選択肢を 1 件も追加していないときは、「先に下の『選択肢』を追加すると、デフォルト値を選べるようになります。」と表示されます。
入力された値を変数で参照する
オプションに入力された値は、「オプション変数」で決めた名前を使って {変数名} の形で後ろのノードから参照できます。
たとえば「オプション変数」を 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.contentType}(MIME タイプ)は、ファイルの種類が判別できないときは空文字になります。{target.size} はバイト数で受け取れます。選択オプションは、選んだ選択肢のラベルが {target.name} に、その選択肢の値が {target.value} に入ります。
実際の動作と既定値
オプションの値は、ユーザーが入力した内容を Bot が受け取り、設定した「値の型」にそろえてから、後ろのノードで {変数名} として参照できるようになります。
値の受け取り方(種類ごと)
| オプション種類 | {変数名} で受け取る値 |
|---|---|
| 「テキストオプション」 | 入力された文字列がそのまま |
| 「数値オプション」 | 入力された数値(整数または小数) |
| 「真偽値オプション」 | true / false の真偽値 |
| 「選択オプション」 | 選んだ選択肢のオブジェクト(.name と .value を持つ) |
| 「ユーザーオプション」 | 選ばれたメンバーのオブジェクト(.id .name .mention など) |
| 「ロールオプション」 | 選ばれたロールのオブジェクト(.id .name .mention .color .position) |
| 「チャンネルオプション」 | 選ばれたチャンネルのオブジェクト(.id .name .mention) |
| 「添付ファイルオプション」 | 添付ファイルのオブジェクト(.url .name .size .contentType) |
値を省略したとき
必須項目をオフにしたオプションは、ユーザーが値を省略できます。省略されたときの挙動は次のとおりです。
- 「デフォルト値」を設定していれば、その値がオプションの型にそろえられて使われます。
- 「デフォルト値」を設定していなければ、
{変数名}には**空文字(空の文字列)**が入ります。これは、参照しているノードが値なしで止まってしまうのを防ぐための既定の動きです。
必須項目をオンにしている場合は、省略時の動作はありません(下記「必須オプションを入れずに実行したとき」を参照)。
デフォルト値の型そろえ
「デフォルト値」に入れた内容は、保存時とは別に、実行時にもオプションの型にそろえられます。
- 「数値オプション」:
3.5のように入力した文字列は数値として解釈され、3のような整数になる値は整数として、それ以外は小数として扱われます。 - 「真偽値オプション」:
true/1/yes/on(大文字小文字は区別しません)はtrueに、それ以外はfalseになります。文字列の0はfalseになります。
ユーザー・ロール・チャンネル・添付ファイルのオプションに「デフォルト値」を入れても無視されます。これらは実行時に Discord 上の対象へ解決される値で、文字列から元のオブジェクトを復元できないためです。設定パネルでもこれらの種類には「デフォルト値」欄が表示されません。
「オプション変数」を省略したとき
「オプション変数」を空のままにすると、変数名は「オプション名」をもとに自動で決まります。このとき英字は小文字に変換され、スペースはアンダースコアに置き換わります(例: My Param は my_param)。日本語など Unicode の名前はそのまま使われます。
オプション名の正規化
「オプション名」を英字で付けると、Discord に登録される際に小文字へそろえられ、スペースはアンダースコアに置き換わります(例: My Param は my_param)。日本語などの Unicode 名はそのまま登録され、コマンド入力時の候補にもそのまま表示されます。
上限とクールダウン
オプションそのものには個別の上限・権限・クールダウンはありません。次の上限や制限は、Discord 側の仕様によるものと、コマンド全体に対してかかるものに分かれます。
各オプションの上限
| 項目 | 上限 |
|---|---|
| 「オプション説明」の長さ | 100 文字(超えた分は登録時に自動で切り詰められます) |
| 「選択オプション」の選択肢の数 | 最大 25 件 |
| テキスト入力の長さ | Discord 側の仕様による(おおむね 2000 文字) |
| 添付ファイルのサイズ | Discord 側の仕様による(サーバーのブースト状況などで変わります) |
「オプション説明」が 100 文字を超えても保存時にエラーにはなりませんが、Discord に表示されるのは先頭の 100 文字までです。
クールダウンと権限はコマンド単位
クールダウンや実行権限は、個々のオプションではなくコマンド全体にかかります。設定は起点の「スラッシュコマンド」ノードで行い、判定はオプションの処理よりも前に実行されます。
- クールダウンが有効でまだ時間が残っているときは、コマンドは実行されず、メッセージが表示されます。
- 実行権限がないユーザーがコマンドを使おうとしたときも、オプションを処理する前に実行が止まります。
これらのメッセージは、コマンド側の「一時的な返信(ephemeral)」設定に従って表示されます(実行した本人だけに見える返信になります)。オプション側に ephemeral の設定はありません。
表示されるメッセージ
オプションの処理に関連して、ユーザーやコマンド作成者に表示される主なメッセージは次のとおりです。文言は Bot が表示する原文のまま記載しています。
必須オプションを入れずに実行したとき
Discord の入力画面で This is a required option という入力エラーが表示され、コマンドは送信できません。これは Discord 側の検証なので、Bot まで届く前に止まります。
クールダウン中に実行したとき
クールダウン中です。あと {remaining_seconds}秒 お待ちください。{remaining_seconds} の部分には、残りの待ち時間(秒)が入ります。このメッセージは実行した本人にだけ見える形で表示されます。
実行権限がないとき
Botの権限設定により、このコマンドを実行する権限がありません。このメッセージも実行した本人にだけ見える形で表示されます。
注意点・うまくいかないとき
オプションを設定するときに起きやすい点と、その挙動をまとめます。
- 「オプション説明」を空にしてもエラーにはなりません。 空のときは自動で代わりの説明文が入り、コマンドは問題なく登録されます。説明は入れておくとユーザーに親切です。
- 「オプション名」を空にしたオプションは登録されません。 エラーは出ませんが、そのオプションはコマンドに反映されないので、名前は必ず入力してください。
- 「選択オプション」で値が重複していると、最初の 1 件だけが残ります。 たとえば数値の
1と文字列の1のように見た目が同じ値を別々の選択肢にすると、後から追加したほうは候補から除かれます。値はそれぞれ別のものにしてください。 - 「選択オプション」は選択肢が 1 件もないと保存できません。 「選択肢名」や「値」が空の選択肢が混ざっている場合も保存できません。
- 「選択オプション」の「値の型」に整数・小数を選んだのに値が数値として正しくない場合も保存できません。 その場で
値が「整数 (int)」の形式と一致しません。保存できません。のように表示されます。 - 必須オプションは、Discord の仕様上、任意オプションより前に並びます。 並び順は Bot 側で自動的にこの規則に合わせて調整されるため、追加した順序とコマンド上の表示順が異なることがあります。
オプションの種類一覧(早見表)
8 種類のオプションについて、受け取る値・デフォルト値の可否・追加設定をまとめた早見表です。
| ノード名 | 受け取る値 | デフォルト値 | 追加設定 |
|---|---|---|---|
| 「テキストオプション」 | 文字列 | 設定可(文字列) | なし |
| 「数値オプション」 | 数値(整数/小数) | 設定可(数値として解釈) | なし |
| 「真偽値オプション」 | 真偽値 | 設定可(オン/オフから選択) | なし |
| 「選択オプション」 | 選択肢オブジェクト | 設定可(選択肢から選ぶ) | 選択肢リスト(最大 25 件) |
| 「ユーザーオプション」 | ユーザーオブジェクト | 設定不可 | なし |
| 「ロールオプション」 | ロールオブジェクト | 設定不可 | なし |
| 「チャンネルオプション」 | チャンネルオブジェクト | 設定不可 | なし |
| 「添付ファイルオプション」 | ファイルオブジェクト | 設定不可 | なし |
オプション名の重複に注意
同じコマンドの中で「オプション名」が重複していると、コマンドを保存できません。Discord 側で引数名は一意でなければならないためです。
重複しているとき、設定パネルには次のメッセージが赤字で表示されます。
同じオプション名が既に存在しています。重複しているオプション名のどれかひとつを変更してください。
なお、重複チェックの対象になるのは「オプション名」(Discord に表示される引数名)です。「オプション変数」も、それぞれ別々の分かりやすい名前にしておくことをおすすめします。
次のステップ・関連ページ
- コマンドビルダーの基本 — スラッシュコマンドの作り方と画面構成
- 変数の使い方 —
{変数名}で値を参照・加工する方法 - アクション(動作ノード) — 受け取ったオプションをメッセージに差し込んで送信する
- 条件分岐 — オプションの値で処理を分ける