Custom Commands V3Flowsとエディター
Custom Commands V3ベータ

ボットの処理を、ステップごとに

Flowはステップの並びです。「今日の質問」のFlowは5ステップ。カタログを読み込み、次の質問を選び、投稿し、スレッドを開き、カウントする。ステップを追加して、値をつなぎ、テストして、オンにするだけです。

今日の質問

有効保存

トリガー

変更

スケジュール、毎日9:00

#1

ストレージの値を取得(get-storage-value)

質問リストの読み込み元{questions}

#2

次の項目を選択(array-at)

昨日の次の質問

#3

メッセージを送信(send-message)

入力パラメーター

チャンネル:#general

メッセージ:今日の質問

#4

スレッドを作成(start-thread-from-message)

そのメッセージにスレッドを作成

#5

ストレージの値を増やす(increment-storage-value)

出題済みとしてカウントする先{asked}

イメージです。実際の画面とは異なる場合があります

この5ステップで9:00に投稿される内容

5つのステップで1つのメッセージが生まれます。その下のスレッドに回答が集まり、カウンターが明日も次の質問を確実に出してくれます。

general
オンライン
自分のボットBOT09:00

今日の質問

どんなに古くなっても、つい戻ってきてしまうゲームは何ですか?

120問中42問目

Mira09:04

Terraria。毎年冬になると入れ直しちゃう。

#general へメッセージを送信

イメージです。実際の画面や動作とは異なる場合があります

スクリプトではなく、ステップ

各ステップはカタログから選んだ1つのアクションで、それぞれ入力があり、ステップが出力した値は、あとのどのステップにもつなげられます。エディターには、合う値だけが表示されます。この選択画面の裏には、691のアクションと181のパラメータタイプがあります。

固定値、つないだ変数、テンプレート

どの入力も、この3つのどれかを受け付けます。テンプレートは、自分で書いた文章に変数を差し込めます。

変数ピッカーは型を判別

合わない値は非表示にし、オブジェクトのプロパティまで掘り下げ、空になり得る値を警告し、必要なら変換ステップを自動で追加します。

つないだ値はチップで表示

この行のチップは質問カタログとチャンネルで、値がどこから来たかをひと目で確認できます。

どのステップにもコストがかかる

無料から非常に重いまであり、有効にする前に、Flowの最悪ケースが表示されます。

空のFlowから始める必要はありません。ダッシュボードには、開いて変更できるテンプレートが用意されています。あいさつ返信、新メンバーのウェルカム、/warn コマンド、/remind コマンド、XPシステム、提案、イベント参加受付などです。

今日の質問

有効保存

トリガー

変更

スケジュール、毎日9:00

#1

ストレージの値を取得(get-storage-value)

質問リストの読み込み元{questions}

#2

次の項目を選択(array-at)

昨日の次の質問

#3

メッセージを送信(send-message)

入力パラメーター

チャンネル:#general

メッセージ:今日の質問

#4

スレッドを作成(start-thread-from-message)

そのメッセージにスレッドを作成

#5

ストレージの値を増やす(increment-storage-value)

出題済みとしてカウントする先{asked}

イメージです。実際の画面とは異なる場合があります

分岐とループ

自動化には判断が必要です。If、Switch、ランダム分岐、サブコマンド分岐でFlowを分け、各項目の繰り返し、各マップエントリの繰り返し、Repeatでリストやマップを巡回し、BreakとContinueで制御し、Discordに拒否されたときの復旧処理はTryブロックに書けます。

分岐ごとに独自の変数を持つ

分岐の中で設定した値は、その分岐だけのものです。

Try と On error 分岐

エラーコードで分岐できます。権限不足、見つからない、無効な入力、ストレージエラー、タイムアウト、インタラクションの期限切れ。

止めるのが正解なら、そこで止める

このFlowのIfは、空の質問を投稿する代わりに、スタッフチャンネルにリマインダーを投稿して止まります。

暴走したループは自動で止まるので、ミスがあっても朝じゅう動き続けることはなく、止まります。

今日の質問

有効保存

トリガー

変更

スケジュール、毎日9:00

#1

ストレージの値を取得(get-storage-value)

質問リストの読み込み元{questions}

#2

If(if-condition)

カタログが空: #staff にリマインダーを投稿して停止

#3

各項目を繰り返し(for-each)

