あーあーそのー

最近はshuyuheyと名乗ることが多いですが面倒なのでBLThunder1991のままにします。

Among Usを快適にプレイするために、Discordのボイスチャットを一括でミュートしたりミュート解除するツールを書いている

はじめに

最近、休みの日の夜に友人たちとAmong Usというゲームをプレイしています。 やったことがある、あるいはYouTubeなどで見たことがあるという方もいるかと思います。

簡単に説明すると宇宙船の船員の中に船員を殺害する裏切り者の「インポスター」がいて、船員はインポスターを会議であぶり出して追放しつつ宇宙船の修理タスクの完了を目指す、というゲームです。船員の中に潜むインポスターを会議であぶり出す、という特徴から宇宙人狼と呼ばれることもあります。

このゲームでは、死体を発見したときとステージのどこかにある緊急招集ボタンを押したときに全員参加の会議が開かれます。ゲーム内でもテキストチャットが用意されていますが、実際はDiscordなどのボイスチャットを使うことが多いと思います。会議以外はミュートしてタスクをすすめ、会議のときだけミュートを解除する。ただし、インポスターに殺されたあるいは追放された船員は会議中であってもミュートをする、という独自ルールでプレイしていることが多いのではないかと思います。

このミュートにかんして、色々思うところがあってツールを書くことにしました。

公開できるぐらいにはまとめましたが、今後も継続して開発するかどうかは決めていないので、ある程度自分で面倒を見れそうな方は使ってみていただければ、と思います。


ミュート事情

ミュートをどんな感じでやることがあるのかを簡単にまとめてみます。ボットの豊富さから、基本Discordを前提としていますがLINE通話など他のツールで代替できるものもあります。

喋らないように気をつける

常時音声通話状態にしておいて会議のときだけしゃべる、それ以外は静かにプレイすることもあります。かなりお手軽ですが、なんだかんだキルされたときに声が出てしまったり死んでいるのについつい口を出してしまったりすることもよくあります。あとはゲームの音がマイクに乗ってしまって、タスクの音やキルしている音が聞こえるとかもあります。

Discordを自分で操作する

Among UsとDiscordを同時に起動しておいて会議に招集されたら自分でDiscordのミュートステータスを適切なものにする、というスタイルでやっているのをよく見ます。

この方法はAmong UsとDiscordをどちらも同時に操作できる必要があります。Among Usがスマホアプリ版で同じ端末でDiscordを起動している場合、Discordを操作するためにアプリを切り替えると通信が切れてしまうことがあるためです。

これの亜種に、Discordを操作できない人の代わりにミュートしてあげるというのがあります。Discordでは権限さえあれば人のミュートを操作できるので、会議の開始終了に合わせて誰かが操作してあげるというかんじです。めんどくさいです。

休止チャンネルを使う

Discordには休止チャンネルという機能があって、そのチャンネルに入っている限りミュートされます。それを利用し、 Moveer などの人を特定のチャンネルに移動させるボットを使うと、誰か一人がDiscordをゲームと同時に触れれば、各々がミュート操作をしなくて済みます。

とはいえ コマンドの入力は割と面倒です。「ボイスチャンネル→休止チャンネル」と「休止チャンネル→ボイスチャンネル」の移動があるので、一回入力したコマンドをコピーしたらそれを常に貼り付けるだけ、みたいなことはできず毎回コピーしなおさなくてはいけません。

!fmove 休止 一般
!fmove 一般 休止

いい感じのツールを使う

プレイを快適にするために作られているツールはちらほらあって、おそらく一番有名なのはAutoMuteUsというツールでDiscordのBotとして実装されています。

github.com

Steam版のAmong Usをなんとかして船員の生死を取得し、会議時のミュートステータスをよしなにしてくれるというツールです。

僕はWindowsを持っていないので、このツールを使うことはできませんでした。

霊界チャット

Among Usではインポスターにキルされた人と会議で追放された人同士で会話できる、霊界チャットという文化があります。 Among Usはキルされたあるいは会議で追放された船員は引き続きタスクを進めなくてはいけません(インポスターの場合はサボタージュという妨害行為ができます)。これを無音の中やるのはそれなりに寂しいものがあります。

また、新しく参加した人はたいていゲームに慣れていなくて最初にキルされたりしてしまうので、霊界チャットが無いとかなり寂しい気がしています(実際最初にキルされると話し相手がいなくて寂しい……)。

Discordを自分で操作する

会議中はキルされた人はミュート、生きている人はミュート解除して会議以外ではキルされた人はミュート解除、生きている人はスピーカーミュート(マイクのミュートと、他の人の音声を自分だけミュート)することで霊界チャットを実現できます。

全員がDiscordを操作できる状態であれば一番手軽だと思います。

いい感じのツールを使う

前述のAutoMuteUsも霊界チャットに対応しています。

ツールを作るに至る

僕が普段プレイしているコミュニティはこんな特徴を持っています。

  • メンバーのほとんどがスマホでDiscordにアクセスしている
  • Among Usはスマホアプリ版か、Switch版がほとんど(つまりスマホでDiscordとAmong Usを同時起動が多い)
  • Discordを使うのはこのコミュニティでAmong Usをやるときだけ
  • メンバーが友達を連れてくる(たいていAmong Usをやったことがないか、プレイ動画を見たことがあるぐらい)

「Discordを各自操作してください」は同時起動の人は無理だし、Steam版を使っている人がほぼいないのでAutoMuteUsを使うのも難しそうでした。最初はMooverを使って休止チャンネルに移動させる、みたいなこともやっていましたがなんだかんだでめんどくさい。

そこで、誰か一人(つまり僕)がボタン1つでミュートしたりミュート解除するツールがあるだけでだいぶ楽になるのではと思いました。配布できるように作れれば、僕が参加できない日は別の人にやってもらえばよさそうです。

また、霊界チャットの機能もつけることにしました。ゲームから離脱したあとも参加できたほうが楽しいし、これがないとゲーム開始前や会議のときしか話さないので新しく参加した人が他の人と話す機会がないんですよね。

そんなこんなで去年の12月あたりから空き時間に作り始めて、何回か運用しています。

ツールの説明

僕と同じようなことに困っていて、ある程度自分で面倒を見られるかたはぜひ使ってみてくれると嬉しいです。

github.com

WindowsでもMacでも動かせるように、Electronでツールを書きました。仕組みとしては単純で、DiscordのAPIをこのツールから叩いているだけです。APIを叩くために、DiscordのBOTを作りトークンを得る必要があります。

f:id:BLThunder1991:20210308132345p:plain:w300
トークン入力

トークンを入れると、Botが入っているサーバが選択できるようになります。サーバにボットを追加していない場合は、予め追加しておいてください。追加する際には、サーバミュートとサーバースピーカーミュートの権限がついていれば十分です。(管理者など強すぎる権限は不要です)

チャンネル一覧にはボイスチャットのみリストされます。

f:id:BLThunder1991:20210308132314p:plain:w300
サーバ、チャンネル選択

数秒に一回ボイスチャンネルに入っているメンバーが取得されます。プレイするメンバーが全員揃ったら「ゲーム開始」をクリックします。ゲーム開始後にボイスチャンネルに入ったメンバーはリストに出てきませんので、メンバー変更がある場合は一旦「ゲーム終了」をクリックします。

f:id:BLThunder1991:20210308132450p:plain:w300
メンバー受付

「ゲーム開始」の状態になると、はじめは全員がマイクミュートおよびスピーカーミュートの状態になります。「会議開始」ボタンをクリックすると、すべてのユーザのミュート状態が解除され、会話ができる状態になります。

このときメンバーをクリックすると、生死の状態が切り替わります。死んでいる場合はマイクミュートされます。

f:id:BLThunder1991:20210308132507p:plain:w300
プレイ中
f:id:BLThunder1991:20210308132521p:plain:w300
キルされた/追放されたときは名前をクリック

「会議終了」をクリックすると生きているメンバーがマイクミュートおよびスピーカーミュートの状態になります。逆に死んでいるメンバーはミュートがすべて解除されるので、生きているメンバーのプレイを邪魔することなく、死んでいるメンバー同士で会話できるようになっています。

今後

現在わかっている問題がいくつかあるのと、元気があればやりたいことをいくつか書きます。

Mac版の証明書を用意していない

まだMacだと起動できません。nodejsの実行環境がある人はリポジトリをクローンしてきてビルドすれば使えると思います。

10人になるとミュート状態の切り替わりが遅い

10人分のミュート状態を更新するので遅いです。「おっ、大丈夫かな?」という気持ちになるぐらい遅くて、これは早めに改善しないと僕以外が使うときに戸惑ってしまうなあと思っています。コードの書き方で工夫できる気がしています。

ボットの導入がめんどう

一回やればいいだけ、とはいえまだ面倒だなと思います。例えばツールにDiscordアカウントでログインするだけで使える、ぐらいになるとそこまでPCに詳しくない人にもツールを担当して貰えそうだなと思っています。

おわりに

作り始めた当時はそれっぽいツールがなかったものの事情が変わってよりよい物があるかもしれません。そのときは教えて下さい。