Discord.jsで簡単にbotを作成する【基礎編】

##はじめに
最近流行りのDiscord、どうやらNode.jsを使って簡単にbotを作れるらしい...
ということで挑戦。その時のメモ。
##前提
### Node.js Ver.9.x以降がインストールされてる事
漢は黙ってインストール

```Node.jsインストールコピペ
sudo apt-get update ; sudo apt-get upgrade ; sudo apt-get install -y nodejs npm ; sudo npm cache clean ; sudo npm install n -g ; sudo n stable ; sudo ln -sf /usr/local/bin/node /usr/bin/node
```
### DiscordのAPI Tokenをゲットしておく
 [DEVELOPER PORTAL](https://discordapp.com/developers/applications/me)へ行って "New App" をクリック→"APP NAME" と"APP ICON" を設定して "Create App"をクリックする。
終わったら"Bot"にある "Create a Bot User" でBotユーザーを作る。
"Bot"欄に"Username"と"Token:click to reveal"が表示されるので、"Token:click to reveal"をクリックして、表示されたTokenをメモっておく。
##とりあえず作ってみる
### 1. `App.js`を作ってエディタで開く
(テキストエディタ戦争が起こりそうだけどここはvimで)

```
touch App.js
vim App.js
```
### 2. 以下の内容をコピペ
```App.js
//ログイン処理
const Discord = require('discord.js');
const client = new Discord.Client();
const token = 'ここにBotのToken';
client.on('ready', () => {
    console.log('ready...');
});
//Bot自身の発言を無視する呪い
client.on('message', message =>{
    if(message.author.bot){
        return;
   }
//↓ここに後述のコードをコピペする↓

//↑ここに後述のコードをコピペする↑
});
client.login(token);
```
###3. 基本的なコードを押さえよう
#### ・指定した語句の場合返信する(完全一致)
例;「寒いね」と言った場合に「寒いね」と返信する
<b>~~寒いねと話しかければ寒いねと答える人のいるあたたかさ~~</b>

```App.js
      if (message.content === '寒いね') {
        let channel = message.channel;
        let author = message.author.username;
        let reply_text = `寒いね`;
        message.reply(reply_text)
            .then(message => console.log(`Sent message: ${reply_text}`))
            .catch(console.error);
        return;
   }
```
#### ・指定した語句を含む場合返信する(部分一致)
例;「おはよ」を含む場合に「おはようございます！」と返信する

```App.js
if (message.content.match(/おはよ/)) {
        let channel = message.channel;
        let author = message.author.username;
        let reply_text =`おはようございます！`;
        message.reply(reply_text)
            .then(message => console.log(`Sent message: ${reply_text}`))
            .catch(console.error);
        return;
    }
```
#### ・コマンド送信者にメンションを行わずに返信する
<b>上記のコマンドと異なりメンションは行われません！</b>
例;「おはよ」を含む場合に「おはようございます！」と返信する

```App.js
if (message.content === 'おはよ') {
//部分一致の場合は if (message.content.match(/おはよ/)) {
message.channel.send(`おはようございます！`)
}
```
#### ・指定した語句を含む場合投稿を削除する
SPAM対策に有用
例;Discordの招待リンク「discord.gg」を含む場合は削除する

```App.js
    if (message.content.match(/discord.gg/)) {
        message.delete(100)
   }
```
<b>Tips </b>
${author}で発言者の名前を抜き出せます
例;「おはよ」を含む文字を発言した場合、「（発言者）さん、おはようございます！」と発言する

```App.js
if (message.content.match(/おはよ/)) {
message.channel.send(`${author}さん、おはようございます！`)
}
```
### 4. 実行してみよう
「寒いね」と言われたら「寒いね」と返信して、「discord.gg」を含むワードがある場合は削除するBot

```App.js
//ログイン処理
const Discord = require('discord.js');
const client = new Discord.Client();
const token = 'ここにBotのToken';
client.on('ready', () => {
    console.log('ready...');
});
//Bot自身の発言を無視する呪い
client.on('message', message =>{
    if(message.author.bot){
        return;
   }
//↓ここに後述のコードをコピペする↓
   if (message.content === '寒いね') {
        let channel = message.channel;
        let author = message.author.username;
        let reply_text =`寒いね`;
        message.reply(reply_text)
            .then(message => console.log(`Sent message: ${reply_text}`))
            .catch(console.error);
        return;
    }
    if (message.content.match(/discord.gg/)) {
        message.delete(100)
   }
//↑ここに後述のコードをコピペする↑
});
client.login(token);
```
コードが書けたらとりあえず保存します。
保存できたら以下のコマンドを実行してください

```Node
npm install discord.js
node App.js
```
ready...と表示されたらとりあえずは成功です！
あとはApp.jsをゴニョゴニョ書き換えて自分だけのbotを作ってください。