[Node.js] [Discord] Discord の Bot を作る。 その3

遅くなりましたがBotを作るの最終編です。

全体の流れ

  1. Botの用意をする。
  2. 開発環境を用意する。
  3. テストコードを作成する。
  4. ボイスチャンネルの入退出に反応するようにする。 <- いまここ

Eris の仕組み

今更ながらErisの仕組みについて簡単に説明します。

ErisはBOTとしてDiscordにログインした後にサーバーから色々な情報を受信します。

その情報をイベントという形で受け取り処理を行うようにします。

以前に行った、メッセージを受け取ってPing!Pong!するのもその仕組みを利用しています。

ボイスチェンネルの入退出に反応する。

Erisには様々なイベントが用意されていますが今回はその中で下にある3つのイベントを使用します。

他のイベントについては詳しくは以下のドキュメントを参照してください。

Eris Document Client Class
※下のほうに Event の項目があります。

使用するイベントの種類

イベント名 タイミング コールバックの引数
voiceChannelJoin ボイスチャンネルに誰かが入った時。 (member, newChannel)
voiceChannelSwitch 別のボイスチャンネルに誰かが移動した時。 (member, oldChannel, newChannel)
voiceChannelLeave ボイスチャンネルから誰かが退出した時。 (member, oldChannel)
引数の説明
引数名 説明
member Member 入室または退室を行ったメンバー
newChannel GuildChannel そのメンバーの入室先のボイスチャンネル
oldChannel GuildChannel そのメンバーの以前まで居たボイスチャンネル

型は Eris 上での型です。詳細は Erisのドキュメントを参照してください。

とりあえずはボイスチャンネルに入退出したらコンソール上に出力ようにします。

ソースコードはこちら。

const Eris = require("eris");

// BOT_TOKEN は 自身が作成したBotの Bot token の文字を記述します。
var bot = new Eris("BOT_TOKEN");

bot.on("ready", () => {
    // bot が準備できたら呼び出されるイベントです。
    console.log("Ready!");
});

bot.on("voiceChannelJoin", (member, newChannel) => {
    // 誰かがボイスチャンネルに入った時に行う処理
    console.log("%s が チャンネル %s に入室しました。", member.username, newChannel.name);
});

bot.on("voiceChannelLeave", (member, oldChannel) => {
    // 誰かがボイスチャンネルから離れた時に行う処理です。
    console.log("%s が チャンネル %s から退室しました。", member.username, oldChannel.name);
});

bot.on("voiceChannelSwitch", (member, newChannel, oldChannel) => {
    // 誰かがボイスチャンネルを移動した時に行う処理です。
    console.log("%s が チャンネル %s から %s に移動しました。", member.username, oldChannel.name, newChannel.name);
});

// Discord に接続します。
bot.connect();

スポンサーリンクです。

 

ソースコードの補足していきます。

var bot = new Client("BOT_TOKEN")

ここでClientオブジェクトを作成しています。BOT_TOKENは前回使用したものと同じものを使用してください。

bot.on('voiceChannelJoin', (member, newChannel) => { ... } );

bot.on()でイベントを登録します。ここでは voiceChannelJoin というイベントを登録してます。 第二引数にイベントが呼び出された時の処理を関数として書きます。

member.username はユーザー名を、 newChannel.name はチャンネル名を取得します。

このソースコードを以下の環境で実行するとこんな感じになります。

いつものテストサーバーです。

結果

コンソールのほうに出力されましたね!

あとはこれを実際のボイスチャンネルに流すだなのですが、 とりあえずデフォルトチャンネルに流すようにします。

先程のソースコードの console.log() の部分を以下のように変更してみてください。 少々荒っぽい方法です。

bot.on("voiceChannelJoin", (member, newChannel) => {
    // 誰かがボイスチャンネルに入った時に行う処理
    let ch = newChannel.guild.defaultChannel;
    ch.createMessage(member.username + "が チャンネル[" + newChannel.name + "] に入室しました。");
});

bot.on("voiceChannelLeave", (member, oldChannel) => {
    // 誰かがボイスチャンネルから離れた時に行う処理です。
    let ch = oldChannel.guild.defaultChannel;
    ch.createMessage(member.username + "が チャンネル[" + oldChannel.name + "] から退出しました。");
});

bot.on("voiceChannelSwitch", (member, newChannel, oldChannel) => {
    // 誰かがボイスチャンネルを移動した時に行う処理です。
    let ch = oldChannel.guild.defaultChannel;
    ch.createMessage(member.username + "が チャンネル[" + oldChannel.name + "] から [" + newChannel.name + "] に移動しました。");
});

さっくり解説をすると以下の通りです。

// oldChannel が所属している guild の デフォルトチャンネルを取得する。
let ch = oldChannel.guild.defaultChannel;

// チャンネルに 'hoge' を送信する。
ch.createMessage('hoge');

guildというのはDiscordのサーバー1つ1つの事だと思ってください。

これを実行してボイスチャンネルに出入りするとデフォルトチャンネルに以下のように表示なります。

わーい!

特定のチャンネルに出力したりということを行うには少し工夫が必要になりますので、 それはまたの機会に気力があれば紹介出来たらなと思います。

[Node.js] [Discord] Discord の Bot を作る。 その2

全体の流れ

  1. Botの用意をする。
  2. 開発環境を用意する。 <- いまここ
  3. テストコードを作成する。 <- ここもやる
  4. ボイスチャンネルの入退出に反応するようにする。

開発環境を用意

まず前提として Node.js が必要になるので無い人はインストールしてください。 そして、コマンドプロンプトやターミナル上で npm が使用できることを確認してください。

