Discordのボイスチャンネルに任意の音楽を流せるMusicBotなるものを教えてもらったので導入してみたいと思います。
とはいえ、自分がプログラムを起動してる間(つまりPCをつけっぱなしにしてる間)しかオンラインになっていないのは嫌なので、ちょっと前に契約したTime4VPSのVPSにぶち込んで遊んでみようと思います。
月額250円くらいでした。一年以上の契約ならもうちょっと安い
サーバがリトアニアにあるらしく、めちゃめちゃ速度が遅い(ping230くらい)のであまりオススメはしません。
こちらの記事を参考にさせていただきました。
#まずは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>