未使用の質問が見つかるまでカタログを順に確認

#4

メッセージを送信(send-message)

質問を埋め込みで投稿する先#general

#5

スレッドを作成(start-thread-from-message)

そのメッセージにスレッドを作成

イメージです。実際の画面とは異なる場合があります

Flowは別のFlowを呼び出せて、待機もステップのひとつ

動作を一度書けば、必要な場所から呼び出せます。Flowが続きに進む前に返答が必要な場合、その待機はメモリではなく記録として保存されるので、ボットを再起動しても失われません。

別のFlowを呼び出す

値を渡して、結果を受け取れます。互いに循環して呼び出し合うことになるFlowは拒否されます。

呼び出されたFlowは呼び出し元の実行に属する

実行履歴にそう表示され、呼び出し元へのリンクも付きます。カスタムイベントはもっと緩い方法で、あるFlowが送信し、別のFlowが待ち受けます。

待機は再起動後も維持

確認を求める、選択肢を求める、メッセージを待つ、フォームを表示して送信を待つ。途中で再起動しても、待機は失われません。

スケジュール実行

「Flow実行をスケジュール」でFlowの中から後の実行を予約でき、待機中の実行をキャンセル・一覧表示するアクションもあります。

誰かの返答を待っているFlowを編集すると、待機中のその実行は停止し、ログにもそう記録されます。何か月も使えるようにしたいものには、Flowを開始するボタンのほうが向いています。誰もクリックしない間はコストがかからず、期限切れにもなりません。

提案をレビュー

有効保存

トリガー

変更

フォーム送信、質問を提案

#1

メッセージを送信(send-message)

承認ボタン付きで提案を投稿する先#staff

#2

ボタンを待つ(wait-for-interaction)

モデレーターがクリックするまで一時停止

#3

ストレージの値を設定(set-storage-value)

質問を追加する先{questions}

#4

別のFlowを呼び出す(call-flow)

今日の質問を、新しい質問を引数にして呼び出す

イメージです。実際の画面とは異なる場合があります

公開前にまず確認

テスト実行は、自分のサーバーデータを使ってFlowをシミュレーションします。送信も変更も削除も一切行われません。実行するユーザー、実行するチャンネル、トリガーが渡す内容を自分で選べて、結果にはすべてのステップと、実行されていた内容が表示されます。テストにサーバーの費用はかかりません。

Flowは有効にする前にもチェックされるので、問題は朝9時ではなくエディターで見つかります。暴走したループがボットを落とすこともありません。自分で停止します。

下書きか有効か

下書きは保存されてチェックされますが、実行されることはありません。

有効なFlowの保存はすぐに反映

保存すると、ボットはすぐに新しいバージョンを取り込みます。うまくいかなかった場合は、それまで動いていたバージョンがそのままFlowを処理し続けるので、もう一度試せます。

うっかり失うことはありません

開いている間にほかの人がFlowを保存した場合は、相手の作業を上書きせず、警告が表示されます。削除したFlowやモジュールは30日間復元できます。

ひとつだけ注意点があります。すべてのステップが表示されるのはテスト実行だけです。本番の実行では、ステータス、所要時間、失敗したステップは記録されますが、通ったすべてのステップは記録されません。

テスト実行

シミュレーション実行です。何も送信されていません

ストレージの値を取得

カタログを読み込み、120件

次のエントリを選択

質問42

メッセージを送信

#general に投稿していたはずです

スレッドを作成

そのメッセージにスレッドを作成していたはずです

ストレージの値を増やす

出題済みカウンターが41から42になります

イメージです。実際の画面とは異なる場合があります

Flowに関するQ&A

誰かの返答を待っているFlowは動き続けます。「確認を求める」や「メッセージを待つ」などの待機は、メモリではなく記録として保存されるので、再起動しても残ります。ひとつ知っておきたい例外があります。待機中の実行があるFlowを編集すると、その実行は停止し、ログにもそう記録されます。

サーバーをベータに参加させませんか?

V3は大規模なシステムで、まだ急ピッチで変化しています。そのため、サーバーは一斉ではなく1つずつ迎え入れています。応募はすべてスタッフが読み、数日以内にお返事します。

すでにベータに参加しているサーバーが、次に何を作るかの大部分を決めています。作ったものは自分のものです。ベータが終わっても、Flowsとモジュールはそのまま残ります。