このはちゃんにDJやってもらう(Discord ボイスチャットBGMBot)

2022/07/31 run.sh 0.7.0 対応
2022/04/09 run.sh 0.6.8 対応

今日は某PVでDJやってたのでDJしてもらいます（圧


# 環境、使う物
* VPS AlmaLinux
* Docker
* Java OpenJDK buster
* JMusicBotJP  
  https://github.com/Cosgy-Dev/JMusicBot-JP

# VPS環境構築
ともあれベースとなるVPSを用意します

[ConoHaトップページ](https://www.conoha.jp/conoha/)のログインからコンソールに入りましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/60b0e7d3-9e68-78e3-b991-f931f38bd261.png)

サーバー追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/6754a998-9702-fbb9-6355-2a38f98e46ea.png)

* 今回試験環境なのでVPS割引きっぷは使わず
* 512MBプランで行きます  
切符、サイズは環境に合わせて作ってください
* イメージは今回AlmaLinux使います  
去年の年末からCentOSの動きが激しかったのでAlmaLinux使って行きます  
まあどうせDockerが動けばホストOSは何だっていいんです
* パスワードはジェネレータで適当に長いものを入れています
* ネームタグもわかりやすい物を
* SSH Keyは無い場合は新規作成、既存の物を使う場合はキーを選択します
* スタートアップスクリプトはyum upgradeにとどめておきます 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/6d307d2c-21a4-33f5-093e-51595001da96.png)

```shell
#!/bin/bash
yum -q -y makecache
yum -q -y upgrade

reboot
```

では作成しています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/7e8e0bf8-9915-4b23-ea96-03a531416130.png)

# VSCode接続

VSCodeにリモート環境をインストールします
これらをインストールしおきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/6ac2ded0-466d-ebbd-3a1a-6cd536298195.png)

Remote Explorerを選択し、SSH Targetに切り替え

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/a4a53963-fc8e-30b8-a76e-5cb154237fe5.png)

:gear:を選択し.ssh/configを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/479d3dbf-3c72-c345-5601-cde7bfb706a7.png)

Hostとユーザ、ポート、SSH鍵を指定して保存します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/ba4718f3-b22c-1c45-cf31-a3c092b55f6e.png)

追加されました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/9878b3cd-f52b-7f75-979f-597dfe7baeb9.png)

右端の新規Windowを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/6947a7f9-cda4-3059-6b3d-a1131713e212.png)

当然LinuxなのでLinuxを選択し
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/c08c6b58-07bd-380b-a10b-4d469953c6da.png)

SSHフィンガープリントを許可するか問われるのでContinueします

# Docker構築

SSH接続したVSCodeからターミナルを開きます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/91aef546-5a5c-1fc4-aef1-a1beceacc63a.png)


CentOS向けのインストール方法を参考に
https://docs.docker.com/engine/install/centos/

```shell
yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

systemctl enable docker
systemctl start docker
```

ExtensionからDockerを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/abc580ac-7630-d5db-23d5-02eb783cff5e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/9e9f6a0c-368d-de77-4adf-88a8f6c47585.png)

日本語のJapanese Language Packも必要であれば入れましょう

## Dockerfile作成

アプリケーション仕様上
どうしても実行jarファイルと同ディレクトリに設定ファイルを
置いてしまうのでdocker-composeを使ってマウントしています

```yml:./Docker/docker-compose.yml
version: '3'
services:
  jmusicbot-jp:
    build: .
    volumes:
      - ./app:/app
    working_dir: /app

```
```Dockerfile:./Docker/Dockerfile
FROM openjdk:11-slim-buster

RUN apt update && \
    apt install -y wget && \
    apt clean && \
    rm -rf /var/lib/apt/lists/*

CMD /app/run.sh

```

```shell:./Docker/app/run.sh
#!/bin/sh
VER=0.7.0
CONFVER=0.7.0

if [ ! -e JMusicBot-$VER.jar ]; then
  wget -q https://github.com/Cosgy-Dev/JMusicBot-JP/releases/download/$VER/JMusicBot-$VER.jar
fi

if [ ! -e config.txt ]; then
  wget -q https://github.com/Cosgy-Dev/JMusicBot-JP/releases/download/$CONFVER/config.txt
fi

java -Dnogui=true -jar JMusicBot-$VER.jar

```

一応パーミッション変更しておきます

```shell
chmod 777 app
chmod +x app/run.sh
```

## Docker起動
```shell
cd ./Docker
docker-compose up
```

起動するとトークン取得情報と
読み込むconfigファイルが表示されます

