条件分岐
条件分岐(コンディション)は、「ある条件を満たすときだけ処理する」「満たさないときは別の処理をする」といった処理の流れの枝分かれを作る機能です。たとえば「コマンドを使った人が管理者のときだけ実行する」「30%の確率でレアな結果を出す」「平日だけ受け付ける」といった動きを、線でつなぐだけで組み立てられます。
条件分岐とは
条件分岐のブロックを置くと、その先で流れが枝分かれします。
- 条件に一致したときに通る枝
- どの条件にも一致しなかったとき(Else)に通る枝
- どの枝を通っても最後に必ず合流する枝(条件後)
この3つを組み合わせて、「もし〜なら A、そうでなければ B、そのあと共通で C」という流れを表現します。
7種類の条件
条件分岐には、判定の仕方が違う7つの種類があります。
| ブロック名 | どんな判定をするか |
|---|---|
| 「確率による条件分岐」 | 指定した確率(%)で、ランダムに分岐します |
| 「比較による条件分岐」 | 2つの値を比べて(等しい・より大きい など)分岐します |
| 「チャンネルによる条件分岐」 | コマンドが使われたチャンネルなどを比べて分岐します |
| 「権限による条件分岐」 | ユーザーが特定の権限を持っているかで分岐します |
| 「ロールによる条件分岐」 | ユーザーが特定のロールを持っているかで分岐します |
| 「ユーザーによる条件分岐」 | 特定のユーザーかどうかで分岐します |
| 「時刻による条件分岐」 | 現在の曜日・時刻・日時で分岐します |
条件ブロックを置くと自動で付くもの
条件のブロックをキャンバスに置くと、次の3つの行き先がセットで用意されます。
| 自動で作られるもの | 役割 |
|---|---|
| 条件一致の枝(If) | 「条件ノードを追加」ボタンで追加する、条件に一致したときの行き先です |
| 「Else(それ以外)」 | どの条件にも一致しなかったときに通る行き先です |
| 「条件後」 | すべての分岐の判定が終わったあと、最後に必ず通る合流地点です |
「Else(それ以外)」と「条件後」は単独では削除できません。条件ブロックを削除すると、ひもづいたこれらのブロックも一緒に消えます。これらにつながっている線も手動では取り外せません。
条件分岐を作る基本の流れ
以下は「比較による条件分岐」の例です。他の種類でも、設定する項目が違うだけで流れは同じです。
「条件」タブから条件をキャンバスにドラッグする
サイドバーの「条件」タブを開き、使いたい条件(例: 「比較による条件分岐」)をキャンバスにドラッグ&ドロップします。条件ブロックと一緒に、「Else(それ以外)」と「条件後」のブロックも自動で配置されます。
前のブロックから条件ブロックへ線をつなぐ
それまでの処理の出力から、置いた条件ブロックの入り口へ線をつなぎます。これで、その流れが条件ブロックまで進むようになります。
条件ブロックをクリックして条件の内容を設定する
条件ブロックをクリックすると、右側に設定パネルが開きます。ここで判定の中身(例: 「基準値」「比較演算子」「比較する値」)を入力します。
「条件ノードを追加」をクリックして一致したときの枝を作る
設定パネルの一番下にある「条件ノードを追加」ボタンをクリックすると、その条件が一致したときに通る枝(If ノード)がキャンバスに追加されます。
それぞれの枝に行いたい処理をつなぐ
- 条件に一致したときの処理は、追加された一致の枝(If ノード)につなぎます。
- 一致しなかったときの処理は、自動で作られた「Else(それ以外)」につなぎます。
- どの枝を通っても最後に共通で行う処理は、「条件後」につなぎます。
条件が一致したときの処理をつなぐ
「条件ノードを追加」で作られた枝(If ノード)は、その条件が成り立ったときだけ通る道です。この枝の先に、一致時にやりたい処理(メッセージ送信・ロール付与など)のブロックをつなぎます。枝をクリックすると、その条件の中身(「比較による条件分岐」なら「基準値」「比較演算子」「比較する値」)をあとから変更できます。
「Else(それ以外)」に一致しなかったときの処理をつなぐ
「Else(それ以外)」は、その条件ブロックに設定したどの条件にも当てはまらなかったときに通る道です。「一致しなかったときはこうする」という処理を、この枝の先につなぎます。何もしなくてよい場合は、何もつながなくても構いません。その場合はそのまま「条件後」へ進みます。
「条件後」 どの枝を通っても最後に合流する処理
「条件後」は、条件分岐のすべての判定が終わったあとに必ず通る合流地点です。一致の枝を通っても「Else(それ以外)」を通っても、最終的にここへ合流します。
「分岐のあとに、共通で必ずやりたいこと」(例: 「最後に必ずログを残す」)は、この「条件後」の先につなぎます。
複数の条件を組み合わせる(条件の追加)
1つの条件ブロックには、一致の枝を複数作ることができます。条件ブロックの設定パネルで内容を変えながら「条件ノードを追加」をクリックするたびに、新しい一致の枝が追加されます。これにより「A のとき」「A でなく B のとき」「どちらでもないとき(Else)」といった、複数段階の振り分けが作れます。通常のブロックは出力の線が1本ですが、条件ブロックは例外で、複数の出力線をつなげられます。
一致の枝を複数追加した場合は上から順に判定され、いずれにも当てはまらなかったときに「Else(それ以外)」へ進みます。
値の入力欄について
各条件の入力欄の多くには、変数を差し込むボタンが付いています。コマンドのオプションや、途中で作った変数の値を条件に使いたいときは、このボタンから変数を選んで挿入できます。変数の作り方や使い方は 変数の使い方 を参照してください。
設定パネルの一番下にある「ノードタイトル」に名前を入れると、キャンバス上でそのブロックを見分けやすくなります(任意です)。
条件はどう判定されるか(実際の動作)
コマンドが実行されると、各条件は次の共通ルールで判定されます。
- 判定できないときは「成り立たなかった」扱い(フェイルクローズ)。入力した値が解決できない、形式が不正、想定外の状況などで判定がうまくできなかった場合、その条件は成り立たなかった(false) とみなされ、流れは「Else(それ以外)」へ進みます。条件ブロックが誤って一致して意図しない処理が走ることはありません。
- 判定中にエラーが起きても、コマンドは止まりません。条件の判定で内部的に問題が起きた場合でも、エラーはコマンド全体には伝わらず、その条件は成り立たなかった扱いになって流れは続きます。ユーザーにエラーメッセージは表示されません。
- 値の中の変数は判定のたびに展開されます。「基準値」「比較する値」などに差し込んだ変数や永続変数は、判定の直前に現在の値へ置き換えられてから比較されます。コマンドのオプション・途中で作った変数・永続変数のいずれも利用できます。
- 時刻・日時に関する判定はすべて UTC(協定世界時)基準です。日本時間とは時差があるため、「日本の○時」で分岐させたいときは、その分だけずらした時刻を指定してください(例: 日本の 21:00 は UTC では 12:00 です)。
条件の種類ごとの設定
比較による条件分岐
2つの値を比べて分岐します。
| 設定項目 | 説明 |
|---|---|
| 「基準値」 | 比較の左側になる値です。変数の差し込みに対応しています |
| 「比較演算子」 | どう比べるかを選びます(下表) |
| 「比較する値」 | 比較の右側になる値です。変数の差し込みに対応しています |
選べる「比較演算子」:
| 選択肢 | 意味 |
|---|---|
等しい (==) | 基準値と比較する値が同じとき |
等しくない (!=) | 同じでないとき |
より大きい (>) | 基準値が比較する値より大きいとき |
より小さい (<) | 基準値が比較する値より小さいとき |
以上 (>=) | 基準値が比較する値以上のとき |
以下 (<=) | 基準値が比較する値以下のとき |
含む (contains) | 基準値の中に比較する値が含まれているとき |
含まない (not contains) | 含まれていないとき |
確率による条件分岐
指定した確率(%)で、ランダムに分岐します。
| 設定項目 | 説明 |
|---|---|
| 「確率」 | この枝が選ばれる確率を 0〜100 の数値で入力します。変数の差し込みに対応しています |
1つの条件ブロックにつないだ確率の枝は、合計を 100% 以下にする必要があります。合計が 100% を超えるとき、確率が空のとき、0 以下のときは一致の枝を追加できません。
チャンネルによる条件分岐
コマンドが実行されたチャンネルなどを比べて分岐します。
| 設定項目 | 説明 |
|---|---|
| 比較するチャンネルの種類 | 「現在のチャンネル」/「チャンネルID」/「チャンネル変数」から選びます |
| チャンネルID / チャンネル変数名 | 種類で「チャンネルID」または「チャンネル変数」を選んだときに表示され、対象を入力します |
| 「比較演算子」 | 「等しい (==)」/「等しくない (!=)」から選びます |
| 「比較する値」 | 比較先の値を入力します。変数の差し込みに対応しています |
権限による条件分岐
ユーザーが特定の権限を持っているかどうかで分岐します。設定パネルの見出しは表示上「チャンネル条件分岐設定」となっていますが、ここで判定するのは権限です。
| 設定項目 | 説明 |
|---|---|
| ターゲットユーザー | 「コマンド実行者」/「ユーザーID」/「ユーザー変数」から選びます |
| ユーザーID / ユーザー変数名 | ターゲットで「ユーザーID」または「ユーザー変数」を選んだときに表示されます |
| 基準となる権限 | 確認したい権限を選びます(複数選択できます) |
| 条件タイプ | どう判定するかを選びます(下表) |
選べる「条件タイプ」:
| 選択肢 | 意味 |
|---|---|
| すべての権限を持っている | 指定した権限をすべて持っているとき一致 |
| すべての権限を持っていない | 指定した権限をすべて持っていないとき一致 |
| いずれか1つ以上の権限を持っている | 指定した権限のうち1つでも持っていれば一致 |
ロールによる条件分岐
ユーザーが特定のロールを持っているかどうかで分岐します。
| 設定項目 | 説明 |
|---|---|
| ターゲットユーザー | 「コマンド実行者」/「ユーザーID」/「ユーザー変数」から選びます |
| ユーザーID / ユーザー変数名 | ターゲットで「ユーザーID」または「ユーザー変数」を選んだときに表示されます |
| ロールIDまたはロール変数 | 確認したいロールの ID(例: 123456789012345678)、またはロール変数名を入力します。変数の差し込みに対応しています |
ユーザーによる条件分岐
実行者などが特定のユーザーかどうかで分岐します。
| 設定項目 | 説明 |
|---|---|
| ターゲットユーザー | 「コマンド実行者」/「ユーザーID」/「ユーザー変数」から選びます |
| ユーザーID / ユーザー変数名 | ターゲットで「ユーザーID」または「ユーザー変数」を選んだときに表示されます |
| ユーザーIDまたはユーザー変数 | 比較したいユーザーの ID、またはユーザー変数名を入力します。変数の差し込みに対応しています |
追加された一致の枝(ユーザー分岐の If ノード)では、「である」/「ではない」の比較演算子を選んで、一致・不一致のどちらで判定するかを切り替えられます。
時刻による条件分岐
現在の曜日・時刻・日時で分岐します。
まず「比較対象」で、何と比べるかを選びます。
| 比較対象 | 内容 |
|---|---|
| 曜日 | 現在の曜日で判定します |
| 時刻 (HH:mm) | 現在の時刻(時:分)で判定します |
| 日時 | 現在の日付と時刻で判定します |
次に「比較演算子」を選びます。選べる内容は「比較対象」によって変わります。
- 曜日のとき: 「いずれかである」/「いずれでもない」
- 時刻・日時のとき: 「より前」/「より後」/「等しい」/「等しくない」/「範囲内」/「範囲外」
| 入力欄 | 表示される条件 |
|---|---|
| 曜日(複数選択) | 「比較対象」が「曜日」のとき |
| 「時刻」(HH:mm) | 「比較対象」が「時刻」で、範囲以外の演算子のとき |
| 「時刻の範囲」 | 「比較対象」が「時刻」で、「範囲内」/「範囲外」のとき。終了が開始より小さい場合は深夜をまたぐ範囲として扱われます |
| 「日時」 | 「比較対象」が「日時」で、範囲以外の演算子のとき |
| 「日時の範囲」 | 「比較対象」が「日時」で、「範囲内」/「範囲外」のとき |
一致の枝を追加するには、曜日なら1つ以上の曜日、範囲なら開始と終了の両方、それ以外なら値を1つ入力する必要があります。
条件の種類ごとの判定の決まり方(実際の動作)
比較による条件分岐の決まり方
「基準値」と「比較する値」は、変数を展開したうえで次のように比べられます。
- 両方が数値として読めるときは、数として比較されます。たとえば文字の
5と数値の 5 は、どちらも数として扱われるため「等しい (==)」で一致します。値の見た目(文字か数字か)に左右されず、数の大小・等価で判定できます。 - どちらかが数値として読めないときは、文字列として比較されます。「等しい (
==)」「等しくない (!=)」は文字どうしの一致で判定します。 - 「より大きい (
>)」「より小さい (<)」「以上 (>=)」「以下 (<=)」は、両方が数値のときだけ判定できます。どちらかが数値に変換できない場合、その条件は成り立たなかった扱いになります。数の大小で分岐したいときは、両側に数値(または数値に展開される変数)を入れてください。 - 「含む (
contains)」「含まない (not contains)」は、文字列の中に含まれるかどうかで判定します。
チャンネルによる条件分岐の決まり方
- 「現在のチャンネル」を選ぶ、または ID・変数名を空にすると、コマンドが実行されたチャンネルが比較元になります。
- チャンネルは、変数・
<#123...>形式のチャンネルメンション・数字だけの ID・サーバー内のチャンネル名のいずれでも指定できます。指定した値はこれらの順で解決され、最終的にチャンネルの数字 ID に変換されてから比較されます。 - 比較元・比較先の両方が数字 ID に解決できたときだけ「等しい (
==)」「等しくない (!=)」で判定されます。どちらかが解決できなかった場合は成り立たなかった扱いになります。
権限による条件分岐の決まり方
- 判定対象のユーザーがそのサーバーの**管理者(administrator)権限を持っている場合、どの権限チェックも常に「持っている」**と判定されます。これは Discord の標準的な扱いで、管理者はすべての権限を含むためです。
- 管理者でない場合は、対象ユーザーが実際に持っている権限と「基準となる権限」を照らし合わせて判定します。
- すべての権限を持っている: 指定した権限をすべて持っていれば一致します。
- すべての権限を持っていない: 指定した権限をどれも持っていなければ一致します。
- いずれか1つ以上の権限を持っている: 指定した権限のうち1つでも持っていれば一致します。
- 「基準となる権限」を1つも選んでいない場合: 「すべての権限を持っている」「すべての権限を持っていない」は一致(条件なしのため常に成り立つ扱い)、「いずれか1つ以上の権限を持っている」は不一致になります。
- 権限による条件分岐はサーバー内での利用が前提です。対象ユーザーをサーバーのメンバーとして特定できないときは、成り立たなかった扱いになります。
ロールによる条件分岐の決まり方
- 判定対象のユーザーをサーバーのメンバーとして特定し、指定したロールを持っているか(または持っていないか)で判定します。
- ロールは ID またはロール変数で指定します。指定した値が最終的にロールの数字 ID に解決できなかった場合(たとえば存在しないロール名など)は、誤った一致を防ぐため成り立たなかった扱いになります。
- 一致の枝(If ノード)では「持っている」「持っていない」のどちらで判定するかを切り替えられます。
ユーザーによる条件分岐の決まり方
- ターゲットと比較相手のユーザー ID どうしを比べて判定します。「コマンド実行者」を選ぶと、コマンドを使った本人の ID になります。
- ユーザー ID の比較だけで判定するため、サーバー外(ダイレクトメッセージ)でも利用できます。どちらかの ID が特定できないときは成り立たなかった扱いになります。
- 一致の枝(If ノード)では「である」「ではない」を切り替えられます。
時刻による条件分岐の決まり方
判定はすべて UTC を基準に、現在の曜日・時刻・日時と比べて行われます。
- 曜日: 日曜=0、月曜=1、…、土曜=6 として扱われ、選んだ曜日に「いずれかである」「いずれでもない」で判定します。
- 時刻:
HH:MMまたはHH:MM:SSの形式で指定します。HHは0〜23、MM・SSは0〜59の範囲です。25:00や10:60のような不正な形式は成り立たなかった扱いになります。- 「範囲内」「範囲外」では、終了が開始より小さいとき(例:
22:00〜02:00)は深夜をまたぐ範囲として扱われ、早朝の時刻も範囲に含まれます。
- 「範囲内」「範囲外」では、終了が開始より小さいとき(例:
- 日時: ISO 8601 形式(例:
2026-06-01T12:00:00Z)で指定します。末尾のZは UTC を表します。タイムゾーンを書かない日時は UTC として扱われます。不正な形式は成り立たなかった扱いになります。- 日時の「範囲内」「範囲外」は、開始から終了までの通常の区間として扱われます(時刻の範囲のように深夜またぎにはなりません)。開始より後の終了を指定してください。
確率による条件分岐の詳しい動き(実際の動作)
確率による条件分岐は、置き方や枝の数によって挙動が変わります。
1つの確率の枝だけのとき
設定した確率(%)に応じて、0〜100 の範囲で毎回ランダムに判定します。
- 確率が
0以下のときは常に成り立たない(常に「Else(それ以外)」へ進む)。 - 確率が
100以上のときは常に成り立つ。 - 入力が数値として読めないときは、成り立たない扱いになります。
確率の枝を複数置いたとき(重み付き抽選)
1つの条件ブロックに確率の枝を2つ以上つなぐと、それぞれの確率を「持ち分」とした1回の抽選でどの枝を通るかが決まります。たとえば「30% の枝」「20% の枝」を置くと、30% で1つ目、20% で2つ目、残りの 50% は「Else(それ以外)」へ進みます。
- 各枝の確率を順に積み上げて割り当てるため、合計は 100% 以下にしてください。合計が 100% 未満のとき、足りない分は「Else(それ以外)」へ進みます。
- 確率が
0の枝は抽選から外され、後ろの枝の選ばれ方に影響しません。 - 合計が 100% を超えると、後ろの枝は絶対に選ばれません。
重み付き抽選は、1つの条件ブロックにつないだ一致の枝がすべて「確率による条件分岐」のときだけ働きます。確率の枝と、ほかの種類(ロール・ユーザーなど)の枝を同じ条件ブロックに混在させた場合は、上から順に最初に成り立った枝を通る「先勝ち」の判定に切り替わり、混在したほかの枝は無視されます。確率分岐は確率分岐だけ、ほかの判定はほかの判定だけでまとめるのがおすすめです。
上限と制約
| 項目 | 上限・制約 |
|---|---|
| コマンド1回の実行時間 | 約 30 秒。条件の判定もこの時間内に収まる必要があります |
| コマンド1回で処理できるブロック数 | 約 5000 ステップ。条件・ループなどすべてのブロックの通過がこの数に含まれます |
| 確率の枝の合計 | 100% まで(超過分の枝は選ばれません) |
ループの中で条件を判定することもできます。その場合、繰り返しのたびに条件が判定され、ループの回数だけステップ数を消費します。
注意点・うまくいかないとき
- 思ったように分岐しない・常に「Else(それ以外)」に進んでしまう: 入力した値(チャンネル・ロール・ユーザーの ID や変数、時刻・日時の形式など)が解決できていない可能性があります。ID は数字で、時刻・日時は決められた形式で指定してください。
- 管理者だと権限の条件が必ず一致する: 管理者を別扱いにしたいときは、ロールやユーザーによる条件分岐と組み合わせてください。
- 確率の枝を増やしたのに一部が選ばれない: 確率の合計が 100% を超えていないか、確率の枝とほかの種類の枝を同じ条件ブロックに混ぜていないかを確認してください。
次のステップ / 関連ページ
- コマンドビルダーの概要 — コマンドビルダー全体の使い方
- ノードの種類リファレンス — ブロックの置き方・つなぎ方・削除のしかた
- 変数の使い方 — 条件の値に変数を差し込む方法
- 動作(アクション) — 各枝の先につなぐ処理ブロック
- 制御フロー — ループや待機などの制御ブロック
最終更新: