AutoMuteUsをAmazon Lightsailでホストしてみた

Among Usのゲーム状況に合わせて、Discordの自動ミュート/ミュート解除を行ってくれる「AutoMuteUs」というツールがあります。

github.com

 

実際使ってみた感じ、

  • 純粋にミュート切り替えの手間が無くなって楽
  • 手動で切り替えれないスマホ勢にも優しい。
  • 死者同士で会話が出来るので飽きない。同じ通話で見てるだけの人にも状況が分かりやすい。

と言ったメリットがありました。逆にこれが要らないなら無理に導入する必要は無いですね。

 

ただこれを動かす方法が少し難儀でして、開発元で公開されているBotは人数制限で使えない事が多い→自前でホストするとDockerの導入などややこしい手順を踏む必要がある→バージョン2.4.3ならDockerの導入は不要だが古いせいで少し不安定。

……と言った感じになっています。

 

ver2.4.3で導入したい場合はこちらの記事を参考にすると良いです。

note.com

 

自分としては安定してる方が良いので自前で最新版のBotをホストする事にしました。

 

さてこの最新版のホストなのですが、

  1. WindowsでDocker Desktop for Windowsを動かしホストする。
  2. VPS等を使い、サーバーを借りてホストする。

のどっちかって感じです。
前者ならお金はかからずに済むし、後者なら自分のPCに依存しないので他の人も利用しやすい&環境構築が比較的楽って所です。

 

自分はVPSに関しては完全に無知だったのですが、「Amazon Lightsail」を利用してホストする事が出来ました。
以下にその手順を書いていきます。

 

 

基本的な手順についてはこちらを参考にすると良いです。

qiita.com

 

また「AmongUsCapture」というツールをダウンロードしておきましょう。これはゲームの情報をサーバーに送信するための物です。

github.com

 

Discord Developer PortalBotを作成する

Discord Developer Portal」からBotを作成し、トークンコードを取得します。

既にVer2.4.3を使用している場合は導入済みなので飛ばしてください。Botトークンコードだけ後で使います。

 

まず右上の「New Application」からBotを作成。

 

左の欄の「OAuth2」を選び、SCOPESのbotBOT PERMISSIONSのAdministratorにチェックを入れます。

f:id:furukushi:20210111063209p:plain

そこで生成されたURLにアクセスし、Botを導入したいサーバーを選択すれば参加させることが出来ます。

 

Botトークンコードは左の欄の「Bot」を選び、Tokenの欄のCopyを選べばコピーできます。後々使うのでメモしておきましょう。

f:id:furukushi:20210111060354p:plain

 

※ここで生成したBotの権限はAdminister(管理者)という超強い権限です。
Botトークンコードを安易に公開すると、外部から何でも出来てしまうので注意しましょう。

 

もしBotの権限が気になるのであればサーバー設定から必要な権限だけ付けてやればいいです。

f:id:furukushi:20210113035907p:plain

メッセージの送信・絵文字の管理・リアクションの追加・ミュート」辺りを付けておけば大丈夫かと思います。その他の操作を行われる危険性が無くなります。

 

Amazon Lightsailの設定

サーバー側、Amazon Lightsailの設定を行います。

aws.amazon.com

AWSアカウントが無い場合は作成し、Lightsailのページに移動します。
https://lightsail.aws.amazon.com/ls/webapp/home/instances

 

インスタンスの作成

インスタンス欄の右上の「インスタンスを作成」を選びます。

f:id:furukushi:20210111071144p:plain

・プラットフォームはLinux/Unixを選択。
・「OSのみ」で「Amazon Linux 2」を選択。
インスタンスプランは一番安い月3.5$を選択。

 

f:id:furukushi:20210111071154p:plain

 

後は付けたい名前とかあれば指定し、「インスタンスの作成」を選択します。

IPを固定する

