【グラブル】Discordの高機能BOT「Dyno」のカスタムコマンドについて

どうも、ひろです。

 

今回もいつも通りグラブルに関連する記事なのですが、主題はDiscordのBOT「Dyno」のカスタムコマンドについてです。

 

 

はじめに

みなさん、Discord使っていますか?

「Discordって良く名前聞くけど何?」という方に、3行で説明すると

 ・ゲーマー向けのコミュニケーションアプリ

 ・テキストチャット・ボイスチャットができる

 ・デフォルトで様々な便利機能があるだけでなく、BOTを開発・導入することで更に便利に

こんな感じのアプリケーションです。

Discordが有する機能について詳しく話しているとそれだけで1つの記事になってしまうので、Discordの詳細を知らない人はググって下さい。

この記事は、Discordの最低限の使い方を知っている人に向けたものです。

 

Dynoとは?

まずは、Dynoを紹介します。

dyno.gg

DynoはDiscordのBOTのひとつで、導入するとDiscordに様々な便利機能をもたらしてくれます。

有料版と無料版があるのですが、無料版でも十分に高機能です。

本記事で紹介することも全て無料版のお話です(筆者も無料版を使っているので、有料版については詳しくわかりません・・・)。

Dynoを導入すると、例えば、サーバに参加した人に自動的に定型文を飛ばしたり、コマンドによってDiscordの様々な機能にアクセスすることができます。

Dynoでは各機能を「モジュール」と呼んでおり、モジュールの有効・無効化やカスタマイズは全てWeb上のインタフェースから管理できます。

コマンドやモジュールなどの解説は全て英語ですが、そんなに難しいものではないので、そこまで高度な英語力がなくとも理解できると思います。
導入したら、いろいろと弄ってみてください。

Dynoの導入方法について知りたい方は、以下の記事が参考になります。

miyacopl.hatenablog.com

 

カスタムコマンドとは?

今回の記事では、Dynoが有する様々なモジュールのうち、「カスタムコマンド」についてお話します。

カスタムコマンドとは、独自のコマンドを作成することができるモジュールです。

この機能を使用することで、コマンド一つでマクロのように様々なアクションを起こせるようになります。

使いこなせると非常に便利ですので、本記事でカスタムコマンドの使い方や特性を知って色々試してみてください!

 

カスタムコマンドの作り方

 Dynoの管理画面をブラウザで開き、左側の「MODULE SETTINGS」から「Custom Commands」を選択してください。

f:id:hiro_gomafu:20190228014616p:plain

すると、このような画面が表示されます。

f:id:hiro_gomafu:20190228014722p:plain

もし右上のスイッチがDisableになっていた場合は、Enableにしてモジュールを有効化してください(画像と同じ状態になっていれば有効化されています)。

続いて、緑の「Add Command」をクリックしましょう。

ポップアップウィンドウで、コマンドを作成する画面が開きます。

試しに、次の画像のようにコマンドを作成してみてください。

f:id:hiro_gomafu:20190228015004p:plain

Command:

hello

Response:

こんにちは、{user}さん!

コマンドの一覧に作成したコマンドが表示されれば、無事にコマンドの作成が成功しています。

f:id:hiro_gomafu:20190228015044p:plain

続いて、Discordで「?hello」と入力しメッセージを送信してみてください。

f:id:hiro_gomafu:20190228015154p:plain

今作成したコマンドが実行されました。

以上が、カスタムコマンドの作成方法です。

 

変数

作成した「hello」のコマンドで、「{user}」という部分が自分の名前に置き換わっていることにお気づきでしょうか?

この「{user}」は変数(Variable)と呼ばれ、この場合はコマンドを実行した人の名前に置き換わります。

変数は他にも沢山あり、Responseの中に変数を埋め込むことで、様々な条件を指定したり、動的なコマンドを作成することができます。

変数の一覧は、コマンド作成画面から見ることができます。

f:id:hiro_gomafu:20190228015500p:plain

非常に多いので、いくつかに絞って説明をします。

 

{require:*****}

これは、コマンドの実行を制限するための変数です。

例えば、特定の役職を持っている人しかコマンドを実行できないようにしたい場合は

{require:役職名}

また、特定のチャンネルでしかコマンドを実行できないようにしたければ

