変数と式の使い方
コマンドの中で値を覚えておき、後から差し込んだり計算したりする仕組みが「変数」です。このページでは、左パネルの「変数」カテゴリにあるノード(変数操作・配列操作・乱数)と、変数の書き方をまとめます。式の細かな評価規則や実行時の挙動は コマンド内での変数の使い方 をご覧ください。
変数には、コマンドの実行が終わると消える**一時変数(ローカル変数)と、削除するまで残るカスタム変数(永続変数、BSVAR_ で始まる名前)**があります。違いは 変数の概要 をご覧ください。
書き方
テキストを入力する欄(メッセージ本文など)には、次の書き方を埋め込めます。
| 書き方 | 例 | 差し込まれるもの |
|---|---|---|
{変数名} | {User.name}、{score} | 変数の値。ドットでつなぐとプロパティを取り出せます |
{BSVAR_…} | {BSVAR_score} | カスタム変数(永続変数)の値 |
{env.…} | {env.STRIPE_API_KEY} | 環境変数(Bot 単位の秘密・設定値) |
{param_…} | {param_target} | 関数の引数(関数の中でのみ) |
${ ... } | ${ {price} * 1.1 } | 式を計算した結果 |
次の書き方は使えません。
{{変数名}}のような中括弧の二重ネスト- 三項演算子(
条件 ? A : B) {変数 as number}のような型変換
使える演算子と計算の規則は 計算式の書き方 をご覧ください。
入力補完と変数セレクター
変数を書ける入力欄で { を打つと、候補が出所(「ローカル変数」「入力とイベントの値」「サーバー変数」「組み込み」)ごとに出ます。候補を選ぶと、型・作成したブロック・見本の値が見られます。
| キー | 動作 |
|---|---|
Ctrl + Space | いつでも候補を開く |
→ / ← | 選んだ変数のプロパティの中へ進む / 一つ戻る |
Esc | 候補だけを閉じる |
${ } の中では関数名も補完され、括弧の中にいる間は今の引数の説明が出ます。
ビルダーの「設定」の「後のブロックで作られる変数を候補に出さない」がオン(初期状態)のときは、編集中のブロックより後で作られる変数は候補に出ません。ループの中では、ループ本体で作られる変数は候補に残ります。この設定がオンのまま後で作られる変数を参照すると、「このブロックより後で作られるため、ここではまだ空です」と警告が出ます。
入力欄の変数ボタンで開く変数セレクターには、「変数」「式」「日時」の 3 つのモードがあります。「日時」では、日時の変数か指定した日時から Discord のタイムスタンプ(<t:…:R> など)を挿入します。
- 表示の形は「時刻」「時刻 (秒まで)」「日付 (短い)」「日付 (長い)」「日付と時刻」「曜日つきの日付と時刻」「相対時間」から選びます。
- 日時を指定したときは、このブラウザの時刻帯で入力した日時に固定されます。
自動で用意される変数
自分で「変数を設定」しなくても、次の変数が使えます。どの変数が使えるかは、入力補完で確認できます。
- コマンドのオプションの入力値
- 「メッセージを送信」「ロールを作成」「API リクエスト」などのノードの結果
- ループの何回目か(
{ループ変数名.index}など)と、リストをくり返すときの項目({item}など)。書き方は 反復処理 をご覧ください - 実行中のコマンドを指す
{Command.name}{Command.user}{Command.channel}{Command.guild}。{Command.user.id}のようにプロパティもつなげられます。DM でのサーバーのように値が存在しない実行では、{Command.guild}は空にならず文字のまま残ります。カスタムイベントの実行では登録されず、代わりに{Event.*}を使います。ただし、ボタン・選択メニューが押されたあとは使えるものがあります(カスタムイベントのボタン・選択メニュー)。詳しくは 変数の種類と参照のしかた をご覧ください。
組み込み変数のプロパティ
ユーザーやサーバーなどの情報は、ドットでプロパティをつないで取り出します。次の表にない属性は解決されません。
| 型 | 取り出せるプロパティ |
|---|---|
| ユーザー (User) | name / id / mention / icon / createdAt / joinedAt / displayName / avatar / displayAvatar / guildAvatar / displayBanner / guildBanner / bot / status / color / roles |
| サーバー (Guild) | name / id / memberCount / icon / owner / boostCount / boostLevel / banner / createdAt / roles / members / channels / categories / textChannels / voiceChannels / stageChannels / threads / emojis / stickers |
| チャンネル (Channel) | name / id / mention / type / topic / slowmode / nsfw / position / category / createdAt / lastMessage / members / bitrate / userLimit |
| ロール (Role) | name / id / mention / color / position / icon / hoist / mentionable / managed |
| 時刻 (Time) | unix / relative / long / short / shortTime / longTime / shortDate / longDate / longDateWithWeekAndShortTime |
| 金額 (Money) | value / format |
| URL (Url) | url |
| 絵文字 (Emoji) | name / id / mention / url / animated |
| スタンプ (Sticker) | name / id / url |
| メッセージ (Message) | content / id / author / channel / createdAt / url |
- 型どうしはつなげられます。
ownerはユーザー、categoryとchannelはチャンネル、lastMessageはメッセージ、createdAtなどは時刻、iconやurlは URL の型なので、{Channel.lastMessage.author.name}のように続けて書けます。 - 配列を返すプロパティ(
roles/members/channels/emojisなど)には.length/.first/.lastと添字が使えます(例:{Guild.roles.first.name})。 Guild.membersはキャッシュに載っているメンバーだけを返します。総数にはmemberCountを使ってください。User.statusはプレゼンス インテントが無いと常にoffline、Message.contentはメッセージコンテンツ インテントが無いと空になります。
各プロパティの値が入る条件は データ型 をご覧ください。
変数を設定
「変数名」「型」「値」を決めて一時変数に代入します。値の欄では {変数名} の参照や ${ ... } の式も使えます。型は文字列・数値・真偽値・ユーザー・チャンネル・ロール・オブジェクト・配列から選びます。
型を「オブジェクト」「配列」にすると、「値」欄の代わりに専用のエディタで中身を定義します。
サーバーやユーザーごとに値を残したい場合はカスタム変数を使ってください。
オブジェクト型
- プロパティは 1 変数あたり最大 50 件です。
- キー名は英字・数字・アンダースコア(
_)のみで、先頭は英字または_にします。 - 後続ノードからは
{変数名.キー名}で参照します。
配列型
「要素の型」は、文字列・数値・真偽値・ユーザー・チャンネル・ロール・サーバー・時刻から選びます。初期要素を追加しないまま保存すると、空の配列になります。作成後に要素を出し入れするときは配列操作ノードを使います。
要素は次の書き方で取り出します。
| 書き方 | 取り出せるもの |
|---|---|
{変数名.0} | 先頭(0 番目)の要素。添字は 0 から数えます |
{変数名.length} | 要素の個数 |
{変数名.first} / {変数名.last} | 先頭 / 末尾の要素 |
要素がユーザーなどのオブジェクト系のときは、{変数名.0.mention} のようにさらにプロパティをつなげます。角かっこの [0] や、[-1] のような負の添字は、${ {変数名}[-1] } のように式の中でだけ使えます。
このほかのリストの操作(項目をつなげる・合計する・探すなど)は リストをまとめて扱う、数値の表記は 数値の表記 をご覧ください。
式の中で [] を使ってキーを取り出す
${ ... } の中では、変数のうしろに [] を付けてオブジェクトのキーや配列の要素を取り出せます。取り出すキーを別の変数で指定できるのが、ドット記法との違いです。
| 書き方 | 取り出すもの |
|---|---|
${ {obj}["name"] } | obj の name キー |
${ {obj}[{key}] } | obj の、変数 key が表す名前のキー(動的キー) |
${ {obj}["a"]["b"] } | obj の a キーの中の b キー |
${ {m}[0]["label"] } | 配列 m の先頭要素の label キー |
- キーは常に文字列として扱われます(変数
iが1のとき、${ {obj}[{i}] }はobj["1"]を取り出します)。 - 存在しないキーは、エラーにならず空文字になります。
- ドット記法では
{obj._id}のようにアンダースコアで始まる名前は弾かれますが、[]では${ {obj}["_id"] }のように取り出せます。
オブジェクトの中の配列や、配列の中のオブジェクトといった入れ子の構造も扱え、BSVAR_ に保存しても入れ子のまま保たれます。中の値は {変数名.キー名.0.別キー} のようにたどります。詳しくは データ型 をご覧ください。
配列操作(配列に要素を出し入れする)
配列型の変数に要素を出し入れするノードです。「対象変数名」には中括弧 {} を付けず名前だけ(例: members)を入力します。永続変数を対象にするときは BSVAR_ で始まるリファレンス名を指定し、あらかじめ配列型のカスタム変数として作成しておきます。
| ノード | 役割 |
|---|---|
| 「配列に追加」 | 末尾に要素を 1 つ追加する |
| 「配列から取り出し」 | 末尾の要素を取り除く。取り除いた要素は「退避先変数名 (任意)」に入れられる |
| 「配列を更新」 | 指定した添字の要素を上書きする |
| 「配列に挿入」 | 指定した添字の前に要素を割り込ませる |
| 「配列から削除」 | 指定した添字の要素を取り除く |
| 「配列を空にする」 | 配列を空([])にリセットする |
- 「配列に追加」では、対象の配列を宣言済みなら要素の型が引き継がれます。未宣言の配列を対象にしたときは「要素の型」を自分で選びます。
- 「配列から取り出し」の退避先には永続変数(
BSVAR_)を指定できません。空欄なら要素は捨てられます。 - 添字にマイナスの値を入れると末尾から数えます(
-1が末尾)。「配列を更新」「配列から削除」で範囲外を指したときは何も起きません。
乱数
乱数の結果は一時変数にしか入れられません。BSVAR_ の変数を「結果変数」に指定しても書き込まれません。残したいときは、いったん一時変数に入れてから「変数に演算を適用」などで BSVAR_ の変数へ反映してください。
「結果変数」には {} を付けず名前だけを入力します。
乱数(数値)
- 範囲は「最小値」「最大値」の両端を含みます。最大値が最小値より小さいときは入れ替えて扱われます。
- 「整数で生成」をオフにすると小数が作られます(初期状態はオン)。
配列から抽選
- 「ソース配列」には一時変数・
BSVAR_のどちらの配列も指定できます。 - 「個数」が
1なら単一の要素、2以上なら選ばれた要素の配列が結果変数に入ります。 - 「重複なし」がオン(初期状態)のとき、個数が要素数を超えると要素数までに抑えられます。オフにすると同じ要素が複数回選ばれることがあり、個数が要素数を超えてもその分だけ選ばれます。
- 一度に抽選できる個数には上限があり、超える分は切り詰められます。
変数に演算を適用
既存の変数を計算し、結果を同じ変数に入れ直します。「対象変数名」には {} を付けず名前だけ(例: score)を、「式」には {counter} * 2 や {customVar} + 3 のように計算内容を入力します。
「小数の桁数」で「小数 0〜10 桁」を選ぶと、計算結果をその桁数に四捨五入してから保存します。表示だけでなく、保存する値そのものが丸められます。対象が数値型の変数のときだけ働き、初期状態は「丸めない」です。式の中で丸める round / floor / ceil は 数値を丸める をご覧ください。
カスタム変数を増やすときは、複数の人が同時に実行しても値が壊れないよう安全に加算されます。数値型のカスタム変数は、まだ値がなくても 0 から数え始めます。
変数を削除
カスタム変数(永続変数)の値を初期値にリセットするノードです。「対象変数名」には {} を付けず名前だけを入力します。一時変数は対象になりません。
変数を読み出す
カスタム変数(永続変数)の値を一時変数に読み出します。{BSVAR_…} で差し込めるのは実行者の値だけなので、ほかのメンバーの値を使うときはこのノードで読み出します(対象ユーザーの指定)。値がまだ書き込まれていなければ、デフォルト値が入ります。
ユーザー毎の変数で対象ユーザーを指定する
「ユーザー毎(User)」のカスタム変数は、次の 10 ノードで「対象ユーザー」を「指定したユーザー」にすると、実行者以外のメンバーの値を読み書きできます。
- 「変数を設定」「変数に演算を適用」「変数を削除」「変数を読み出す」
- 配列操作の 6 ノード
対象のユーザーを特定できなかったときは、そのノードだけが何もせず、コマンドは次の処理へ進みます。メンバー全員をループで書き換える使い方では、1 回の実行で書き込める回数の上限に注意してください。
左パネルの「変数」でカスタム変数を作成・管理する
コマンドビルダー左側のサイドバーの「変数」からも、カスタム変数(永続変数)を作成・編集・削除できます。設定する項目(表示名・データタイプ・スコープ・デフォルト値)と、自動で付く BSVAR_ のリファレンス名は ストレージ で作る場合と同じです。スコープやデータタイプの意味、DM での書き込みの扱いは 永続変数 をご覧ください。
データタイプには「配列(Array)」も選べます。作成した配列は、配列操作ノードや「配列から抽選」の対象に BSVAR_ のリファレンス名で指定できます。
未定義変数の警告
存在しない変数名を {} で参照すると、そのノードに警告が表示されます(保存はできます)。次の点を見直してください。
- 変数名のスペルが、設定したときの名前と一致しているか
- カスタム変数なら、
BSVAR_で始まる正しいリファレンス名を使っているか - その変数が、参照しているノードより前のノードで作られているか
実行時の扱いは 解決できない参照は書いたままの文字が残る をご覧ください。
次のステップ / 関連ページ
- コマンド内での変数の使い方 — 式の書き方と実行時の挙動
- 永続変数 —
BSVAR_変数のスコープとデータタイプ - アクション(動作)ノード一覧 — 結果を変数に残せる動作ノード
最終更新: