Discord.jsで作るbot(基礎編)

# はじめに
この記事は[N高等学校アドベントカレンダー2020](https://qiita.com/advent-calendar/2020/n-highschool)の16日目に投稿された記事です。
Discord.jsでBot作りたいが何から始めたらいいのかわからない方を対象にしています。この記事を読んで、わからないことがあればコメントなどで質問してください。
なお、製作者自身も初心者ですので、至らない点があればコメントなどで教えていただけると幸いです。

# 事前準備
### node&npmのインストール
一から説明すると長くなってしまうので[こちら](https://qiita.com/nassy20/items/8504ce0dbf427270efd8)の記事を参考にしてください。
### フォルダの作成
フォルダを作成したい場所まで移動して　

```node:node
$ mkdir discordBot
$ cd discordBot
$ touch index.js
```
を上から順番に実行してください。

### discord.jsのインストール
先ほど作ったフォルダにdiscordbotを開発するためのdiscord.jsをインストールします。

```node:node
$ npm install discord.js
```
このコマンドを実行してから、

```node:node
$ npm list discord.js
/home/vagrant/workfile/discordBot
└── discord.js@12.5.1
```
このようなログが出ればインストールに成功しています。

### botのアカウントを作成する
わかりやすく解説してあるので[このサイト](https://discordpy.readthedocs.io/ja/latest/discord.html)を参考にしてください
# コード作成
ここまでできたらbotを制作する環境は整いました。
今回は、私が以前作ったlogをとるbotを元にdiscordbotの作り方を解説していきます。
実際に動作するソースコードを元に解説するのでコピペでも動作します。
(tokenは自分のものを使ってね)
※この記事では長くなってしまうので全ての解説はしません。今回は基礎編になります

## 基礎
discord.jsを使うことを宣言します。

```javascript:index.js
const Discord = require('discord.js');  //discord.jsを使うことを宣言
const client = new Discord.Client();    
const token = "YOUR TOKEN";             //bot token

client.on('ready',() => {   
  console.log("ready,,,");
});

client.login(token);
```

ここまでかけたら

```node:node
$ cd ~/discordBot
$ node index.js
```
を上から順に実行して、サーバーにいる自分のbotがオンラインになりコンソール画面に ready,,,　と表示されれば成功です。

## 実験
ここまででbotを起動することはできました。しかし現状ではただただbotが起動しただけでなんの機能も持っていません。一度実験としてメッセージに反応させて見ましょう。

```javascript:index.js
const Discord = require('discord.js');    //discord.jsを使うことを宣言
const client = new Discord.Client();    
const token = "YOUR TOKEN";               //bot token

client.on('ready',() => {   
  console.log("ready,,,");
});

//////////////↓追加↓//////////////
client.on('message',message =>{        
  if(message.author.bot){                 //botからのメッセージを無視しています
    return;
  }else if(message.content === 'test'){
    message.channel.send("これはテストです");
  }
});
//////////////↑追加↑//////////////

client.login(token);
```
コードがかけたら先ほどと同じように

```node:node
$ cd ~/discordBot
$ node index.js
```
を上から順に実行してbotを起動しましょう、起動が確認できたらbotがいるサーバーで test と発言してみましょう。
botが これはテストです と反応すれば成功です。
ここまでくればなんとなくbotに反応させる方法がわかってきたんじゃないないでしょうか？
botに何かさせたい場合簡単な動作なら

```javascript
client.on('message',message =>{        
  if(message.author.bot){                 //botからのメッセージを無視しています
    return;
  }else if(message.content === '処理を実行するときに使う文字列'){
    上の文字列が送信されたときの処理
  }
});
```

このコードの形がbotを文字列で反応させる基本になります。
### 相手の発言を🦜返しするbotを実際に作ってみる
ユーザーが発言したら全く同じ文を返すbotを作成してみましょう。
基礎のコードにユーザーが発言したらその発言を取得するコードを追加します。

```javascript:index.js
const Discord = require('discord.js');  //discord.jsを使うことを宣言
const client = new Discord.Client();
const token = "YOURTOKEN";             //bot token

client.on('ready', () => {
  console.log("ready,,,");
});

//////////////↓追加↓//////////////
client.on('message', message => {
  if (message.author.bot) { //botからのmessageを無視
    return;
  }
  let msg = message.content; //ユーザが送信したメッセージはmessage.contentで取得可能
  message.channel.send(msg); //メッセージが送られたチャンネルに返信
});
//////////////↑追加↑//////////////

client.login(token);
```
知らないコードが出てきましたねざっくり解説してきます。

```javascript
let msg = message.content;
message.channel.send(msg);
```
今回新しく出てきたのはこの部分です。簡単にいったら変数 msg に ユーザーのメッセージを入れて、変数 msg をメッセージが送られたチャンネルに送信しています。今回は基礎編なので詳しくは解説しません。
今気になるかたは[discord.jsドキュメント](https://discord.js.org/#/docs/main/stable/general/welcome)をみてみたらわかるかもしれません。
### 終わりに
今回は基礎編とゆうことでユーザーのメッセージに反応するbotが作成できました。
繰り返しになりますが、ここがわからない！！やここ間違ってるよなどありましたらコメントなどで教えていただけたら幸いです。
次回は送信先の設定について記事書きます。
明日のアドカレはコーラ狂いの @hato-poppo  です。