{require:#チャンネル名}

と入力することで実現できます。

逆に、特定の役職やチャンネルでコマンドを実行できないようにしたい場合は、requireの部分をnotにすることで実現できます。

 

$N

カスタムコマンドを実行する時、特定の文字列を指定することができます。

この時指定する文字列のことを「引数(argument)」と呼びます。

引数をコマンドの中で使いたい場合は、$マークの後に数字を入れます。

言葉で説明しても難しいと思いますので、実際に一つコマンドを作成しながら説明しましょう。

次のようなコマンドを作成してみてください。

f:id:hiro_gomafu:20190228021200p:plain

Command:

parrot

Response:

私も$1!

 続いて、Discord側で作成したコマンドを実行するのですが、「?parrot」の後に半角スペースを入れた後、続けて何かの文字列を入力して、そのメッセージを送信してみてください。

f:id:hiro_gomafu:20190228021911p:plain

「$1」の部分が、コマンドを実行したときに入力した文字列に置き換わっていますね。

これが「引数」という仕組みです。

引数を使用することで、コマンドを実行する時に任意の文字列を指定することができるようになります。

引数は半角スペースで区切って複数指定することもできます。その場合、Responseでは「$2」「$3」とすることでN番目の引数を受け取ることができます。

 

{!******}

 これはチートです。

この変数を用いることで、Dynoの任意のコマンドを実行することができます。

例えば、Dynoにはネットから犬や猫の画像を拾ってきてくれる「?dog」や「?cat」というコマンドがあります。

f:id:hiro_gomafu:20190228023322p:plain

今回は、1つのコマンドで犬と猫の画像をそれぞれ1つずつ拾ってきてくれるカスタムコマンドを作ってみましょう。

作成するコマンドは次の通りです。

f:id:hiro_gomafu:20190228023504p:plain

Command:

animals

Response:

{!dog}

{!cat}

 作ったらさっそく実行してみましょう。

f:id:hiro_gomafu:20190228023623p:plain

このように、カスタムコマンドの中で任意のコマンドを実行することができます。

この機能を使うと非常に柔軟にコマンドを作成することが可能です。

夢が広がりますね!

 

グラブルで使えるカスタムコマンド

いくつか、グラブルで役立つカスタムコマンドをご紹介しましょう。

 

役職の付与・解除を行うコマンド

まず一つ目は、「任意の役職をつけたり外したりできるコマンド」です。

例えば、アルバハHLに参加できる人用に「アルバハHL参加可能」という役職を作成していたとします。

この役職を作った場合、役職の付与・解除は、通常では役職を変更する権限を持った人にお願いすることになります。

しかし、これは役職を管理する人の負担となってしまいますよね。

そこで、自分の、特定の役職だけ自分で付与・解除できるようになれば便利ですよね。

Dynoのカスタムコマンド機能を用いることで、これが実現できます。

まず前提として、個人で付与・解除できるようにしたい役職は、サーバ設定で「Dyno」という役職よりも下位にくるようにしておいてください。

f:id:hiro_gomafu:20190228024939p:plain

次に、カスタムコマンドを作成しましょう。

f:id:hiro_gomafu:20190228025121p:plain

Command:

ulbaha

Response:

{!role {user} アルバハHL参加可能}

実行してみると、無事コマンドで役職の付与ができました。

f:id:hiro_gomafu:20190228025044p:plain

このコマンドはトグル式になっているので、再度実行することで役職を外すことも可能です。

 

マルチバトルの募集をDiscord内で完結させる

再掲になりますが、ぐるぐるストッキングの団長のみやこさんが、Discord内でマルチバトルの募集を完結させる便利な方法についてブログで紹介されております。

miyacopl.hatenablog.com

今回は、この記事で紹介されている方法を、カスタムコマンドを使ってさらにシステマチックに、エレガントにしてみようと思います。

前提として、マルチバトル募集のチャンネル名は次のようになっているものとします(以降、チャンネル名の部分はご自身のサーバのものと併せるようにしてください)。

f:id:hiro_gomafu:20190228025642p:plain

導入するコマンドは2つです。

f:id:hiro_gomafu:20190228030401p:plain

Command:

recruit

Response:

{require:#募集}
{!announce $1 {user}さんが募集しています:$2}

f:id:hiro_gomafu:20190228040444p:plain

Command:

endbattle

Response:

{require:#ルーム1}
{require:#ルーム2}
{require:#ルーム3}
{!purge 1000}

{respond:#募集}

{channel}が使用可能になりました

 さて、実行するとどのようになるのか、実際の使用例でご説明しましょう。

例えば、22時からのアルバハHLをルーム1で募集したいときは、次のように入力します。

?recruit #ルーム1 22時からアルバハHL

 

f:id:hiro_gomafu:20190228030739p:plain

すると、#ルーム1チャンネルにもBOTによって同様の内容が書き込まれます。

f:id:hiro_gomafu:20190228030816p:plain

また、マルチバトルが終了したら、ルームで「?endbattle」を実行することで、ログを削除することができます。

f:id:hiro_gomafu:20190228030941p:plain

f:id:hiro_gomafu:20190228031000p:plain

また、募集チャンネルにはチャンネルが使用可能になったことが通知されます。

f:id:hiro_gomafu:20190228040538p:plain

たった2つのコマンドですが、マルチバトルの募集や参加がとても捗るようになりました!

 

さいごに

如何だったでしょうか?Dynoのカスタムコマンド、便利ですね!

ただ、いくつかかゆいところに手が届かない仕様もあります。

・引数はレスポンスの本文中や任意のコマンドを実行する時には使えるが、例えば「{respond:$1}」のような使い方はできない

・任意のコマンドの実行({!****})ではカスタムコマンドを実行できない

以上のように、少々かゆい部分に手が届かない仕様もあります。

後者などは無限ループの原因となってしまうので仕方ないのでしょうね。

それでもカスタムコマンドは非常に強力なモジュールであることに変わりはありません。

あなたも独自のコマンドを考えて作ってみてください!

それでは、よきDiscordライフを!