随分前に買った、Raspberry Pi 3 Model B。Web カメラを使って監視カメラを作ろうかと思っていたものの、Kernel panic が頻繁に発生して、OS 再インストールすることに辟易してしまい、パソコンデスクの飾りになっていました。

ゲーム向けのボイスチャットツール Discord をなんやかんやしていると、音楽を流せる bot があることを知り、ノート PC でも動かしてみて「良きかな良きかな」と思っていたら、「ラズパイで動かせれば24時間動かせるのでは(ドヤ顔)」と思いつき、入れてみました。

準備するものは以下の通り。

  • Rasbperry Pi 3 Model B(以降、ラズパイと表記)
  • microSDカード(16GB以上)
  • 有線 LAN
  • Linux の基本知識

ラズパイの OS インストール

先駆者の皆さんが詳しく解説しているので省略します(適当)。 OS は、デスクトップ環境が含まれていない、Raspbian Stretch Lite を使用しています。

microSD カードへの OS イメージインストールは、Etcher というツールが便利です。ポータブル版を使えば、インストール不要です。

[https://www.balena.io/etcher/]

ちなみに、microSD カードに今までラズパイを運用していて入れ直す場合は、SD Association が提供しているSDメモリカードフォーマッターでフォーマットしましょう。でないと、Linux の boot 領域パーティションが解除されず、100MBのパーティションにインストールできません(おこ!)となります。

[https://www.sdcard.org/jp/downloads/formatter/]

私が参考にしたサイトはこちら。

[https://www.1ft-seabass.jp/memo/2018/07/23/raspbian-install-201807-memo/]

MusicBot のインストール

MusicBotのドキュメントに Raspbianのページがありますのでこの通りインストール。

[https://just-some-bots.github.io/MusicBot/installing/raspbian/]

実行する前に、設定を行います。 MusicBot\Config にサンプルファイルがあるので、コピーしてから編集します。

$ cp example_options.ini options.ini
$ cp example_permissions.ini permissions.ini

設定方法は、こちらのサイトを読みましょう(内容は Windows 向けですが同じです)。

[https://tech.kunimaly.com/how-to-setup-python-musicbot/]

設定が終わったら、./run.sh です。sh ./run.sh ではないです(間違えてやってしまった)。

ターミナルを閉じても動くようにする

ここまでやると動くようになります(適当)。

ただ、このままだとターミナルに接続して、 run.sh を実行して…をしないと bot が起動しません。 なので、ずっと起動させておき、ターミナルを閉じても動きっぱなしにします。

そこで screen コマンドを入れます。

$ sudo apt install screen

インストールしたら、動きっぱなしにしてみましょう。

$ screen
$ ./run.sh

キーボードの CTRL + A、CTRL + Dで screen を抜けます。

これで、ターミナルを落としても問題ありません。

musicbot を停止するには、discord のチャットで !shutdown と入力します。 !shutdown しても screen のプロセスは止まりませんので、こちらは、screen -listで、プロセス番号を確認して quit します。

$ screen -list
There is a screen on:
        14276.pts-0.raspberrypi (2019年06月16日 01時52分19秒)   (Detached)
1 Socket in /run/screen/S-username.

上記の例では、プロセス番号 14276 を quit します。

$ screen -X -S 14276 quit

こんなところですね。

参考までに、自分が編集した musicbot の変更箇所を載せておきます。

options.ini で変更したところ(抜粋)

#botのトークンID
#解説:変更必須。外部に公開しないように。
Token = XXXXXXXXXXXXXXXXXXXX....

#musicbotのコマンドを受け付けるチャンネルのID
#解説:botへのコマンドを受け付けるチャンネルを指定します。
#記述しない場合、ボイスチャンネルと同一フォルダ内にある一番上位のテキストチャットが使用されます(たぶん)。
BindToChannels = XXXXXXXXXXXXX....

#音楽のスキップに必要な投票数
#解説:音楽のスキップに必要な投票数。これとは別に SkipsRatio という設定もあります。おそらく比率と思われます。
SkipsRequired = 1

#再生した動画を保存する
#1度再生した動画(音楽だけど)を保存するか。
#保存しておけば再生が素早いのですが、貯まるとディスクを圧迫します。
SaveVideos = no

permissions.ini で変更したところ(抜粋)

[MusicMaster]
#musicbotへのコマンド実行できる役職のID
#解説:特定の役職からのみコマンドを実行できるようにします。
GrantToRoles = xxxxxx....

参考文献

設定ファイルのその他の解説。 [http://ikiikinyuusankin.hatenablog.com/entry/2017/11/21/222616]

screenコマンドの解説。 [http://edosha.hatenablog.jp/entry/2017/11/10/142855]