Among Us 用ボット AutoMuteUs のあまり知られていない便利な機能


Among Us でゲームの状況に応じて自動でミュート・アンミュートしてくれる便利なボットこと AutoMuteUs、ほんとうに便利ですよね。

簡単な使い方であればインタネットの各所に解説記事がたくさんありますが、実は AutoMuteUs には、さらに便利に活用できるいろいろな機能 が用意されています。

本エントリでは、他の解説記事ではあまり触れられていない機能 を中心に、AutoMuteUs をさらに活用するための情報 を紹介します。

なお、文中で 公式サービス と記載していますが、これは AutoMuteUs 開発者が直々に運営しているサービス というだけの意味であり、Among Us の公式サービス ではない ことは念のため明記しておきます。

ミュート・アンミュートの高速化

ゲーム開始直後やディスカッションの開始・終了時など、同時に多数のプレイヤのミュート・アンミュートが必要なシーン で、実際にミュート・アンミュートされるまでにプレイヤ間でラグ が生じることがあります。

AutoMuteUs では、ミュートとアンミュートに Discord の API を利用しています。Discord の API には一定時間内に許容される操作の回数の制限(Rate Limits)があり、ざっくり、トークンごとかつサーバごと・チャネルごと にこの制約を受けます。前述のラグは、この制限によるものです。

このラグは、それぞれ次の方法で解消または軽減できます。現在の実装では 8 人以上で遊ぶときに特に制限を受けやすい ため、いずれかの対策を検討してもよいでしょう。

利用形態高速化方法
公式サービス(無償またはブロンズ)キャプチャボットによる高速化
公式サービス(シルバー以上)キャプチャボットによる高速化
ワーカボットによる高速化
セルフホストキャプチャボットによる高速化(5.0.0 以上のみ)
ワーカボットによる高速化

キャプチャボットによる高速化

AmongUsCapture は、ボットからの依頼を受けてプレイヤのミュート・アンミュートを手伝う機能を持っています。この機能でミュート・アンミュートの処理を分散することで、Discord の制限を受けにくくできます。

この手段は、公式サービスを無償で利用している場合でも有効 な点が魅力です。もちろん、有償サービスの利用者もセルフホストの利用者(5.0.0 以降限定)にも有効です。

利用するには、公式のドキュメント を参考に、

  1. Discord Developer Portal へアクセスし
  2. ボットを作成してトークンを取得し
  3. 権限(Mute Members と Deafen Members のみでよい)を付与して
  4. サーバへ招待する

な作業をしたうえで、AmongUsCapture の設定画面でトークンを入力する必要があります。最初だけちょっと手間ですが、いちど設定してしまえばあとは放置でよいので簡単です。

設定画面のここです

AutoMuteUs の開発者が、この作業の解説動画も公開していますので、併せて参考にできます。

なお、セルフホストの場合で、キャプチャのトークン欄にボット側の DISCORD_BOT_TOKEN と同じ値を入れても動作はしますが、Discord からすれば同じトークンでのリクエストになるので、制限を回避する観点では大きな効果は期待できません(厳密には完全に無意味でもないのですが、別のトークンを利用する方が効果は大きいです)。

ワーカボットによる高速化

AutoMuteUs Premium の シルバー以上 で、公式ページで Priority Muting Bots と表記されているのがコレです。シルバー以上の利用者は、.au premium invite コマンドで、追加のボットの招待リンクを取得でき、サーバに追加でボットを招待するだけで、ミュート・アンミュートが高速化されます。

セルフホスト の利用者は、追加でボットを作成し、トークンを取得してサーバに招待(権限は Mute Members と Deafen Members のみでよい)した上で、.env ファイルの WORKER_BOT_TOKENS にそのトークンを追記すれば利用できます。WORKER_BOT_TOKENS はカンマ区切りで複数のトークンを設定できるので、ワーカボットを複数用意すればさらに動作を安定させられます。詳細な説明は省きますが、ワーカボット 1 つあたり 7 人まで と考えて数を調整するとよいでしょう。

ぼくの管理するインスタンスには三つのワーカボットが居ます

