Discord Music BotをVPS上で動作させる[ubuntu 16.04]

私はプログラマでもなんでもないただの学生ゲーマーなんですが、ようやくDiscord botを常駐させることに成功したので一応流れを記します。

この記事は2017年10月に書かれたものです。プラグインなどのアップデートによって通用しなくなる可能性は多いにありますのでご了承ください。

 

参考文献

Discord 音楽botの作り方 SexualRhinoceros/MusicBot

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

Discord に音楽 bot を導入する - いろいろかくよ

この記事で引用する文献

Guide for Ubuntu · Just-Some-Bots/MusicBot Wiki · GitHub

ubuntuのapt-getで最新版のgitをインストールする方法 - spangled shalalala blog

 

この記事はwindowspython上でdiscord botを動作させることはできるが、linuxサーバーには触れたことすら無いという人向けです。そもそもbotをどうやって作るんじゃという人はググるか上のリンク記事から作ってみてください。

これは余談ですが私は最初、2番目の記事を真似すればいけるだろうとCentOS7で作っていました。結論としてはbotを接続させるところまではこぎ着けたのですが、動画ファイルを再生するffmpegというプラグインがどうしても動きませんでした。こういうのは仕様が変化していくものなので、仕方ないです。

追記(2017/11/11)

CentOS7.0にどうしても移行したくて、リベンジしてたのですがやはり動きませんでした。ffmpegに関連したエラーでは無かったのですが、最期まで原因が特定できず諦めました。このbotは開発者がdebian系の情報しか出していないので、おそらくRedHat系とは相性が悪いです。

ちなみに参考にしたのはこちらです。必要はものは全てエラーもなくインストールできたのですが、botを起動するとdiscordの部屋には来てくれるんですが再生ができません。CentOSで現在動かせてるよという方がいたら情報がほしいです。

 

詳細は続きから

 

 

準備するもの

・Discord bot

既にdiscord鯖に繋げているbotがあれば、options.iniなどの設定ファイルをVPSに移せばそのまま動きます。新規に作る場合でもwindows上で動作させてからの方が楽だと思います。

VPS契約に関わるもの

・PuTTYjp ( hdk の自作ソフトの紹介 | PuTTYjp )

鯖に接続してコマンドを送信するソフトです。

WinSCP

「WinSCP」SCP/SFTP/FTPS対応のFTPクライアント - 窓の杜ライブラリ )

鯖に接続してGUI(エクスプローラー)でファイルをやりとりできるソフトです。

 

1.VPSを契約する

今回私が契約したのはさくらVPSです。参考文献でも紹介されていた格安のリトアニア鯖という選択肢も無いわけではないのですが、ストリーミング的な側面の強いこのbotは回線が命なので国内の鯖を推奨します。

VPS(仮想専用サーバー)|さくらインターネット - 無料お試し実施中

鯖の契約の仕方とかはページ内に詳しい説明が載っているので探してください。VPSは一番安いやつでいいです。コントロールパネルに入れたら、OSのインストールを選択してubuntu 16.04をインストールします。この時入力したパスワードが鯖に接続する時に入力するものになります(さくら以外の鯖を選んだ場合若干流れが異なるかもしれません)。

 

追記(2017/11/09)

別件で他社のVPSも使い始めて分かったのですが、さくらVPSは初期費用が高いですが、ガイドラインが充実している上SSHが最低限の設定で使えるためとても初心者向きです。conohaとお名前.comVPSは初期費用が無料ですが、標準OSを使わない場合SSHの公開鍵を自分で設定しないといけないため、さくらと比べると少し難しいです。

 

2.鯖の設定

PuTTYjpを起動します。ホスト名に借りた鯖のIPアドレスを入力、ポートが22になっていることを確認して接続します。IDを要求されるので「ubuntu」、先程のパスワードを入力します。

 ubuntu@[ホスト名]:~$

と表示されたら接続完了です。

 

 

 以下のプログラムを1行ずつ打っていきます。

