Discordのチーム分けをBotで自動化 - Monvokeカスタムマッチ
Discordサーバーで内輪のカスタムマッチを繰り返していると、対戦のたびに参加者をチームA・チームBへ割り振る作業が発生します。強さが偏らないように毎回考え、前の対戦で誰がどちらのチームだったか、勝敗はどうだったかを覚えておくのは手間です。Monvokeの/customコマンドを使えば、自分でBotを書かなくてもこのチーム分けと勝敗記録を任せられます。
手動でチーム分けをすると起きること
参加者を募ってから対戦を始めるまでの間に、誰かがチームを決める作業を挟む必要があります。たとえば10人で5対5を組むなら、各自の強さを見ながら手で振り分け、2戦目からは前回の結果も踏まえて組み直すことになります。記録を残していなければ、頼れるのは参加者の記憶だけです。
/customで立てると、人数が揃った時点でチーム分けまで終わる
/customはカスタムマッチ専用の募集コマンドです。参加者がボタンで参加する流れは、通常の募集コマンド/invokeと同じですが、指定した人数が揃うと、Monvokeが自動でチームA・チームBに振り分けた状態で募集が完了します。振り分け作業そのものを募集者が行う必要はありません。
コマンドを実行すると表示される入力画面(モーダル)で指定する募集人数は、募集者自身を含みません。たとえば4人対4人の対戦にしたい場合、募集人数欄には7と入力します(募集者を含めて8人になり、4対4に分かれます)。入力できるのは1〜9の奇数のみで、これは募集者を含めた人数を2チームへ均等に分割するためです。
サーバーに複数のレーティングタイプを設定している場合は、rating_typeパラメータでどのタイプを対戦に使うか選べます。
対称マッチと非対称マッチでチーム分けの決め方が違う
/customには対称マッチと非対称マッチの2種類があり、チームの決め方も異なります。
| マッチ形式 | 人数 | チーム分けの基準 |
|---|---|---|
| 対称マッチ | 奇数(1,3,5,7,9人)+ 募集者 | レートの高い順に交互割り当て |
| 非対称マッチ(1v4) | キラー1人 + サバイバー4人(5人固定) | ランダムシャッフル |
| 非対称マッチ(2v8) | キラー2人 + サバイバー8人(10人固定) | ランダムシャッフル |
対称マッチはFPSやMOBAのようにチーム同士が対等な条件で戦うゲームを想定しています。参加者をレートの高い順に並べ、チームA・チームBへ交互に割り当てることで、チーム間のレート差が縮まるようにしています。
非対称マッチはDead by Daylightのようにキラーとサバイバーで役割が異なるゲーム向けで、asymmetricパラメータで1v4か2v8を選びます。役割そのものが違うため、レートでは比較できず、割り当てはランダムシャッフルで決まります。募集人数の入力は不要で、人数は固定です。
試合前ならチームを組み替えられる
チーム分けが終わったあと、対戦を始める前であれば募集メッセージから編成を組み替えられます。
- 「チームを移動」ボタン: 参加者本人が押すと、自分だけ反対のチームへ移動します
- 「シャッフル」ボタン: 募集者が押すと、チーム分けを最初からやり直します
どちらも対称マッチ・非対称マッチの両方で使えます。ただし人数が揃ったあとは、募集中に使えたタイトルや説明の変更メニューは表示されなくなり、編成の調整はこの2つのボタンだけで行うことになります。
勝敗を報告すると、レートに反映される
対戦が終わったら、募集者は募集メッセージから勝敗を報告します。「チームAの勝利」「チームBの勝利」といった選択肢から選ぶと、参加者全員のレートが自動で更新されます。回線落ちなどで試合が成立しなかった場合は、無効試合として報告することもできます。無効試合ではレートは変動せず、対戦数の記録だけが残ります。
レートの計算方法とレートランキングの見方は、別記事にまとめています。