Linux
CentOS
discord
MusicBot

【CentOS7 VPS】 Discord Musicbotの導入と常時オンライン化

More than 1 year has passed since last update.

Discordのボイスチャンネルに任意の音楽を流せるMusicBotなるものを教えてもらったので導入してみたいと思います。

とはいえ、自分がプログラムを起動してる間(つまりPCをつけっぱなしにしてる間)しかオンラインになっていないのは嫌なので、ちょっと前に契約したTime4VPSのVPSにぶち込んで遊んでみようと思います。

月額250円くらいでした。一年以上の契約ならもうちょっと安い

サーバがリトアニアにあるらしく、めちゃめちゃ速度が遅い(ping230くらい)のであまりオススメはしません。


Discord 音楽botの作り方 SexualRhinoceros/MusicBot


こちらの記事を参考にさせていただきました。


まずはLinuxのバージョンを確認

僕が使っているVPSのOSは"CentOS 7.2"です

バージョンの確認方法は

$ cat /etc/redhat-release


Musicbotを落とそう

開発者のGithubからCloneします。


必要なパッケージをインストールしましょう

開発者のwikiにはCentOS用のチュートリアルがなかったのでUbuntuの記事を参考に色々入れてみることにします。

$ sudo yum -y install git gcc gcc-c++ kernel-devel libffi-devel 


さらに


CentOS7にyumでffmpegをインストール

http://vild.hatenablog.com/entry/2015/09/29/125940


を参考にffmpegをインストールします。


17/05/31追記

以下に実行コマンドを記述します


$ sudo yum -y install epel-release

$ sudo vi /etc/yum.repos.d/epel.repo


epel.repoを以下のように変更する

[epel]

(省略)
enabled=0
priority=11

[epel-debuginfo]
(省略)
enabled=0
priority=11

[epel-source]
(省略)
enabled=0
priority=11


$ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

$ sudo vi /etc/yum.repos.d/nux-dextop.repo


同様の手順でdextop.repoを

enabled=0

priority=13

に変更しておいてください。


$ sudo yum -y --enablerepo=epel,nux-dextop install ffmpeg


インストールできたか確認する。


$ ffmpeg -version



あとは適当なユーザとディレクトリを作ってそこに落としてあげましょう


$ sudo useradd -mG wheel musicbot
$ sudo passwd musicbot
#ここでパスワード入力を促されるので適当に決める

$ su - musicbot
#パスワードを入力する

$ mkdir github
$ cd github
$ git clone https://github.com/Just-Some-Bots/MusicBot

でとりあえずOK


それから(重要)

MusicbotにはPython3.5以降が必要です。(CentOS7のデフォルトは2.x系列)


CentOS7にpython3系のインストール

http://daichan.club/python/916


こちらの記事がわかりやすいのでペペっといれておきましょう。

入れないと後でエラいことになります。


17/05/31追記

rootユーザを使用時にpyenvでglobalに3.5系を設定するとyumが使えなくなったりヤバいことになるらしいです。

(もし困ったらpythonのシンボリックリンクがあるところをググって貼り直してあげるといいと思います。)

musicbotディレクトリに移動して

$ pyenv local 3.5.1

のようにそこのディレクトリでだけ使う設定にしてあげるといい感じになると思います。

以下に実行コマンドをコピペします。

必要なものを入れます。


$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel


$ cd ~/github

$ pwd

でgithubディレクトリにいることを確認したら


$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

$ vim ~/.bash_profile


bash_profileに下記を追記

# pyenv

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"


$ source ~/.bash_profile

$ pyenv install 3.5.1


$ cd ~/github/MusicBot


$ pyenv local 3.5.1

$ pyenv rehash


$ python --version

でバージョンが3.5.1になっていることを確認したらOKです。


botを作成しよう

Webブラウザを開いて開発者ページに飛び



New Appをクリック



こんな感じで適当に設定しましょう

終わったらCreate Appをクリック



まずは青で囲ったところからCreate a Bot Userをクリック

追加する?と聞かれるのでYes,do it!と答えてあげましょう



終わったらオレンジで囲ったTokenのclick to revealをクリックすると出てくる文字列をコピーしておきましょう

(上にあるClient Secretと間違えないように!)


ここからがちょっとめんどくさい

ターミナルに戻って(殆どの人はmusicbotユーザでgithubディレクトリだよね?)

$ vim ./MusicBot/config/example_options.ini

で編集画面に入ります


[Credentials]

; Put your token here. Not "secret". The secret is not the token.

