[技術系]Discordで対戦系イベントを管理できるbotを作った話

 ※全文無料

 今回は技術系のお話になります。
 この度、対戦系イベントをコマンド入力によって管理してくれるDiscord Bot「tournament supporter」を開発したので、その紹介記事を書きたいと思います。

2021年5月27日更新
ver2.0が公開されました。ボタン操作が可能になりました。
こちらが最新版となりますので、ご確認ください。
[技術系]Discord Bot「tournament supporter」ver2.0を公開[アップデート]
2021年1月30日更新
ver1.1が公開されました。アップデート内容については こちら
[技術系]Discord Bot「tournament supporter」ver1.1を公開[アップデート]

目次

1: 対戦系イベント運営用Discord Bot「tournament supporter」とは?
2:何ができるの?
3:どうやって使うの?
4:導入方法は?
5:使用期間は?
6:あとがき(開発動機とか)

1: 対戦系イベント運営用Discord Bot「tournament supporter」とは?

 対戦系イベント運営用Discord Bot「tournament supporter」は、簡単に言うと、コマンド入力によって

大会運営にまつわる作業を自動処理してくれるツール

です。
 参加者リストを作ってくれたり、マッチングしてくれたり、勝敗結果を反映してくれたりします。
 botの内部構成としては、1つのmainファイルと4つの自作ライブラリでできています。


2:何ができるの?

 現在実装されている機能は次の通りです。

■機能一覧
○大会管理系(管理者ユーザ用)
・参加者リストとチャンネルを作成する
 コマンド:/make_list (大会名)
 対応チャンネル:どこでも可能
・参加者リストを削除する
 コマンド:/delete_list (大会名)
 対応チャンネル:どこでも可能
・大会を開始する(対戦部屋を作成する)
 コマンド:/start
 対応チャンネル:大会チャンネル
・大会を終了する(対戦部屋を削除する)
 コマンド:/end
 対応チャンネル:大会チャンネル
・現在のラウンドの成績表を表示する
 コマンド:/show_result
 対応チャンネル:大会チャンネル
・大会の進行状況をリセットする
 コマンド:/reset_event
 対応チャンネル:大会チャンネル
・大会を完了し、最終成績を表示する(ver1.1にて実装)
 コマンド:/finish_event
 対応チャンネル:大会チャンネル


○参加者管理系(一般ユーザ用)
・参加する
 コマンド:/join (プレイヤー名)
 対応チャンネル:大会チャンネル
・参加をキャンセルする
 コマンド:/join_out
 対応チャンネル:大会チャンネル

○参加者管理系(管理者ユーザ用)
・参加者リストの表示
 コマンド:/show_list
 対応チャンネル:大会チャンネル
・参加者の募集を締め切る
 コマンド:/join_end
 対応チャンネル:大会チャンネル
・参加者の募集を再開する(ver1.1にて実装)
 コマンド:/join_start
 対応チャンネル:大会チャンネル

○勝敗管理系(一般ユーザ用)
・勝敗を報告する
 コマンド:/submission
                   /submission 引き分け
                   /submission 両者敗北
 対応チャンネル:大会用対戦部屋チャンネル

○ 勝敗管理系(管理者ユーザ用)
・勝敗受付を締め切る
 コマンド:/finish_round
 対応チャンネル:大会チャンネル

○マッチング系(管理者ユーザ用)
・初回マッチング
 コマンド:/first_match
 対応チャンネル:大会チャンネル
・次回マッチング
 コマンド:/next_match
 対応チャンネル:大会チャンネル


3:どうやって使うの?

 パターンとしては、discordを用いたイベント、主に大会の運営に使います。大会の参加登録からマッチング、勝敗登録、成績管理をコマンドによってbotが管理し、運営者の負担を軽減します。
 自分の周りでは、新型コロナの影響でリモートポケカ(discordのボイスチャットと画面共有を使ってリモート対戦する)をする人が増えていて、discordを使った対戦イベントが増えていると認識しています。例として、ポケモンカードを上げましたが、オンライン対戦系のイベントであれば、基本的にこのbotを使うことができると考えています。また、参加登録とマッチング、結果報告といった基本的な機能はオフラインイベントでも使えるため、活躍の場はあると思っています。


 次に、基本的な操作の流れを示します。

■イベント管理フロー
1:大会を作り、参加登録を行う
2:マッチングを行い、大会を開始する
3:勝敗登録を行う
4:予定している回数だけ、次回のマッチングを行う
5:大会を完了して、最終成績を表示する
6:その他、例外