なお、環境変数 WORKER_BOT_TOKENS は 5.0.0 以上のみの対応のため、それ以前(2.4.3 など)を利用している方は、代わりに DISCORD_BOT_TOKEN_2 として追記してください。ただし、環境変数 DISCORD_BOT_TOKEN_2 には複数のトークンの列挙はできないので、ワーカボットの数は 1 つのみに限定されます。

技術的な補足

技術的には、ミュート・アンミュートの Discord へのリクエストは、以下の優先順位で処理されています。

  • ワーカボット
    • WORKER_BOT_TOKENS で入力したトークンによる処理
    • 複数のトークンを入力した場合は、すべてのトークンで順次処理を試行
  • キャプチャボット
    • AUCapture の Settings 画面に入力したトークンによる処理
  • プライマリボット
    • DISCORD_BOT_TOKEN で入力したトークンによる処理

プライマリボットはそもそも制限を受けやすい(ユーザからのコマンドへの応答やメッセージの投稿などで API リクエストを行わざるを得ない)ため、ミュート・アンミュートの処理に関しては最後の手段として使われます。

さらに技術的には、Discord の制限とは に、Galactus もワーカボットのトークンごとのミュート・アンミュートリクエストを 5 秒あたり 7 回に制限しています。環境変数でカスタマイズできる箇所ではありますが、Discord 側の制限が変わるわけではないので、この数値をいじるメリットはあまりありません。

ゲーム開始直後のミュート時間の変更

ゲーム開始後、役職が明らかになって即座に声で反応してしまうと、ミュートになっていなくてバレる…… みたいな事故がまれに発生します。

実は、デフォルトでは、ゲームの開始後は 7 秒待ってからミュート するようになっています。同様に、ディスカッション終了からタスクに戻るときも、デフォルトでは 7 秒待ってからミュート します。.au settings delays コマンドでこの待ち時間を短くすることで、この事故は予防できます。

コマンドは、.au settings delays <遷移前フェイズ名> <遷移後フェイズ名> <数値> で、それぞれ次の通りです。

  • 遷移前フェイズ名遷移後フェイズ名
    • lobbytasksdiscussion のいずれかをそれぞれ指定します
    • 例えば、遷移前フェイズを lobby、遷移後フェイズを tasks と指定すると、ロビーからタスクに遷移したとき、すなわち ゲーム開始時 を表現できます
  • 数値
    • 待ち時間を秒単位で指定します

デフォルト値は次の通りです。

遷移前フェイズ遷移後フェイズ待ち時間補足
lobbytasks7ゲームを開始した直後
taskslobby1タスク中にゲームが終了したとき(タスク勝ち、キル勝ちなど)
discussionlobby6ディスカッションでゲームが終了したとき(追放勝ちなど)
discussiontasks7ディスカッションが終了してタスクに戻るとき

統計や成績、タイムラインの表示

有償の AutoMuteUs Premium、またはセルフホストで 5.0.0 以降を利用している場合、過去に遊んだゲームの統計や成績を表示できます。

サーバ全体の統計やユーザ別の成績の表示

.au stats guild コマンドで、そのサーバの過去の統計情報を確認できます(ギルドとは、Discord ではサーバのことです)。

勝率(Total Winrate)、役割別の勝率(Crewmate/Imposter Winrate)、メンバの組み合わせでの勝率(Best/Worst Imposter/Crewmate Team)、最初に殺されがちなヒト、最初に特定のヒトに殺されがちなヒト、の情報が得られます。

また、.au stats <@ユーザ名> では、個人単位の成績も表示できます。

これらの統計情報画面の表示は、それぞれ次のオプションでカスタマイズできます。

コマンド意味
.au settings leaderboardMention <true/false>表示に含まれるユーザ名のメンション化の有無を指定する。デフォルトは true で、メンションが飛ぶ。false にするとニックネームだけになり、メンションは飛ばない。
.au settings leaderboardSize <数値>ランキングに表示する順位を指定する。デフォルトは上図の通り 3 で 3 位までの表示だが、例えば 5 にすると 5 位まで表示されるようになる。
.au settings leaderboardMin <数値>あるユーザがランキングに含まれるようになるために必要なゲームの数を指定する。デフォルトは 3 で、そのサーバで 3 回以上ゲームをしないとランキングに載らない。

ゲームのタイムラインの表示

