League Admin Guide
Welcome, tournament organiser! This guide walks you through everything you need to create, run, and manage structured tournaments with The Muster — from setting up a new league to posting final standings.
You’ll need the admin role for your server to use these commands. If you’re not sure what that is, ask your server administrator — they can set it up using /muster-admin configure set-admin-role (see the Server Admin Guide for details).
Creating a League
Step 1 — Set Up the League
Time to create your tournament! Run this to get started:
/league-admin create
You’ll set:
- Name — Something descriptive, like “Spring Swiss 2026” or “40k Round Robin”
- Game system — Pick from your server’s configured systems (the bot autocompletes this)
- Format — Choose Swiss or Round Robin:
- Swiss — Players with similar records face each other each round. Good for larger groups (8+). Everyone plays every round.
- Round Robin — Every player faces every other player. Best for smaller groups (4–8). The number of rounds equals the number of players minus one.
- Max players — The capacity cap (2–32)
- Join mode (optional) — How players sign up:
- Open (default) — Anyone can join using
/league join - Direct admin — Invite-only. You manually add players (see below).
- Open (default) — Anyone can join using
- Role gate (optional) — Require players to have a specific Discord role before they can join. Useful for members-only tournaments.
When to use this: At the start of each tournament season, or whenever you want to organise a new event.
Note: If the game system you need isn’t listed, ask your server administrator to add it using
/muster-admin add-game. Leagues also require the Captain subscription tier — if your server isn’t on Captain, ask your server admin to upgrade using/muster-admin subscribe.
Step 2 — Build the Roster
For open leagues, players sign themselves up with /league join. You can check how many have signed up with /league info <league name>.
For invite-only leagues (or to add someone manually):
/league-admin add-player <league name> @player
This bypasses all join restrictions — open/closed status, role gates, everything. Useful for seeding invite-only tournaments or adding late entries.
Need to remove someone?
/league-admin drop-player <league name> @player
If the league hasn’t started, they’re simply removed. If it’s already underway, they’re marked as dropped, and any of their unplayed matches become bye wins for the opponent.
Step 3 — Set Up Announcements
Before starting the league, tell the bot where to post pairings:
/league-admin set-announcement-channel <league name> #channel
If you skip this, pairings will be posted in whatever channel you run the start command from.
When to use this: Before starting the league. Pick a channel that all participants can see.
Running a Tournament
Your league is set up and players have signed up — time to get things moving!
Starting the League
/league-admin start-league <league name>
This:
- Locks the league status to “active” (no more signups via
/league join) - Generates Round 1 pairings
- Posts the pairings table to the announcement channel
You need at least 2 players to start a league.
Managing Each Round
Once a round is underway, players report their own results using /report-league-result. Their opponents confirm via DM buttons or /confirm-league-result.
Check progress on the current round:
/league-admin round-status <league name>
Shows every match in the round and its status: ✅ Confirmed, ⏳ Reported (waiting for opponent to confirm), or ❌ Unreported (not played yet). Also auto-confirms any results that have been sitting for more than 48 hours.
When to use this: Midweek, to check how many matches have been played. Or just before you want to advance to the next round.
Nudge players who haven’t played yet:
/league-admin remind-players <league name>
Sends a DM to every player who has an unfinished match. If a player has their DMs turned off, they’ll be listed in the bot’s response so you can ping them publicly in the server.
When to use this: A day or two before you plan to advance the round. No limits on how often you can send reminders — use your judgement.
Advance to the next round:
/league-admin advance-round <league name>
Generates the next set of pairings and posts them. Before advancing, the bot:
- Auto-confirms any reported results older than 48 hours
- Checks for unfinished matches
If there are still unconfirmed or unreported matches, the bot will warn you and block the advance. To push through anyway:
/league-admin advance-round <league name> force:True
When to use this: When most or all matches in the current round are done and you’re ready to move on.
Handling Issues
Things don’t always go to plan — here’s how to handle the common hiccups.
Someone needs a bye:
/league-admin assign-bye <league name> @player
Gives a player a 1-0 bye win for the current round. Use this when someone’s opponent drops out, or for odd-numbered groups.
A result is disputed:
/league-admin resolve-dispute <league name> <match ID> @winner <score>
Overrides the result entirely — sets the winner, score, and marks it confirmed. The match ID is shown in the round-status view.
When to use these: When things go wrong. Someone can’t make it, players disagree on a score, or you need to manually fix a result.
Ending the Tournament
Once all rounds are done and results are confirmed, wrap things up:
/league-admin end-league <league name>
Marks the league as completed, calculates final standings, and posts the final leaderboard to the announcement channel. The results are preserved — players can still view standings and round history after the league ends.
What Your Players See
As a league admin, it’s useful to know what commands your players have access to and what they experience.
Player Commands for Leagues
| Command | What it does |
|---|---|
/league list | Browse all leagues in the server — format, capacity, registration status |
/league info <league name> | See full details: game system, format, enrolled players, requirements |
/league join <league name> | Sign up for an open league |
/league leave <league name> | Withdraw from a league (auto-bye if active) |
/league rounds <league name> | View pairings and results for any round |
/league standings <league name> | View the live leaderboard |
/report-league-result | Report a match result (guided wizard) |
/confirm-league-result <league name> | Confirm an opponent’s reported result |
The Player Experience
When a player reports a result with /report-league-result, their opponent receives a DM with the reported score and two buttons: Confirm or Dispute. If the opponent doesn’t respond within 48 hours, the result is automatically confirmed.
If a player disputes a result, it’s flagged for you to resolve using /league-admin resolve-dispute.
How Standings Work
Players can view standings anytime with /league standings. Rankings are determined by:
- Win rate — Wins and draws, as a percentage of games played
- Strength of schedule — Average win rate of opponents faced
- VP differential — Total victory points scored minus total conceded
Quick Reference — All League Admin Commands
| Command | What it’s for |
|---|---|
/league-admin create | Create a new league |
/league-admin add-player | Manually enroll a player |
/league-admin drop-player | Remove or drop a player |
/league-admin set-announcement-channel | Set where pairings get posted |
/league-admin start-league | Lock registration and generate Round 1 |
/league-admin round-status | Check match progress for a round |
/league-admin remind-players | DM players with unfinished matches |
/league-admin advance-round | Generate next round pairings |
/league-admin assign-bye | Give a player a bye win |
/league-admin resolve-dispute | Override a match result |
/league-admin end-league | Complete the tournament and post final standings |
FAQ
What role do I need to use league admin commands? You need the admin role configured for your server. This is set up by your server administrator. The bot checks for it automatically.
How many leagues can I run at once? As many as you like. Each league is separate — different game systems, different formats, different player pools.
Can I run a league and pickup matchmaking at the same time? Yes, they’re completely independent systems. Players can be queued for pickup games while also enrolled in a league.
What’s the difference between Swiss and Round Robin? In Swiss, each round pairs players with similar records — winners play winners, losers play losers. It works well for larger groups because you don’t need as many rounds (typically 3–5 rounds for 8–16 players). In Round Robin, every player faces every other player. It’s thorough but requires more rounds and works best with smaller groups.
What happens if someone drops mid-league? They’re marked as dropped. Any unplayed matches in the current round become bye wins for the opponent. Their past results still count — dropping doesn’t invalidate the standings for anyone who already played them.
What if a player doesn’t confirm their opponent’s reported result? After 48 hours, the bot automatically confirms it. You can also force-advance the round if you’re in a hurry.
Can I undo a result?
Use /league-admin resolve-dispute to override any match result. You can change the winner, the score, or both.
A player says they didn’t get a DM — what happened?
They probably have DMs from server members turned off in their Discord privacy settings. The bot can’t override this. The /league-admin remind-players command will list anyone it couldn’t reach, so you can ping them in a channel instead.
Can I change a league’s settings after creating it?
You can change the announcement channel at any time with /league-admin set-announcement-channel. Other settings (format, max players, etc.) are fixed once the league is created — if you need to change them, create a new league.
The game system I need isn’t available — what do I do?
Ask your server administrator to add it using /muster-admin add-game. You can also check what’s currently configured by looking at the options in /league-admin create.
My server can’t create leagues — why?
Leagues require the Captain subscription tier. Ask your server administrator to upgrade using /muster-admin subscribe.