3-1:大会を作り、参加登録を行う

 第1フローでは、次のような操作を行います。

1:管理ユーザが、コマンド「/meke_list (大会名)」で大会を作成する
2:一般ユーザが、該当チャンネル内にてコマンド「/join (プレイヤーネーム)」で大会に参加する
3:管理ユーザが、コマンド「/join_end」で大会参加を締め切る

3-1-1:管理ユーザが、コマンド「/meke_list (大会名)」で大会を作成する
 
例えば、「練習」という大会名のイベントを開催したい場合、管理ユーザがコマンド「/make_list 練習」を打つことで、カテゴリ「大会」の中に「練習」というテキストチャンネルが作成されます。
 また、このタイミングで参加者リストがサーバ内で作成されています。これを削除したい場合には、管理ユーザがコマンド「/delete_list 練習」を打つことで削除されます。
3-1-2:一般ユーザが、該当チャンネル内にてコマンド「/join (プレイヤーネーム)」で大会に参加する
 例えば、Aさんがプレイヤー名「サポーター君」という名前で参加登録をする場合、作成されたテキストチャンネル「練習」内で、コマンド「/join サポーター君」と打つことで、該当する大会に参加登録することができます。
 ちなみに参加を取り消す場合には、同じチャンネル内でコマンド「/join_out」と打つことで、参加を解除することができます。
3-1-3:管理ユーザが、コマンド「/join_end」で大会参加を締め切る
 
例えば、大会名が「練習」というイベントの参加登録を締め切る場合、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/join_end」と打つことで参加を締め切ることができます。

 また、大会の参加者のリストを確認したい場合は、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/show_list」を打ち込むことで確認できます。
 ver1.1より、参加者の募集を締め切った後、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/join_start」を打ち込むことで参加者の募集を再開することができます。

3-2:マッチングを行い、大会を開始する

第2フローでは、次のような操作を行います。
※現在対応しているマッチング方法はスイスドローとなります。要望等があれば機能追加していきたい部分です。

1:管理ユーザが、コマンド「/first_match」で1回戦のマッチングを行う
2:管理ユーザが、コマンド「/start」で大会を開始する

3-2-1:管理ユーザが、コマンド「/first_match」で1回戦のマッチングを行う
 参加登録が完了(3-1-3で締め切ることを指す)した後に、初回のマッチングを行います。この場合、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/first_match」と打つことで初回のマッチングを行うことができます。マッチング表は、画像データでチャンネル内に送られます。
3-2-2:管理ユーザが、コマンド「/start」で大会を開始する
 初回のマッチング後、大会を開始する場合、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/start」と打つことで、カテゴリ「大会-練習」が生成され、同カテゴリ内に必要なだけのテキストチャンネルとボイスチャンネルが「(0埋めされた3桁の数字)-対戦部屋」という名前の形式で作成されます。

3-3:勝敗登録を行う

 第3フローでは、次のような操作を行います。

1:一般ユーザが、コマンド「/submission」で勝敗登録を行う
 ※勝敗登録には、3パターンあります。
  パターン1:勝ちと負け
  パターン2:引き分け
  パターン3:両者敗北
2:管理ユーザが、コマンド「/finish_round」で勝敗登録を締め切る

3-3-1:一般ユーザが、コマンド「/submission」で勝敗登録を行う
 
・パターン1:勝ちと負け
  勝利したユーザが、コマンド「/submission」と打つことで、コマンドを打ったユーザが勝ちもう一方のユーザが負けで登録される
 ・パターン2:引き分け
  どちらかのユーザが、コマンド「/submission 引き分け」と打つことで、両者ともに引き分けで登録される
 ・パターン3:両者敗北
  どちらかのユーザが、コマンド「/submission 両者敗北」と打つことで、両者ともに負けで登録される

3-3-2:管理ユーザが、コマンド「/finish_round」で勝敗登録を締め切る
 
その回の試合を締め切る場合、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/finish_round」と打つことで、勝敗登録を締め切ることができます。

 また、ラウンド間で成績を確認したい場合は、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/show_result」を打ち込むことで確認できます。

3-4:予定している回数だけ、次回のマッチングを行う

 第4フローでは、次のような操作を行います。

1:管理ユーザが、コマンド「/next_match」で次回のマッチングを行う