開発途中の機能ではありますが、.au stats <ゲーム ID> を実行すると、そのゲームの時系列が確認できます。

必要なゲーム ID は、ゲームオーバメッセージ の中で Match ID として確認できますが、デフォルトではそもそもこのメッセージ自体が無効化されています。下図のようなメッセージです。

このゲームオーバメッセージを有効化するには、.au settings matchSummary <数値> を実行する必要があります。数値には、ゲームオーバメッセージの表示時間(分単位)を指定しますが、個人的なおすすめは -1(無期限)です。1 以上の数値を指定すると、その時間が経過したらそのゲームオーバメッセージは削除されるようになります。

観戦者のミュート・アンミュート

AutoMuteUs は、通常はゲーム内のプレイヤと Discord のアカウントがリンクされているヒトだけを対象にミュート・アンミュートを行うのみで、プレイヤでない観戦者がボイスチャットに混ざっていても、そのヒトはミュート・アンミュートしません。

有償サービスまたはセルフホストでは、.au settings muteSpectators true を実行すると、同じボイスチャットに参加しているプレイヤでない観戦者 を、死者と同じルールでミュート・アンミュート するようになります。画面配信と組み合わせると便利に利用できますね。元に戻すには、同じコマンドで true でなく false を指定します。

なお、この機能は観戦者の数に応じて前述の Discord の API 制限を受けやすくなるため、利用には注意が必要です。利用する場合は、同じく前述のキャプチャボットやワーカボットの併用が推奨されます。

チャットで流れたメッセージの再表示

ボットが投稿してくれるこのメッセージは、チャットで流れてしまいがちです。

そんなときは、.au refresh を実行すると、新しく投稿しなおしてくれます。

また、.au settings autoRefresh true で自動リフレッシュを有効化すると、

  • ディスカッションの開始時
  • ゲームの終了時(Try Again か Quit をクリックしてロビーかメニュー画面に戻ったとき)

に、自動で .au refresh に相当する処理を行ってくれるようになります。

ミュート・アンミュートの条件の変更

デフォルトでは、例えば、

  • ロビーでは全員聴こえるし喋れる
  • タスク中は死者のみ聴こえるし喋れる
  • ディスカッション中は全員聴こえるが、喋れるのは生存者だけ

な状態ですが、このルールも細かくカスタマイズできます。コマンドは .au settings voiceRules <mute/deaf> <フェイズ名> <dead/alive> <true/false> で、それぞれ次の通りです。

  • mute/deaf
    • mute でマイクミュートの設定を、deaf でスピーカミュートの設定を変更します
  • フェイズ名
    • lobby(ロビー)、tasks(タスク中)、discussion(ディスカッション)のいずれかを指定します
  • dead/alive
    • dead で死者の設定を、alive で生存者の設定を変更します
  • true/false
    • mute/deaf で指定した設定について、フェイズ名 で指定したフェイズ中の dead/alive で指定した状態のプレイヤの設定の有効(true)・無効(false)を指定します

デフォルトでは、以下のコマンド相当の設定が投入されています。

設定フェイズ生死デフォルト値
mutelobbyalivefalse
mutelobbydeadfalse
mutetasksalivetrue
mutetasksdeaffalse
mutediscussionalivefalse
mutediscussiondeaftrue
deaflobbyalivefalse
deaflobbydeaffalse
deaftasksalivetrue
deaftasksdeaffalse
deafdiscussionalivefalse
deafdiscussiondeaffalse

ボット操作のロールによる制限

