TomoTom0 / UmaTournamentBot

Discord bot for hosting tournaments in Uma Musume

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

UmaTournamentBot

Introduction

このBotはdiscord上での大規模トーナメントをサポートします。 抽選・グループ分け・集計・チャンネル作成を自動で行うので、トーナメント開催が非常にスムーズになります。

This discord bot supports your hosting tournaments of Uma Musume Pretty Derby.

紹介

Botをサーバーに追加する

Bot招待url: https://discord.com/api/oauth2/authorize?client_id=857220750549450782&permissions=268528848&scope=bot

こちらは私がheroku上で動かしているbotの招待urlです。 上記リンクをクリックし、サーバーを選択して認証することでbotを追加できます。 この操作にはサーバーの管理者権限が必要です。

Botの追加

トーナメントの開催

はじめに: 全体の流れ

  1. 参加者募集
    1. ?open <1試合人数> <最大人数>でトーナメントを開始。(例: ?open 3 81)
    2. 該当メッセージにリアクションを付けてもらうことで、参加者を募集。
    3. 十分集まれば、!nextで1回戦開始。
  2. 1回戦~決勝戦
    1. グループ分けがannounceチャンネルで発表される。1回戦のみ、参加人数調整のため抽選が行われる。
    2. 各グループごとにグループのチャンネルに集まり、試合を行う。
    3. 勝者は該当メッセージにリアクションを付ける。
    4. 勝者一覧を確認して、適切に出揃えば、!nextで次の試合に移る。適切に報告されていないグループがあった場合も、開催者には対処の方法がいくつか用意されている。
  3. トーナメント終了
    1. 勝者が1人になれば、トーナメントは終了する。
    2. トーナメント用に作られたチャンネルなどは?deleteResで削除可能。

以下で詳しい流れを説明する。

step 1. 開催・参加者の募集: ?open <num=3> <maxNum=81>

まずは?open <1試合人数> <最大人数>でトーナメントを開催します。 自動でトーナメント用のチャンネルとカテゴリが作成されます。

引数 内容 既定値
num 1試合当たりの人数 3
maxNum トーナメント全体の最大参加人数 81

トーナメントの開催: open

参加募集メッセージが流れるので、参加希望者はそこにリアクションを追加します。 (リアクションの種類は何でも構いません。また、一人が複数押しても影響はありません。)

参加希望者は随時announceチャンネルに表示されます。 希望者が十分集まったら、主催者(?openと入力した人)が!nextと入力して、次に進みます。 以降も、このトーナメントに関してのコマンドは、主催者のものしか受け付けません。

参加希望者の募集締め切り

step2. 1回戦 グループ分け・チャンネル役職作成・勝利報告

!nextの入力で1回戦が始まります。 最大参加人数やトーナメント調整のため、1回戦では必要に応じて抽選が行われます。

1回戦開始

1回戦のグループ分けはannounceチャンネルで確認できます。

1回戦グループ分け発表

同時にグループ用のテキストチャンネルが作成され、グループの参加者ごとにメンションが飛ばされています。 これでグループ数が多くなっても、自分のグループを見逃す心配はありませんね!

グループごとのメンション

1回戦の勝者は該当のメッセージにスタンプを押します。 報告された勝者はグループ分けのメッセージで確認できます。(名前の左に〇が付きます。)

未報告、あるいは複数人が勝利報告しているグループは下部に明示されます。グループ番号の横にも報告状況に応じて、未/複/済が表示されます。 なお、1回戦に参加していない人がスタンプを押しても影響はありません。

1回戦勝利報告状況

勝者が適切に出そろったら、!nextで2回戦に進みます。

2回戦開始

Caution! 勝利報告: 不適切な人がいた場合

いつまでも勝利報告をしないグループがあった場合、!nextForceにより、未報告グループを無視して、次に進むことができます。 あるいは、!win <@name>/<name>#<4桁の数字>で勝者に追加できます。(リアクションの追加にすら手間取る人は無視して進んだ方がいいかもしれませんが。)

!win

逆に複数人が勝利報告をし続けるグループがあった場合、!kick <@name>/<name>#<4桁の数字>で不適切なトレーナーをトーナメントから除名できます。

!kick

step3. トーナメントの終了

2回戦以降も同様に続きます。 最終的に勝者が1名になれば、トーナメントは終了です。

トーナメント終了

途中でbot支援の必要がなくなれば、!cancelでトーナメントを中止できます。

!cancel

その他のコマンド

邪魔なチャンネル・役職の削除

  • ?deleteRes: 終了したトーナメントに関してのみ削除 (推奨・便利)
  • ?delete <tour_id>: 指定したトーナメントに関してのみ削除 (推奨)
  • ?deleteAll: すべてのトーナメントに関して削除 (非推奨)

bot操作権限の切り替え: ?onlyAdmin

botの操作をサーバーの管理者権限に限定するかどうかを切り替えます。 既定では限定されています。

役職利用の切り替え: ?roleIsValid

トーナメントの運用・演出において、役職を利用するかどうかを切り替えます。ただし、大人数では役職に関する操作が重くる可能性があります。 既定では利用しません。

注意点

長期間トーナメントには不向き

botがherokuで運用されている場合、24時間に1度botが再起動されるため、その時点で大会の情報は失われます。 ゆえに、長期間トーナメントには不向きです。(なお、今後この問題は解消する予定です。)

自分で運用する

本格的に運用する場合、herokuやGCPで自分でbotを利用することをお勧めします。(参考: TomoTom0/DiscordBot_Heroku_Stat.ink)

なお、環境変数としてDISCORD_BOT_TOKENを登録する必要があります。

⇩のボタンを押せば、herokuでこのbotの運用が始まります。 Deploy

About

Discord bot for hosting tournaments in Uma Musume

License:MIT License


Languages

Language:Python 100.0%