```
jmusicbot-jp_1  | BOTトークンを入力してください。
jmusicbot-jp_1  | トークンを取得する方法はこちらから:
jmusicbot-jp_1  | https://github.com/jagrosh/MusicBot/wiki/Getting-a-Bot-Token.
jmusicbot-jp_1  | BOTトークン: 
jmusicbot-jp_1  | [08:38:47] [WARN] [Config]: トークンが入力されていません！終了します。
jmusicbot-jp_1  | 
jmusicbot-jp_1  | 設定ファイルの場所: /app/config.txt
```

ホストには
jarファイル config.txtが落ちてきています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/e023e5c7-100e-8460-c606-7310ee383969.png)

バージョンによってはconfig.txtが提供されていないのでappの中にホストでconfig.txtを落として配置すれば大丈夫です

## トークン取得

MusicBotの公式を参考に取得します
https://github.com/jagrosh/MusicBot/wiki/Getting-a-Bot-Token

ApplicationPageリンクがDiscordログインだけだったので以下から
https://discord.com/developers/applications
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/27de33f0-5c19-6e98-d753-866be64d8251.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/4dbf2ba8-2e49-c7b8-e08a-12714ea2386a.png)
アイコンを設定します
このは壁紙から拝借
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/e778d61e-99c7-8cb8-a5c3-785d64be9eab.png)
設定保存して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/6fcc3442-4280-7b5d-208b-6725495f3153.png)

BOTトークンを発行します
ユーザー名を変更して
Public bot / oath2 codeをOFF
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/ca513918-8322-c2e3-09b0-c638fbaa8cfd.png)

Token Copyして
config.txtに貼り付け

New Applicationから

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/7e78e2f7-159a-91fc-af25-e26a89a3ffaf.png)

## ユーザID取得
公式を参考にします
https://github.com/jagrosh/MusicBot/wiki/Finding-Your-User-ID

Method2が分かりやすいかと思います

1. ユーザー設定から
1. Develop modeをONにして  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/ab1d1453-4d5d-457a-5e7f-e389b6013eed.png)
1. IDをコピー  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/7b0eb61e-ab58-507f-7d86-8d7f43e37137.png)
1. config.txtに貼り付けします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/561947cb-10d8-4059-68b6-06d1f60e5b36.png)

## その他設定
config.txtを設定変更していきます
以下は自由に変更

チャットルームでコマンドを使うため
`prefix = "!!"`
を設定します

コマンド周りは何か使い勝手いい感じに

```
  // Music commands
  lyrics = []
  nowplaying = [ np, current, pwd ]
  play = [ p ]
  playlists = [ pl ]
  queue = [ list, q, ls ]
  remove = [ delete, rm ]
  scsearch = []
  search = [ ytsearch, find ]
  shuffle = [ rnd ]
  skip = [ voteskip, s ]
```

保存したら`docker-compose up`します

```
jmusicbot-jp_1  | [09:34:19] [WARN] [Settings]: サーバー設定を読み込めませんでした(まだ設定がない場合は正常です): java.nio.file.NoSuchFileException: serversettings.json
jmusicbot-jp_1  | [09:34:19] [INFO] [Startup]: /app/config.txt から設定を読み込みました
jmusicbot-jp_1  | [09:34:20] [INFO] [JDA]: Login Successful!
jmusicbot-jp_1  | [09:34:21] [INFO] [WebSocketClient]: Connected to WebSocket
jmusicbot-jp_1  | [09:34:21] [INFO] [JDA]: Finished Loading!
jmusicbot-jp_1  | [09:34:21] [WARN] [MusicBot]: このボットはグループに入っていません！ボットをあなたのグループに追加するには、以下のリンクを使用してください。
jmusicbot-jp_1  | [09:34:21] [WARN] [MusicBot]: https://discord.com/oauth2/authorize?client_id=****************&scope=bot&permissions=******
```
BOTログイン用URL発行されるのでブラウザで開きます
BOTを入れるサーバーを選択して　はい　認証　私は人間です　と進めます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/a950f7d8-e832-e297-5553-204145c13d63.png)

追加完了！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/0d6cb7dc-bb4b-cdc1-c93e-87fb608896f0.png)

ボイスチャンネルに接続してチャットルームで
`!!play https://www.youtube.com/watch?v=p0V7Hl92uZY`
と発言すれば

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150940/85547509-5d69-f62a-ddfa-1ee28d2a4a80.png)
再生が始まります

これで`DJこのは`デビューです

Discordから`!!shutdown`でBotを一度停止し
`docker-compose up -d`でバックグラウンドで起動しておきます。


っていうか`このはぴば2021`の3Dくそ可愛すぎん？（語彙力