外部からインスタンスにアクセスするためのIPアドレス、パブリックIPという物があります。これを使ってAmongUsCaptureの情報をインスタンスに送信します。

 

しかしこのままだとインスタンスを再起動する度にパブリックIPは変化します。
その都度変わったIPアドレスを指定するのは面倒です。静的IPを作成して固定します。

インスタンス/ネットワーキングのタブを開く
・[静的IPの作成]を選択し、さっきのインスタンスを指定。
・適当に名前を付けて作成。

f:id:furukushi:20210111124020p:plain

そうすれば静的IPが生成されていると思います。これは後程使います。

ポートを開放する

・ネットワーキング欄のIPv4 Firewallの、ルールを追加を選択。
・アプリケーションはカスタム、プロトコルTCPのままで、開けたいポートを指定(自分は65535にした)

f:id:furukushi:20210111071949p:plain

 

サーバーにAutoMuteUsを導入する

・[SSHを利用して接続]を選択。Linuxのコンソールが開く。
・gitとdockerとdocker-composeを導入する。

qiita.com

 

qiita.com

・gitの設定をする。公開鍵の登録を済ませればgit cloneが使えるようになります。
・git cloneでautomuteusを取ってきて、cp sample.env .envで.envを生成。
・vi .envで必要な箇所を書き換える。

AUTOMUTEUS_TAG=6.9.0(最新版を指定)

GALACTUS_TAG=2.4.1(最新版を指定)

GALACTUS_HOST=http://さっきのパブリックIP:ポート番号

GALACTUS_EXTERNAL_PORT=ポート番号

DISCORD_BOT_TOKEN=BOTトーク

終わったらdocker-compose up -dでautomuteusの起動。

後はDiscordのBotを導入したサーバーで「.au start」を入力し、Botを起動させるだけ。
AmongUsCaptureと連携し、正しくゲームの状態が反映されれば準備完了です。

f:id:furukushi:20210111072914p:plain

後は部屋に参加し、参加者とBotのリンクをすれば自動ミュート機能が動作します。

 

おまけ:Docker Desktop for Windowsを使用する方法

前述した通り、VPSを使わなくてもWindows単体でAutoMuteUsを使用する事が出来ます。

 

まずDocker Desktop for Windowsをインストールします。

hub.docker.com

 

同時にdocker-composeもインストールされるので、こちらの設定は不要です。

インストール後セットアップを済ませたら後はすること無し。ソフトを起動させておくだけでいいです。

 

後はVPSの方の手順とほぼほぼ同じ。任意のフォルダにgit cloneでautomuteusを取ってきて、cp sample.env .envで.envを生成。.envに必要な情報を追記し、docker-compose up -dでautomuteusを起動します。

 

gitコマンドとか分からんって人はgithubのページからzipを取ってきて展開しましょう。
展開したフォルダ内で以降のコマンドを実行すればいいです。

f:id:furukushi:20210111122133p:plain

 

この際、.envには「GALACTUS_HOST=http://localhost:8123」と記載すれば良いです。IP固定やポート開放の手順は不要です。

同じくdocker-compose up -dでautomuteusを起動します。
起動中はDocker DesktopのDashBoardで以下のように確認出来ます。

f:id:furukushi:20210111121643p:plain

こちらの方法でもポート開放をすれば他の人がBotを使用できる(自分が参加する必要が無くなる)と思いますが、自分の環境では上手くいかなかったので不明です。

 

終わりに

以上の手順で自分はAutoMuteUsの導入が出来ました。
自分は勉強兼ねて導入しましたが、元々の知識が無いせいでそこそこ時間がかかりました。

……と言うと二の足を踏みそうですが、実際Botを導入するとかなり快適にゲームを遊ぶことが出来ます。(実際、遊んでる人からのウケもいいです)

 

まずはDockerの不要なVer2.4.3の導入をし、より動作の安定化を望むのであれば最新版の導入を試みると良いと思います。PCスペックが求められる訳でも無いので。