Discord に音楽 bot を導入する

導入したんだけど、色々ハマったのでメモ。

Discord はこれ。導入したのはMusicbot

試し導入段階

手元のMacbook Proのターミナルで試しに起動してた。特にハマることもなく通常起動。

導入はここを参考にした。ここは Windows での導入について書いてあるけど、Mac OS X でも OK。

Python は 3.5+ っぽくて、起動するファイルは runbot.bat じゃなくて ./run.sh の方。環境によっては権限がないので、chmod u+x ./run.sh してから起動する。

でも Permission 周りが結構難しくて、サーバに居る人間全員に権限を渡すために色々調べた。

Discord にはサーバごとに役割(役職?)が存在していて id が割り振られてる。それを元に権限とかあげる感じ。最初は導入者にしか権限なさそう?

権限についてはここ参考に。役職/個人の id 取得についてはここ参考にすると良いと思います。

簡単に書くと、config/permissions.ini で権限を全部管理してて、ある役職の人間全員に権限をあげたかったら GrantToRoles に役職 id を、個人に上げたかったらUserList に id を羅列する。

権限にも色々グループがあって、[Default] / [MusicMaster] / [DJ] / [Limited] の 4 つがある。Default は基本いじらず、残りの 3 つに id を追加する。サーバーに居る人間が信用出来ない場合は Limited に入れるとよい。

ちなみに、権限管理するのめんどいから全員に MusicMaster の権限あげたい!!ってときは、とりあえず bot を起動して、!listids すると bot が DM で id のリストを送ってきてくれるので、その中にある Role IDs: @everyone: ************* を持ってくれば OK。公式では非推奨らしいです。

Ubuntu 14.04.5 LTS に導入

手元でずっと起動しっぱなしなのも面倒になってきたので、Ubuntu on さくら VPS に導入する。

動かしてた Musicbot のファイルをそのままサーバ上にあげて、./run.sh すると次のエラーがでる。

RuntimeError: Could not load an opus lib. Tried libopus-0.x86.dll, libopus-0.x64.dll, libopus-0.dll, libopus.so.0, libopus.0.dylib

色々調べてもよくわからなかったんだけど、色々やってたら直って動いたので直接的に関与してそうなことをメモ。

まず、このエラーって既知で、libsodium-dev がないときに起こるらしい。参考:Unable to locate package libsodium-dev · Issue #296 · SexualRhinoceros/MusicBot · GitHub

$ sudo apt-get install git python3.5 python3.5-dev ffmpeg libopus-dev libffi-dev libsodium-dev -y

をそのまま実行すると、libsodium-dev が見つからんって怒られる。どうやら apt-get の list にないらしい?ので、以下を実行。

$ sudo add-apt-repository ppa:chris-lea/libsodium
$ sudo apt-get update

で、もっかい実行すると無事にインストール出来てハッピー。Musicbot を起動してみると無事に動いてサーバーにも接続してくれた。👏

ついでに、Musicbot に関することを書いておくと、niconico の動画を投げても流してくれる。soundcloudyoutube のプレイリストにも対応。でも audio_cache は自動的に消してくれないっぽいので、手元じゃなくてサーバで動かす場合は自動的に消すなんかを作っておいたほうがよさげ。わたしは tmpwatch を cron で動かすことにしました。

ということで、Splatoon 界隈のみなさんももっと導入しましょう!!!!!!!!!!!!