3-4-1:管理ユーザが、コマンド「/next_match」で次回のマッチングを行う
 次のマッチングを行う場合、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/next_match」と打つことで、勝敗登録を加味したうえで次回マッチングを行うことができます。  

3-5:大会を完了して、最終成績を表示する

 第5フローでは、次のような操作を行います。

1:管理ユーザが、コマンド「/finish_event」で大会を完了し、最終成績を表示する
2:管理ユーザが、コマンド「/end」で大会を終了する

3-5-1:管理ユーザが、コマンド「/finish_event」で大会を完了し、最終成績を表示する(ver1.1より実装)
 次回マッチングを行わずに、その時点で大会を終了する場合、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/finish_event」と打つことで、大会「練習」を完了し、その時点での勝ち点、オポネントを計算し、順位付けされた成績表を表示することができます。なお、この後に行える操作は、3-5-2のみとなります。
3-5-2:管理ユーザが、コマンド「/end」で大会を終了する
 開催している大会を終了したい場合、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/end」と打つことで、カテゴリ「大会-練習」とその中に含まれるチャンネルをすべて削除し、/join_endされる前の状態にリセットされます。
※コマンド「/end」はコマンド「/start」の後でしか使用できません

3-6:その他、例外

 どうしてもイベントの状態を初期化したい場合、作成されたテキストチャンネル「練習」内で、管理ユーザがコマンド「/reset_event」と打つことで、コマンド「/join_end」する直前の状態にリセットされます。


4:導入方法は?

 botの導入方法は普通のbotと同じです。

1:招待リンクから招待ページに飛ぶ
2:導入するサーバを選ぶ
3:botに与える権限を確認してから、認証する

1:招待リンクから招待ページに飛ぶ
 botをサーバに招待するためのページに飛ぶためのリンクがあります。このbotに関しても同様です。リンクは記事の一番下に張っておきますので、そこから飛んでください。

2:導入するサーバを選ぶ
 招待リンクの先にアクセスすると、次のような画面に推移します。ここでbotを追加したいサーバをプルダウンから選択して、「はい」を選択します。

画像2

3:botに与える権限を確認してから、認証する

 「はい」を選択すると、次の画像のような画面に推移します。ここでbotに与える権限が表示されますので、了承される場合のみ、「認証」を選択してbotを導入してください。

画像1


5:使用期間は?

 いわゆるベータテスト的なイメージで、1か月は無料で公開してみたいと思います。一般公開してみて、botの性能が変わらず担保されるのか未知数な部分があるため、いろんな人に使ってみてほしいです。開発・維持費(主にサーバ代)とかも多少あるので、3月あたりからは1ユーザ当たり月額100円程度(全体の導入数による)の有償にしたいです。有償でも使いたいと思ってもらえるようにしたいと思っていますので、もし不具合があった場合やこんな機能が欲しいという要望があるときには、ぜひ教えていただきたいです。

※現在はサーバのスペックを落として無料運用中です
 デメリットとしては、応答速度の低下や大会情報が最大1日間しか保持できないなど


6:あとがき(開発動機とか)

 このbotを作った動機ですが、discordを使った大会の開催が多くなってきて、運営する人は大変なのではないだろうか、管理するツールがあれば有用なものになるのではないか、と考えたからです。discord上で大会管理が完結していれば、運営としても管理が楽ですし、勝敗報告がそのまま成績に反映されるようになっていれば、運営が勝敗を打ち込む手間が省けます。マッチングについても同様です。少なくとも、自分もあったら嬉しいだろうと思いました。
 また今年、"自作したアプリなりツールを世の中に出そう"という抱負を個人的に掲げていまして、その第一弾として着手しました。自分で考えて、モノを1から作るということは何度かしてきましたが、世に放流したものがありませんでした。自分の中で終わっていれば、批判されることもなく自己満足して終わることができますが、世の中に出すことで、自分のレベルを知ることができます。不満をぶつけられることも多くあるでしょうが、それもまた経験ですし、成長につながるかなと思っています。
 このbotが、多くの人の趣味のクオリティが高まる手助けになればと願っています。どうかよろしくお願いします。


 botをサーバに導入する場合は、以下のリンクからbotの招待ページに飛んでください。基本的にはver2.0を招待してください。
 tournament supporter招待リンク(PC推奨)ver1.1
 tournament supporter招待リンク(PC推奨)ver2.0

開発支援として、投げ銭、サポートをしてくださると励みになります。

ここから先は

0字

¥ 100

この記事が気に入ったらチップで応援してみませんか?