AutoMuteUs では、デフォルトではボットに対するすべての操作をサーバの全員が行えてしまいますが、次の二つの役割を設定すると、ボットを操作できるメンバを制限できます。人数が多いサーバで何らかの統制が必要な場合には、この機能が便利に使えるかもしれません。

  • 管理者(admin
    • ボットに対するすべての操作を実行できる権限を持つユーザ
    • 管理者が一人以上設定されていると、設定の変更(.au settings コマンドの実行)は管理者しかできなくなる
  • 運用者(operator
    • ゲームの作成や終了(.au new.au end)やポーズ(pause)、強制アンミュート(unmuteall)、設定変更(settings)など、ゲームの操作やミュート・アンミュートに関わる処理を実行できる権限を持つロール
    • ただし、管理者が設定されている場合は、設定変更の権限は無くなる

設定は、以下のコマンドで行います。

  • 管理者の指定
    • .au settings adminUserIDs <@ユーザ名> で管理者を指定(ユーザ名は必要なだけ複数名をスペース区切りで列挙する)
    • .au settings adminUserIDs clear で管理者設定をリセット
    • .au settings adminUserIDs で現在の設定を確認
  • 運用者の指定
    • .au settings operatorRoles <@ロール名> で運用権限を与えるロールを指定(ロール名は必要なだけ複数名をスペース区切りで列挙する)
    • .au settings operatorRoles clear で運用者設定をリセット
    • .au settings operatorRoles で現在の設定を確認

設定した段階で、権限を持たないユーザは権限が必要なコマンドを実行できなくなります。なお、管理者と運用者は必ずしも両方設定する必要はなく、どちらか一方でも構いません。

また、サーバのオーナは、設定に関わらず常にすべての操作を実行できます。

コマンドの簡易表記

本エントリでは一貫してコマンド文字列を完全表記で記載していますが、例えば .au settings.au s だけ、.au new.au n だけなど、簡易表記が一部のコマンドで機能します。わかりやすいものは、コマンドごとのヘルプで Aliases として明記されています。

どこにも書かれていない簡易表記も存在しており、挙げるとキリがないので列挙はしませんが、一例ではフェイズ名も簡略化が可能です。例えば次の二つのコマンドは同じ意味です。

  • .au settings delays discussion tasks 3
  • .au s d d t 3

ほかにも、turetfalsefclearc などちょこちょこあるので、遊べる環境があれば探してみるのもよいでしょう。いちばん確実なのは、ソースコードを読むことです。

イースターエッグ

実はこんなアスキーアートを表示する機能が隠されています。探してみましょう。

メッセージ中のルームコードの非表示

バージョン 6.13.0 から、ボットが投稿するメッセージ中のルームコードを、このように非表示にできるようになりました。

.au settings displayRoomCode <always/spoiler/never> で変更でき、デフォルトは always です。spoiler では Discord のネタバレ機能でコードが隠されるようになり、閲覧にクリックが必要になります。never では完全に秘匿されます。

最近の公式サービスの負荷状況

公式サービスを無償で利用している場合、高負荷時にゲームを開始できない制約を受けます(有償サービスまたはセルフホストでの利用時は、この制約はありません)。

グローバルで 150 ゲーム がこの制限の閾値ですが、最近は日本時間で 21:00 頃から 24:00 頃 が特に高負荷で、この閾値を恒常的に超えた状態になっています。

次のグラフは、ある一日の公式サービスの負荷状況です。最近は連日だいたいこんな感じで、ピーク時は 230 近くまで増えることもあるようです。盛況ですね。

なお、公式サービスの負荷状況(その時点でグローバルで実行されているゲームの数)は、公式サービスのボットに対して .au info を実行すれば、結果の中の Active Games 欄で確認できます。

上図の例だと 153 なので、150 を超えているため、公式サービスの無償ユーザは .au new ができない状態です。

おわりに

AutoMuteUs のちょっとマイナかもしれない機能群を紹介しました。ほかにも、

  • コマンドを .au でなく別の文字列に変更する機能(commandPrefix
    • セルフホストであればデフォルトの .au 自体も環境変数で変更可能
  • タスク中に死んだら直ちにアンミュートする機能(unmuteDeadDuringTasks
  • ミュート・アンミュートを一時的にしなくする機能(pause
    • 鬼ごっこや初参加者の練習時などに
  • 保存されているプレイヤ名の確認や削除(cache
  • 設定のリセット(reset
  • 統計収集の拒否(privacy
  • マップの表示(map

など実にいろいろな機能があり、ヘルプをつぶさに観察するのも楽しいかもしれません。

15 人対応も間もなくとのことなので、引き続き楽しめそうですね。

@kurokobo

くろいです。ギターアンサンブルやら音響やらがフィールドの IT やさんなアルトギター弾き。たまこう 48 期ぎたさん、SFC '07 おんぞう、新日本ギターアンサンブル、Rubinetto。今は野良気味。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です