discordにHubotを呼ぶ

discordという、slackに通話機能を足したような、ゲーマー用のチャットシステムがあります。
もうぶっちゃけ殆どslack……で、やっぱりBotも作れるみたい。

なので、今回はBotを作成して`ping` `PONG`までさせてみようと思います。

今回呼ぶ(作成する)Botは松岡美羽ちゃん!
`yo`コマンドや`hubot`を作成するコマンドは入っている前提でお話します……
ここいらのインストールはSlackでHubotな記事を参照してみて下さい。

## discordアダプターを入れる

```zsh
$ npm install -g hubot-discord
```

今回はHubotのアダプターとして[thetimpanist/hubot-discord](https://github.com/thetimpanist/hubot-discord)を使わせて頂きます。

## Bot作成

```zsh
$ mkdir miu
$ cd miu
$ yo hubot
                     _____________________________  
                    /                             \ 
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             / 
 ======= |[^_/\_]|   /----------------------------  
  |   | _|___@@__|__                                
  +===+/  ///     \_\                               
   | |_\ /// HUBOT/\\                             
   |___/\//      /  \\                            
         \      /   +---+                            
          \____/    |   |                            
           | //|    +===+                            
            \//      |xx|                            

? Owner shyazusa <shy.azusa@gmail.com>
? Bot name miu
? Description A simple helpful robot for your Company
? Bot adapter discord
   create bin/hubot
   create bin/hubot.cmd
   create Procfile
   create README.md
   create external-scripts.json
   create hubot-scripts.json
   create .gitignore
   create package.json
   create scripts/example.coffee
   create .editorconfig
                     _____________________________  
 _____              /                             \ 
 \    \             |   Self-replication process   |
 |    |    _____    |          complete...         |
 |__\\|   /_____\   \     Good luck with that.    / 
   |//+  |[^_/\_]|   /----------------------------  
  |   | _|___@@__|__                                
  +===+/  ///     \_\                               
   | |_\ /// HUBOT/\\                             
   |___/\//      /  \\                            
         \      /   +---+                            
          \____/    |   |                            
           | //|    +===+                            
            \//      |xx|
```

`? Bot adapter `と訊かれたら`discord`と入力して`Enter`。それ以外は`Enter`連打でも大丈夫です。

## discordでアプリ作成

ここまで来たら一旦ターミナルとはお別れです。
discordから新しいアプリケーションを作成しましょう。
[Discord - Developer Documentation](https://discordapp.com/developers/applications/me)
ここの`My Applications`から新規アプリを作成。

アプリの名前を入力してアプリアイコンを決めたら、`Create Application`をクリック。(アプリアイコンは後からでも変えられるっぽい?ここは未体験)

すかさず`Create a Bot User`押下。
`APP BOT USER`の欄が出現すると思うので、それの中の`Token:`の横の`click to reveal`をクリックしてTokenを取得。
このTokenの値はクリップボードにでもコピーしておきます。

## 再びターミナルへ

ターミナルへ戻って
`package.json`内の`"engines":`内の`node`バージョンの指定を変更しておきます。
```zsh
$ vim package.json
```

```json:package.json
  "engines": {
    "node":"0.12.7"
  }
```

[Crash on Heroku · Issue #6 · thetimpanist/hubot-discord](https://github.com/thetimpanist/hubot-discord/issues/6)
ここにも書かれている通り、そのままHerokuへ上げるとnodeのバージョンがどうとかでクラッシュします。

## `heroku`へアップロード

```zsh
$ git init
$ git add .
$ git commit -m "first commit"
$ heroku create [アプリ名]
$ git push heroku master
$ heroku config:set HUBOT_DISCORD_EMAIL="自分のアドレス"
$ heroku config:set HUBOT_DISCORD_PASSWORD="自分のパスワード"
$ heroku config:set HUBOT_DISCORD_TOKEN="クリップボードにコピーしたトークン"
```

Herokuに上げたら、HerokuのBotのURLをクリップボードにコピーしておきます。

## 再びdiscordのアプリ設定画面へ

ここまで来たらもう少しです。

Botの名前入力欄右の、`REDIRECT URI(s)`から`Add a Redirect`で、herokuのURLをペースト。
一度`Save Changes`して、`APP DETAILS`欄の中の`Client/Application ID:`の後の数字をコピーしましょう。

`https://discordapp.com/oauth2/authorize?client_id={コピーしたClient/Application ID}&scope=bot`
にアクセスします。

自分のBotを呼びたいサーバをプルダウンから選んで`Authorize`をクリックします。(目的のサーバが表示されない場合、権限を持っていないかもしれません。サーバの管理者から権限を頂きましょう……。)

## Botを確認する

選択したサーバに入ってみると……

![スクリーンショット 2016-06-06 22.41.12.png](https://qiita-image-store.s3.amazonaws.com/0/88650/0c186b0a-2244-0924-a6d1-20840c75804f.png)

サーバでBotが**オンライン**になっていれば成功です。
もしもオフラインになっていた場合は、上手く起動できていない可能性があります。
Herokuのlogを確認してみましょう。

![スクリーンショット 2016-06-06 22.42.23.png](https://qiita-image-store.s3.amazonaws.com/0/88650/bd1c3b52-7275-a543-cf9a-707765ec3a86.png)

`ping`にも`PONG`を返してくれています!! :tada: 

以上です。

## 最後に……

もっと画面の説明とかキャプチャ撮れば良かった……
けれど、ClientIDとかTokenとかが見えちゃってたら怖いし……
こんな説明でごめんなさい!!