[22日目] YouTubeも流せるDiscord 音楽Botを自分でホストする

こんにちは、なりかくんと申します。
この記事はなりかくん Advent Calender 2023の22日目の記事です。

最近、YouTubeを再生できるDiscord 音楽Botがほぼ無くなってきましたよね。そこで、自分でBotをホストして自分専用音楽Discord Botを作っていこうと思います。

# VPSを使う
今回は、24時間使えるようにVPSを使って音楽Botをホストしていきます。使うVPSは、私一押しVPSである「[ConoHa VPS](https://www.conoha.jp/referral/?token=ausaf8IhS..nt6TiYMGLBBD67fKxLmH_csmgtfGcdNYU0lxQHMGafYHHo0pBYg--QHL)」を使います。

https://www.conoha.jp/referral/?token=ausaf8IhS..nt6TiYMGLBBD67fKxLmH_csmgtfGcdNYU0lxQHMGafYHHo0pBYg--QHL

今回は、一人（一つのサーバー）だけで使う予定なのでUbuntu 22.04の2C1Gで作っていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/d3adcb7b-ddeb-8e0f-4061-e98d740d7a8b.png)

# 今回使うプログラム
今回は、GitHub上で見つけた1.7k Star ・ 2k Forksを獲得しているOSSのEvoBotというのを使っていこうと思います。
このBotを選んだ理由は、YouTubeに対応している点と日本語に対応している点、構築が簡単な点等です。

https://github.com/eritislami/evobot

# セットアップをしていく
VPSが構築出来たら、Tera TermなどでサーバーにSSH接続します。（rootではダメだろっ！っていう意見は受け付けないので、ダメだと感じた方はしっかり別ユーザーを作ってやってください。）
接続したら、Node.jsと常時起動するためのpm2をインストールします。

この二つのインストールは、以前私が紹介したこのコードで一発インストールします。

https://qiita.com/narikakun/items/5e91628e807af62c9a54

```shell
curl -sSL https://gist.githubusercontent.com/narikakun/d50ba6efd739a1fb3d08e46fa0b0077b/raw/d94cff02e57523839b78a1cff760044d077200db/install-node-lts-pm2.sh | sh
```

v20.xx.xxと出てきたらインストール完了です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/6c6ea4e3-1a24-8706-6998-12a51646a453.png)

Node.jsとpm2をインストール出来たら、EvoBotをクローンします。
```
git clone https://github.com/eritislami/evobot.git
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/8c7e6472-012a-4a98-a999-b3dcb2d8c719.png)

クローン出来たら、evobotのディレクトリに移動します。

```
cd evobot
```

移動したら、ライブラリをインストールします。

```
npm install
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/c764f2cb-306f-0894-0cc4-e77ecc6494c3.png)

# 設定する
ここでは事前にDiscord BotのToken取得とメッセージインテントを有効にしていることを前提に話を進めます。

Discord Botの設定はこちらを参考にしてみてください。

Bot作成方法

https://narikakun.net/technology/dis-saru-3/

インテント有効方法（記事の一部にあります。）

https://narikakun.net/technology/dis-saru-5/

まずサーバー上でイグザンプル設定ファイル config.json.example を本物設定ファイルとしてコピーします。

```
cp config.json.example config.json
```

次にvimコマンドで config.json を編集します。

```
vim config.json
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/b1c63b68-441e-34bb-d2be-ee1cb8c2d2b7.png)

TOKENにDiscord BotのToken、LOCALEをjaにします。
設定したら保存してvimを閉じます。

次に、このプログラムはTypeScriptで書かれてるので仕上げにpm2でTypeScriptで動かせるように以下のコマンドを入力しておきます。
```
cd  node_modules/.bin
pm2 install typescript
cd ..
cd ..
```
# いよいよ起動
では起動してみましょう。以下のコマンドで起動します。

```
pm2 start npm  -- run start
```

以下のコマンドでログを見れます。
```
pm2 logs 0
```

起動したときにBotの名前が出てきたら起動成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/ffa1f973-10f9-c3bf-3515-79a9201c4f99.png)

# 確認してみる
実際にBotが動いているか確認してみます。/play コマンドで再生してみます。しっかり再生できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549951/e3c15fef-06df-d704-d1f8-8b0eaffb0d94.png)

後、初期ボリュームはクソでかいのでconfig.jsonのDEFAULT_VOLUMEで変えるか /volume コマンドで変更してから流した方がよさそうです。
私の場合、ボリュームは10がおすすめです。

取扱説明書を日本語化してここに置いておきます。

- 🎶 YouTubeの音楽をURLから再生する
/play https://www.youtube.com/watch?v=GLvohMXgcBo

- 🔎 YouTubeの音楽を検索クエリ経由で再生する
/play under the bridge red hot chili peppers

- 🔎 再生する音楽を検索して選択する
/search Pearl Jam

- 📃 YouTubeのプレイリストをURLから再生する
/playlist https://www.youtube.com/watch?v=YlUKcNNmywk&list=PL5RNCwK3GIO13SR_o57bGJCEmqFAwq82c

- 🔎 YouTubeのプレイリストを検索クエリ経由で再生する
/playlist linkin park meteora

- 現在再生中 (/nowplaying)
- キューシステム (/queue)
- ループ / リピート (/loop)
- シャッフル (/shuffle)
- 音量制御 (/volume)
- 歌詞 (/lyrics)
- 一時停止 (/pause)
- 再開 (/resume)
- スキップ (/skip)
- キュー内の曲番号までスキップ (/skipto)
- キュー内の曲を移動 (/move)
- キューから曲番号を削除 (/remove)
- Discord APIへのpingを表示 (/ping)
- ボットの稼働時間を表示 (/uptime)
- ボットメッセージの削除を切り替える (/pruning)
- ヘルプ (/help)
- リアクション経由のメディアコントロール

# 最後に
Discordで楽しい音楽ライフを！！
最後までお読みいただきありがとうございました。