Discord のボイスチャットの入退室通知をするBotを作った話
はじめに
私は所属しているサークル(電気通信大学工学研究部)の活動や、親しい友人との会話などに Discord を活用しています。
Discord のボイスチャット機能は遅延も少なく機能もたくさんあってかなり好きです。
しかし 1 つだけ気にいらないものがありました。それはチャットルームに入室しても誰も来てくれないことです。(人望が無い訳ではない。多分。。きっと。。。おそらく。。。)
入退室に通知を付ければ、その通知を見た人が参加してくれるのでは無いかと考え、そのようなボットを作成しました。
どのように動くの?
以下のように動きます。
入室、部屋の移動、退室に対し通知が送られます。内容は以下のようになっています。
通知の内容
入室
1<ニックネーム>さんが<ルーム名>に入室しました
部屋移動
1<ニックネーム>さんが<ルーム名1>から<ルーム名2>へ移動しました
退室
1<ニックネーム>さんが<ルーム名>から退室しました
セットアップの方法は?
Discord Developer Portalにアクセスしてトークンを取得してください。
適当なサーバを用意して docker-compose を入れてください。
下のdocker-compose.yml
ファイルを用意してdocker-compose up -d
で起動して下さい。
1version: '3'
2services:
3 server:
4 image: ghcr.io/azuki-bar/discord-vc-notify:latest
5 environment:
6 TOKEN: "YOUR TOKEN"
7 CHANNEL_ID: "NOTIFY CHANNEL ID"
systemd
で管理する
僕はsystemd
が好きです。 systemd
で管理出来るものはなるべくsystemd
で管理したい。
そういう思いがあるのでこの Bot もsystemd
で管理しています。
以下のファイルを/etc/systemd/system/discord-vc-notifier.service
という名前で保存します。
1[Unit]
2Description=discord voice chat notifier.
3
4[Service]
5ExecStart=docker-compose -f /INSTALL_DIR/docker-compose.yml up
6ExecStop=docker-compose -f /INSTALL_DIR/docker-compose.yml down
7ExecReload=docker-compose -f /INSTALL_DIR/docker-compose.yml restart
8Restart=always
9
10Type=simple
11
12[Install]
13WantedBy=multi-user.target
起動するには以下のコマンドを実行します。
1sudo systemctl daemon-reload
2sudo systemctl start discord-vc-notifier
3sudo systemctl enable discord-vc-notifier
その他、詳しいことはman systemd.service
などでご覧ください。
開発にあたって
ここからはポエムです。
この Bot は工学研究部の Discord チャンネルをもっと活発にしたいという考えから作成されたものです。
Bot 自体は結構前に作成したのですが、Pipenv をシェルスクリプトにて直接叩くという褒められた実装ではありませんでした。
そこで、GitHub Actions で遊ぶのも兼ねて Docker イメージをビルドし、GitHub Container Registory と Docker Hub にアップロードしてあげることにしました。
GitHub Actions の計算機資源(厳密には Microsoft Azure の計算機資源)を無駄に食い潰して遊んでごめんなさい。
さいごに
ぜひお手持ちのサーバで遊んであげてくださいね。