$ sudo apt-get install build-essential unzip -y
$ sudo apt-get install software-properties-common -y

開発者tutorialではここからubuntu上で動作させるためのプラグインを入れていくのですが、tutorial通りではエラーが出ます。

どうやらコマンドがインストールされていないらしいのでインストールしていきます。

$ sudo apt-get install apt-file
$ sudo apt-file update
$ sudo apt-file search add-apt-repository 

 これでadd-apt-repositoryというコマンドが有効になりました。

$ sudo add-apt-repository ppa:mc3man/xerus-media -y

$ sudo apt-get update -y
$ sudo apt-get install git ffmpeg libopus-dev libffi-dev libsodium-dev python3-pip -y
$ sudo apt-get upgrade -y

途中選択肢が出た時は全てYES、GUIっぽい画面になったときは一番上を選びます。

続いてMusicBotを落とします。

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

 これでMusicBotというフォルダが作られ、その中に見慣れたファイルたちがダウンロードされます。フォルダ名は後から変更してもいいですが、CUIでアクセスする時に打ちやすいものにするとよいです。

 

3.botの設定

次にWinSCPを起動します。接続の仕方はPuTTYと同じです。config内の各種設定ファイルを差し替えるか、書き換えます。基本的にはoptions.iniのTokenとOwnerIDが有効なものであればそれ以外は弄らなくても動きます。WinSCPGUIエクスプローラー型なので特に困ることはないと思います。

 普段autoplayを使っていない(autoplaylistを白紙にしているか無効にしている)人でも、1曲だけ入れておくと動作確認が楽です。

 

4.botの起動

botが設定できたら以下のインストールをします。

$ python3 -m pip install --upgrade pip

$ python3 -m pip install -U -r requirements.txt

 2行目に関してですが、エラーが出る場合スルーしても多分動きます(自分は最初エラーが出たのですが、前述の試行錯誤の段階で解消されたのか無視したのか忘れてしまいました)

最後にbotを起動します。一番簡単なのは、認証したdiscord鯖のボイスチャンネルにOwnerである自分が先に入っておいて、その後このコマンドを実行することです。

$ python run.py

初回起動時はpythonの初期設定をするので、botは起動しません。

Ok lets hope it worked

という表示が出たら、ゴールは見えました。

もう一度実行すればbotがボイスチャンネルに入ってきます。

 

5.botの常駐

今の状態だと、PuTTYを切断するとbotも切断されます。そこで、Linuxのscreenという機能を使います。

 $ sudo apt-get -y install screen

 $ screen -S musicbot

これでmusicbotという名前のscreen(仮想空間?)を作ったということになります。画面が切り替わったら、そこはmusicbotというscreenです。そのscreen上でプログラムを動かします。

$ python3 run.py 

 再びbotが動き出しました。

最後にscreenを離脱します。これをデタッチといい、Ctrl-A Dのショートカットキーです。再びscreenに入る場合は

$ screen -r スクリーン名 

 screenを複数作ることで複数のbotを動かすことが出来ます。その分ディレクトリを用意する必要がありますが。

 

現状、最低限の動作しかしませんので、自分で調べて改良していく必要があります。

私もこれから頑張ります。

お疲れ様でした。

 

追記(2017/10/30)

PuTTYとscreenを使うのをやめました。PuTTYは操作性が個人的に合わなかったためRLoginに移行しました。快適です。

screenは私の環境で不安定だったため、tmuxに移行しました。tmuxもscreenと似たようなやつで、screenと比較してセッションの管理が楽になったように感じます。

あと、毎曲生成されるキャッシュがVPSの容量を食い散らかしているのをどうにかする記事を書きました。

Discord botが生成するキャッシュを自動削除するシェルスクリプト - オールジャンル

botの使い方によってはキャッシュの増大が問題になってくるので、心当たりがある場合は参考にしてください。

追記(2017/11/09)

options.iniでSaveVideos = noと設定してください。