Discord Botを作ってGoogleComputeEngineに配置

# はじめに

pythonの勉強がてら、discordでしょうもないBOTを作成してGCPのクラウドサーバーに載せてみたいと思います。
Discord側の設定と、GCPの登録方法がメインです。Discord側の設定は以下をめちゃくちゃ参考にさせていただきました。

[Pythonで簡単なDiscord Botの作り方](https://qiita.com/PinappleHunter/items/af4ccdbb04727437477f)

## 環境
* Windows10
* Python3.6.6

## Discord側の設定

まずはテスト用サーバーを作る。左ペインのサーバー追加ボタンを押して、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/9d890137-e482-35e1-0362-22c0e14a20fe.png)

「新規作成」を選びサーバーを追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/6a2bdb77-9e3e-28a7-551c-8d7ec2bdd22c.png)

名前は適当に入力しましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/c63e8dbd-03ed-fdf0-b613-95edfc7d3ae1.png)

サーバーが追加できました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/388ac3d2-4f26-651e-244b-542350cf49db.png)

今度は、ブラウザでDiscordのBotを登録しましょう。
Discordにログインし、[マイアプリ](https://discordapp.com/developers/applications/me)のページを開きます。
(既に1個アプリが存在しますが気にしないでください)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/ba06d263-8724-b7b8-6c41-5767548ca5fd.png)

「新しいアプリ」ボタンを押して、アプリの名前やアイコン、説明を入力して「作成」をクリックすると、こんな画面になります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/b2843f34-e77b-5105-b99c-e5160db27bf9.png)

「Botユーザーを作成」ボタンを押してBotユーザーを作成してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/dbd037b0-4393-912d-44bf-a74a0b223aaf.png)

こんな感じになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/db09fc05-4adf-9b02-bf29-cf41aca4f25e.png)

次はOAuthの設定。「Generating OAuth2 URL」を押して、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/9cc6370a-3d3d-3e53-6337-28c35641db30.png)

OAuth2 URL右の「COPY」を押してクリップボードにコピー。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/50d2baa5-c3e6-f711-04c4-d4577eabfb6c.png)

コピーしたURLをブラウザで開くと、以下のような画面になります。
サーバーを選んで認証し、ロボットチェックを超えれば…
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/eedd9bba-dde2-8384-96d4-ca210b6bcdee.png)

最初に作成したDiscordのサーバーに、BOTが追加されています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/921ba616-f83f-a1f2-73bc-328ff0048e6d.png)


## Pythonの設定

まずはPython3の環境を作ります。
Windowsなので、Pythonは普通にインストーラーをダウンロードしてインストールしました。

* 2018/07/01現在、一部のライブラリがPython3.7.0に対応しておらず実行できません。3.6.6以下を使用してください。

discordライブラリをインストール。

```powershell
> pip install discord
```

あとはBOTのプログラムを書く。
今回は誰かが「そうなの？」とか聞くと「ソーナノ」を返してくれるようなBOTを作成します。[GitHub](https://github.com/amama-nagigi/WobbuffetBot)で公開してみたのでよければどうぞ。
以下のように実行すると、先ほどのサーバーに追加されたBOTがチャンネルに参加します。

```powershell
$ py main.py
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/35a46fb1-2b6e-4e32-9316-f24a8207b008.png)

同じチャンネルに参加している人が「ソーナノ」とか言えばBOTが反応してくれます。

## GoogleComputeEngineの設定

すみません、GCPに登録してプロジェクト作るところまで事前にやっちゃいました。。。
仮想マシンを作ってdebianを入れて、BOTをデプロイするところをやりましょう。

まずはインスタンスを作ります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/57e8d2f0-0408-50e5-8abf-5aa6571099d2.png)

リージョンを北米、マシンタイプをmicroにします。これで1か月の料金が無料になるはず。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/5ffddc8e-96b3-4b2e-79cd-c4be210f4743.png)

インスタンスが出来ました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/23bfda26-12cd-43ad-6a64-c0b9a4ab8ff7.png)

まずはSSHでつなげるようにしたいですね。以下を参考にさせていただきました。
[GCPに共通鍵を追加する手順まとめ](https://qiita.com/ariaki/items/e225b815924d37bc19d5)

SSH公開鍵の設定が終わればTeraTerm等で接続できます。私はいつもWinSCP+PuTTYを使用してログイン情報を保存しています。

ホスト名には作成したVMの外部IPを記載します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/83d7fcf6-ba3d-3b04-0b50-e515558bfed0.png)

「設定」から設定を開いて秘密鍵を設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/ea06458f-5ab2-b33b-e444-6072177cae01.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/a3861618-3916-bc9f-a843-5fe934d1f8d5.png)

SSH接続できました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/d823e8f8-d8d6-9d8e-d889-fdea4dfee605.png)

## Linux設定

次はいよいよ、作成したLinuxにPythonとかをインストールし、Botをデプロイしてみます。

```sh
$ python3 --version
Python 3.5.3
```

Pythonは最初から入ってるみたいですね。pipはないみたいなのでまずはpipをインストールし、その後実行に必要なdiscordモジュールをpipでインストールします。

```sh
$ sudo apt install python3-pip
$ sudo python3 -m pip install discord
```

先ほどのソースを配置します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/174324/bbc89d7c-8f34-6bf1-5af3-4c16314c515a.png)

sshでフォルダに移動して実行。

```sh
$ pwd
/home/amama/WobbuffetBot
$ nohup python3 main.py &
```

これでBotが起動しました。あとはログアウトしても大丈夫です。

# 最後に

DiscordBotを常時立ち上げておける環境がないか探していたのですが、GCPが無事に使えそうでよかったです。次はGCP上でコンテナ動かすとかやってみたいですね。