こんにちはっ!
今回は、簡単にDiscordBotを作ってみよう!ということで、discord.jsにて入退室を通知するBotを作っていきたいと思います。
Botアカウントを作成
まず最初に、Botのアカウントを作成します。
以下のURLよりDiscord Developer Portalに移動します。
https://discord.com/developers/applications
次にNew Applicationをクリックします。
CREATE AN APPLICATIONという画面が出てきます。
NAMEというところに、今回作りたいBotの名前を入力します。
TEAMはよくわからない場合は、デフォルトのPersonalのままで大丈夫です。
入力が終わったら、Createをクリックします。
Botが作成できました。まず、Botのアイコンを設定してみましょう。
APP ICONをクリックしてアイコンにしたい画像を選択します。
選択が終わったら、下の方に表示されている緑のSave Changesをクリックして先程変更した内容を保存します。
ここで保存を忘れてしまうと設定したアイコンが消えてしまうので必ずしましょう。
設定の保存が完了すると、”All your edits have been carefully recorded.“と表示されます。
次にBot本体を作っていきます。
右側のSETTINGSにある①Botをクリックして選択します。
その次に、②のAdd Botをクリックします。
すると、ADD A BOT TO THIS APP?と確認画面が出てきます。
ここに書いてある英文を簡単に言うと「Botのユーザーを追加すると、Discordに表示されます。一度追加すると削除できません。しっかり考えてください。」みたいなことが書かれています。
問題ないので、Yes, do it!をクリックします。
“A wild bot has appeared!“と表示されていればBotのアカウント作成が完了です。
次に、入退室時にイベントが働くようにインテントと呼ばれる制限へのアクセスを許可する必要があります。
先程Botのアカウントを作成したページを下に移動すると、「Privileged Gateway Intents」という項目があります。
ここで、「SERVER MEMBERS INTENT」を有効化してアクセスを許可します。
これで、Discord Botで入退室時にイベントが動くようになります。
なお、Botの導入サーバー数が100サーバーを超えている場合はDiscordに別途申請をする必要がありますのでDiscordのサポートセンターまでお問い合わせください。
動かす環境を整える
次に、Botを動かす環境を整えます。
自分のPCなどに、動作環境を作るのもいいですが24時間動かしたいという場合は、VPSを使用することをおすすめします。
今回はdiscord.jsでDiscordBotを動かすため、Node.jsが必要です。
nodejsのインストール方法がわからない!という方には、ぜひConoHa VPSをおすすめします。
ConoHa VPSでは、複数のテンプレートが用意されています。
その中に、Node.jsのテンプレートがあります!
初心者でも簡単に環境を作ることができおすすめです。
ConoHa VPSのお申し込みはこちらからっ!
VPSは月々お金がかかるから払えないという方のために、WindowsとCentOSでのインストール方法も簡単に紹介します。
Windowsでのインストール
Windowsでのインストール方法を簡単に紹介します。
まず、nodejsのホームページに行きます。
https://nodejs.org/ja/
そして、ダウンロードの推奨版をクリックします。
インストーラーがダウンロードされます。
ダウンロードが終わったら開きます。
そして、インストーラーに言われるようにインストールしていけば完了です。
CentOSでのインストール
CentOSからインストールする場合、たった2行でインストールが可能です。
まず、リポジトリに追加します。
curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
次に、yumを使ってインストールします。
sudo yum install nodejs
これで完了です。
しっかりインストールができているか確認します。
node -v
フォルダーを作る
まず、Botを設置するフォルダーを作ります。
僕は今回narikakun_blogというファイル名にしました。
Discord.jsをインストール
まず、まず先程作ったフォルダーに移動します。
rootの下にnarikakun_blogというフォルダーをおいている場合は、以下のようなコマンドで移動できます。
cd narikakun_blog
まず、npmを使う際にnpm initをします。
英語で色々聞かれますが、全てエンターキーを押しても問題ありません。
npm init
次に、NodejsでDiscordBotを作るためにいちばん大切なdiscord.jsをインストールします。
コンソールを開いて以下のコマンドを入力します。
npm install discord.js
入力してインストールが終わるとこのように表示されます。
コードを書く
では早速プログラマーっぽいことをしていきましょう。
といっても、コピペでできるんですが笑
まず、実行ファイルを作成します。
今回は、index.jsというファイルにします。最後がかならず.jsになるファイルを作ってください。
作れたら、コードを書きます。(以下のコードをコピペしてもらって構いません。)
const Discord = require('discord.js');
const client = new Discord.Client({ws: { intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MEMBERS"] }});
client.login("<BotのToken>");
client.on('ready', () => {
console.log(`${client.user.tag}`);
});
client.on('guildMemberAdd', (member, guild) => {
const channel = member.guild.channels.cache.get("<チャンネルID>");
if (!channel) return;
channel.send(`**参加** ${member.user.tag}さんが参加しました!`);
});
client.on('guildMemberRemove', (member, guild) => {
const channel = member.guild.channels.cache.get("<チャンネルID>");
if (!channel) return;
channel.send(`**退出** ${member.user.tag}さんが退出しました。`);
});
では、Tokenを取得します。先程開いていたDiscord Developer PortalのBotのところにあるTOKENからReset Tokenをクリックして確認画面が出てくるのでYes, I do!をクリックします。
※もし、2FAと出てきたら二段階認証のコードを入力してください。
すると、Tokenが出てきます。Copyをクリックしてコピーして<BotのToken>の部分に貼り付けます。
このTokenは誰にも絶対に教えないでください。
教えた場合、Botが乗っ取られます。
<チャンネルID>という部分は、入退室ログを流したいチャンネルIDを入力してください。
コードが完成したら保存します。
実際に動かしてみよう
では早速先程書いたコードを使って動かします。
コンソールに以下のコマンドを入力します。(index.jsの部分は自分の作ったファイル名)
node index.js
うまくDiscordとつながれば、先程作ったBotの名前が表示されます。
これでBotは完成です。
Linuxで常時オンライン化したい場合は、以下のようにコマンドを実行します。
ログは、nohup.outに出力されます。
nohup node index.js
Botをサーバーに導入する
今のままでは、ただただBotが動いているだけでどこのサーバーにも居ないことになります。
先程開いていたDiscord Developer Portalを開いて、SETTINGSのOauth2を選択します。
そして、SCOPESでbotにチェックを入れます。
すると、下にBOT PERMISSIONSというのが表示されます。
ここで、Administratorにチェックを入れます。
管理者権限を渡したくない場合は、Administratorにチェックを入れなくても大丈夫です。
そして、SCOPESに戻りURLが表示されています。
Copyをクリックします。
次にブラウザを開きます。URL欄に、コピーしたURLを貼り付けて開きます。
BOTを追加する場所というところで導入するサーバーを選択します。
そして、先程選択したAdministrator(管理者)を与えることを確認します。
確認ができたら、認証をクリックします。
ロボットピポパポがあります。(Google reCAPTCHA)
チェックを入れます。
成功すると、認証しましたと表示されます。
しっかり導入できていることを確認します。
サーバーを入ったり抜けたりすると、しっかり動いてることがわかりますね。
あとは、コードを少しいじって自分オリジナルの入退室メッセージにしてみましょう!
最後に・・・
最後までお読みいただきありがとうございました。
特定のワードに反応するBotを作ってみたいという方は、別の記事があるのでぜひ!
宣伝なのですが、なりかくんのDiscordサーバーがあります!ぜひ参加して頂けるとありがたいです。
https://discord.gg/cCpcFQN
困ったことがあったら、、
この記事に関して、困ったことがありましたらなりかくんのブログ公式Discordサーバーにて質問をすることが可能です!
ぜひ入ってみましょう!
終わりですっ!ありがとうございました。
こんにちは、記事をお読みいただきありがとうございます!
こちらの記事の情報が少し古くて申し訳ございません、、、
現在Discordはインテントと呼ばれる制限がありまして、それに引っかかっている模様です。
解除方法等も追記させていただきますね!
申し訳ございませんでした、、今後ともよろしくお願いいたします。
見やすくてわかりやすい記事ありがとうございます。
実際にConohaVPSで動かしてみたのですが、オンラインになるだけで、入退室ログが返ってきません。設定が悪いのかと思い、簡単な応答Botに書き換えてみたのですが、その時はちゃんと機能しました。
この記事に掲載されているコードは現在でも動くものなのでしょうか?