Token = bot_token


という部分があるのでbot_tokenの部分をオレンジで囲った部分からコピーした文字列に置き換えましょう。

/Token

2wdw

でbot_tokenを削除できます

(僕はTeratermを使ってssh接続していたのでaで挿入モードに入ってマウス右クリックでペーストしちゃいました)

次にDiscordを開いて

ユーザ設定->テーマと進み開発者モードにチェックを入れます。

完了を押してテキストチャンネルなどに表示されている自分のアイコンを右クリックすると"IDをコピー"ができます。

コピーしたIDを先程開いたexample_options.iniの


[Permissions]

; This number should be your id. It gives you full permissions. You do not put the bot's id here. That's silly.

; If you don't know how to get this, scroll up a bit and read the part that says "HOW TO GET VARIOUS IDS"

; If you can't do that for some reason, join the help server (invite in the readme) and type this in chat: !id

; If you still don't understand, watch this https://streamable.com/4w8e and may your respective deity have mercy on your soul.

; I don't want any more "how do I get the OwnerID" questions.

OwnerID = 000000000000000000


で000000000000000000と表示されている部分と置き換えます

終わったら

:wq

で保存して終了

ブラウザで開いていた開発者ページに戻り、赤で塗りつぶしてある文字列(ClientID)を選択してコピーします。


認証

Webブラウザで新しいタブを開き


https://discordapp.com/oauth2/authorize?&client_id=123456789123456789&scope=bot&permissions=0


のようにコピーしたClientIDを加えたURLのページを開くと、



このようなページが出てくるので、任意のサーバーを選択し"Botを追加します"にチェックを入れて認証をクリック



Discordでサーバーを確認するとちゃんと追加されていました。


botを起動しよう

ターミナルに戻ります。(musicbotユーザの状態として話を進めます。)

MusicBotディレクトリ内にあるrun.pyを起動すると動いてくれるみたいです。

$ python --version

でバージョンが3.5以降になっていることを確認したら

$ cd ~/github/MusicBot

$ python run.py

ダーッと文字列が流れたあとに


Ok lets hope it worked


となると思います。やったね


さあ実行だ!

と思って

$ python run.py

と打ったら怒られました。


Connecting...

An error has occured:

Problem: Bot cannot login, bad credentials.

Solution: Fix your Email or Password or Token in the options file. Remember that each field should be on their own line.


だそうです。

そういえば編集してたのがexample_options.iniってことはoptions.iniじゃないとダメなんじゃないのか~~~~~?????

$ cd config

#MusicBot/configディレクトリに移動する

$ mv options.ini options_backup0104.ini
#一応バックアップを取る

$ cp example_options.ini options.ini

$ cd ..
#MusicBotディレクトリに戻る


で、もっかい

python run.py

オ!今度はうまくいきました


screenで動かす

とはいえターミナルをずっと占拠されるのも困るのでscreen内で実行してもらいましょう

実行中のMusicbotの終わらせ方がわかんなかったのでCtrl-Cでコマンドを終了

$ sudo yum -y install screen

$ screen -S musicbot
#musicbotという名前のスクリーンを作る

$ python run.py

で実行したらCtrl-A Dでscreenを抜けます。

MusicBotのスクリーンに戻るには

$ screen -r musicbot

というわけで終了!

サーバーを再起動したときにpython3.5以降でrun.pyを実行するようなシェルスクリプトを書いておけばいい感じになると思います。


使い方

MusicBotのいるサーバーのボイスチャンネルに入り、

!summon

とメッセージを送ると流してくれます!

ちなみに流す内容は/MusicBot/config内にある

autoplaylist.txtにURL記述で設定できます

記述が終わったら

!restart

で再起動


ちなみに結果は

そこそこいい感じで流してくれました!と言いたいところですがときどき音声が途切れます。

こればっかりは通信の問題なのでちゃんと日本のVPSを借りて使いましょうネ。


よく使うコマンド


自分がいるボイスチャンネルにbotを召喚

!summon


<URL>の動画及び音声を再生

!play <URL>


現在再生中の音声をスキップ

!skip


youtubeかsoundcloudで、<word>の文字列で<num>件の結果を検索して表示

<num>は省略可能 デフォルト値:3

<word>は間にスペースが入ってもクォーテーション等で囲まなくてよい

!search <youtube or soundcloud> <num> <word>

<URL>に招待コードを入力するとそのサーバに参加するリンクを送ってくる

!joinserver <URL>