kariaの日記 @ Alice::Diary

ノリツッコミの鳩子がはてなブログ書いちゃうよ

Among Usと連携するDiscordのBOT「AutoMuteUs」をVPSで動かしたときのメモ

Among Usと連携してDiscordを自動ミュートにしたり部屋のIDを通知したりする「AutoMuteUs」というBOTがある。

github.com

f:id:karia:20201215053532p:plain
AutoMuteUsを実際に動作させている様子

非常に便利なのだが、Among Usが人気なせいか公開されているBOTは動作がいまいち不安定だったり遅かったりするらしい。また、自前で立てようとするとバージョンによってコロコロ設定すべき箇所が変わってるようだ*1

ということで、自分が管理するVPSで動かした際の要点をメモっておく。また一度も実際に遊んだことがなく、これで本当にミュートが動作するのかはわからない(人がいないときに動作を確認したため)。現在のバージョン・ご自身の環境などを勘案して適宜読み替えてほしい。

  • このメモは2020年12月15日時点のものである
  • 使ってるVPSAmazon Lightsail
    • Lightsail固有の要素はなくおおよそのVPSやご自宅Linuxサーバーでも動作すると思う

目次!

サーバー側(AutoMuteUs)

  • Lightsailのコンソールにて、ファイアーウォールで任意のポートを開放しておく
    • 以下のサンプルでは65535にしている
  • dockerおよびdocker-composeをインストールしておく

あとは以下のQiitaの記事通りで概ね動作する……ハズなのだが、バージョンが上がったせいか .env の設定でハマりどころがあった。

qiita.com

.env の設定

.envで実際に設定が必要だったのは以下。

AUTOMUTEUS_TAG=6.5.0
GALACTUS_TAG=2.4.0

dockerイメージのタグを指定する。タグの一覧は以下にあり、現時点での最新バージョンを指定した。

DISCORD_BOT_TOKEN=xxxxxxxxxxxxxxxx

Discord Developer Portal にて発行したTokenをコピーして貼り付ける。発行方法の詳細は以下の「BOT_README.md」を参照。なおこのTokenは後ほどクライアント側でも必要となる。

https://github.com/denverquane/automuteus/blob/master/BOT_README.md

GALACTUS_HOST=http://example.com:65535
GALACTUS_EXTERNAL_PORT=65535

example.com にはホスト名を、GALACTUS_HOSTの末尾とGALACTUS_EXTERNAL_PORTには先ほど解放したポート番号を指定する*2

なお、人によっては「2020年になってHTTP?」と思われるかもしれない。リバースプロキシを立てればHTTPSにすることが出来るようだがまだ試していない*3

クライアント側(AmongUsCapture)

AmongUsCaptureを動作させる人は、 理論上は AutoMuteUs を稼働させている人と同一でなくても良いはずなので、そういう書き方にしてみた。1台のAutoMuteUsを使って複数の部屋を同時進行させることも可能なようだが保証はしない。

初回のみ

1) Among Usを遊ぶのと同じWindowsマシンで「AmongUsCapture.exe」を起動
2) settings→Discordで「Discord token」を設定しsubmit

※Discord tokenは、AutoMuteUsを動かしてる人に聞いて設定する(=先ほど設定したものを利用する)

3) Among Usを起動し、FREEPLAYを遊んでみてAmongUsCaptureにログが出ることを確認する

※FREEPLAYではDiscordのミュートのオンオフは操作されずログだけが流れる

ゲームプレイ時

1) ボイスチャンネルに入る(次のコマンドより先にVCに入ってないとエラーになる)
2) テキストチャンネルで .au new と打つ
3) BOTからDMが来るので、aucapture:// から始まるURLをクリック
4) [ClientSockeet]: Connected successfully! と表示されたら接続OK

※AmongUsCapture.exe は、URLをクリックすると勝手に起動するので事前に起動しなくてよい

こんなときは

  • 複数のDiscordサーバーにAutoMuteUsを導入したいとき
    • Discord Developer Portal でOAuth2を複数回(Discordサーバーの数だけ)認証すればよい
    • 全サーバーでTokenは共通である。Tokenをリセットする時は全サーバーに影響するので注意する

1つのAutoMuteUsプロセスを複数サーバーで共用させるのは、あまりセキュアじゃなさそうに思える。テスト用の1人サーバーと本番用サーバーぐらいに留めておくべきではないかと思う。

*1:この記事を書いてる最中にもAmongUsCaptureのバージョンアップがあった

*2:何故2回指定すんの?と思われるかもしれないが両方で同一のポート番号を指定する必要があった

*3:httpをhttpsにして、GALACTUS_EXTERNAL_PORTのみをリバースプロキシ向け内部ポート番号に変更すれば良いはず