次に適当な場所に作業フォルダを作っておいてください。
(例として今回は e:\work\discord_bot を作業用フォルダにしてます。)

そしたら次にコマンドプロンプトで作業用フォルダを開き、以下を実行します。

e:\work\discord_bot\> npm install --no-optional eris

※今回はVoice関連の機能を利用しないので --no-optional を付けてます。もし必要であれば --no-optional を外しましょう。

npm initをしていないため、package.json が無いとの警告は出ますが、今回は動かすだけなので 気にせずにいきます。

テストコードを作成

環境が整ったところでソースコードを書いていきます。 なにかしらのテキストエディタがあると楽です。
※個人的にはNode.js向けの環境が初めからある程度整ってる Visual Stadio Code をおすすめしておきます。

動作テスト用のテストコードは Erisの公式サイト にありますのでそちらを流用します。

まずは作業フォルダに適当な名前のjavascriptファイル(今回はtest.js)を作成します。 そして以下のソースコードを書いてきます。

const Eris = require("eris");

// BOT_TOKEN は 自身が作成したBotの Bot token の文字を記述します。
var bot = new Eris("BOT_TOKEN");

bot.on("ready", () => {
    // bot が準備できたら呼び出されるイベントです。
    console.log("Ready!");
});

bot.on("messageCreate", (msg) => {
    // 誰かがメッセージ(チャット)を発言した時に呼び出されるイベントです。
    if(msg.content === "!ping") {
        // "!Ping" というメッセージを受け取ったら "Pong!" と発言する。
        bot.createMessage(msg.channel.id, "Pong!");
    } else if(msg.content === "!pong") { 
        // "!Pong" というメッセージを受け取ったら "Ping!" と発言する。
        bot.createMessage(msg.channel.id, "Ping!");
    }
});

// Discord に接続します。
bot.connect();

BOT_TOKEN については 前回の記事 でBotを作ったページを開き、 以下の画像の赤枠箇所をクリックすると
BotToken

以下の画像の赤枠内にずらーっとながい文字列が並ぶので、それをコピーして貼り付けてください。
BotToken

このTokenは他人には教えないようにしてください。悪用の恐れがあります。

ソースコードの内容としては "!ping" とメッセージを入力したら "Pong!"、"!pong"と入力したら "Ping!"と返します。

Erisはこのようにイベントを登録して、そのイベントが発生すると処理を行うという形になっています。 この仕組を利用して、返信したりするBotを作成していきます。

ここまで出来たら実行をしてみます。

コマンドプロンプトやターミナルを開いて、以下を実行してください。

e:\work\discord_bot\> node test.js

実行に成功すると以下のようになるはずです。

e:\work\discord_bot\> node test.js
Ready!
_

ではDiscordを開いて、サーバーのほうを確認してみます。

ちなみにmarkdown編集用sublimetextです。

Botがログインしてるのがわかります。やったー。

では先程のソースコードの通り、返信されるかも確認します。

チャット欄に "!ping" または "!pong" と打ち込むと...

簡単とはいえ反応返してくれるだけでも楽しい

ちゃんと返信されました!

返信するだけのものであればこんな感じに結構簡単につくれるようになってます。


次回はボイスチャンネルの入退室に反応するようにします。

[Node.js] [Discord] Discord の Bot を作る。 その1

ボイスチャンネルの入退出お知らせを出来るのを目標にチュートリアルを書きます。 一気に内容を書くのも私が疲れるので、3回ぐらいに分けます。

なお、javascriptやnode.jsをある程度使えることを前提にしてます。 あとOSはWindowsですが、Node.jsが使える環境であれば同じだと思います。

全体の流れ

  1. Botの用意をする。 <- いまここ
  2. 開発環境を用意する。
  3. テストコードを作成する。
  4. ボイスチャンネルの入退出に反応するようにする。

今回はこの中の Botを用意する を行います。

Botの用意

※今後、Discord側の仕様が変更された場合に方法が変わっている可能性がありますのでご注意ください。

まずはDiscordのホームページを開きます。

次に開発者ページに移動します。 ※Discordへのログインが必要です。
開発者ページ

次に My App をクリックします。
My App

右側にこのようが画面が表示されるので、 New Appをクリックします。
ChenBotはこの記事を書く前に作成してました。

Botの名前と必要であれば画像を選択し、Create Appをクリックします。
NekoBot

作成に成功したら、以下の画面になるので、Create a Bot Userをクリックします。
Create Bot User

次にブラウザで以下のURLにアクセスします。

https://discordapp.com/oauth2/authorize?&client_id={Client ID}&scope=bot&permissions=0

{Client ID} は以下の画像のように表示されてる数値をそのまま入力してください。
Client ID

成功すると以下のような画面が出るので、Botを追加する先のサーバーを選択して、認証ボタンをクリックします。
※最初のうちはテスト用のサーバーを作っておくのがいいかもです。
Server選択

Discordクライアントを見てサーバーに以下のようにBotが参加してたらOKです。
※テスト用サーバーなのでぼっちなのは仕様です。
ぼっちサーバー


今回はここまで。次回から開発環境を用意して、とりあえず動かすところまでやります。

Node.js で Discord の bot を作ってみたお話。

ちょっとしたきっかけでDiscordのbotを作ってみました。

↓こんな感じのもの。

ちぇんちゃんが入退室お知らせしてくれる。

返信よるコマンド機能とか

Botの作り方は別の記事で書くとして、とりあえず紹介として今回利用した環境は以下の感じ。

javascriptとNode.jsの知識があれば割りとすぐに出来る感じです。

  • 1