Most community tournaments are organised on Discord, and most of the problems at those tournaments come from the server, not the game: announcements lost in chat, captains who did not see their match time, results reported in five different places. A little structure fixes almost all of it. This guide gives you a server layout, a registration and check-in process, and a reporting workflow that works for 8 teams or 64.
Server layout
Create a category for the tournament so you can archive it afterwards. Inside it, a minimal set of channels:
| Channel | Who can post | Purpose |
|---|---|---|
| #announcements | Admins | Schedule, bracket link, rule changes. Nothing else. |
| #rules | Admins | The full rulebook, pinned. |
| #registration | Everyone | Registration form link or a registration thread. |
| #check-in | Captains | Check-in on match day. |
| #match-reports | Captains | Final scores and screenshots. |
| #help-desk | Everyone | Questions and disputes, answered by admins. |
| #general | Everyone | Chat, banter, looking-for-team. |
Keep announcements admin-only. The biggest single improvement to a Discord tournament is a channel where every message matters.
Roles
- Admin: can post in announcements, edit the bracket and resolve disputes.
- Captain: one per team; can post in check-in and match reports.
- Player: registered players, for mentions and access to team channels.
- Caster or Observer, if you are streaming.
Giving captains their own role lets you mention every captain with one ping, which is how you announce check-in and delays.
Registration
Collect the same fields from every team: team name, captain’s Discord handle, in-game IDs for every player and substitute, and any rank or region information your rules need. A form is easier to process than a chat thread. Set a hard registration deadline and a roster lock time.
Once registration closes, seed the teams and build the bracket. Do not publish the bracket until check-in is complete, or you will be regenerating it for every no-show.
Check-in
No-shows are the most common problem in online tournaments. A check-in window removes them before they cause forfeits:
- Announce check-in 24 hours and 1 hour before it opens, pinging the Captain role.
- Open check-in 45 to 60 minutes before the first match. Captains react to a pinned message or post their team name.
- Close check-in 15 minutes before the first match. Teams that did not check in are removed.
- Regenerate the bracket with checked-in teams only, re-applying seeding. BYEs are recalculated automatically.
- Post the bracket link in #announcements.
Match flow
- Pairings: the bracket link shows every team its next opponent. Posting it once is better than posting each match separately.
- Match threads: for larger events, create a thread per match for the two captains and an admin. This keeps lobby details and vetoes out of public chat.
- Deadlines: state how long a team has to show up before forfeiting a map, then the match.
- Reporting: the winning captain posts the score and a screenshot in #match-reports. The losing captain reacts to confirm. An admin updates the bracket.
That two-captain confirmation catches almost every mistake without an admin needing to investigate. Disputed results go to #help-desk.
Posting results automatically
If your bracket tool supports it, use a Discord webhook to post results to a channel. With LeagueSpawn, you can paste a webhook URL into the “Publish to Discord” option and the tool posts formatted match results and the current bracket state. Webhooks are created in the channel’s settings under Integrations; only share the URL with admins, because anyone with it can post to that channel.
Handling disputes
- Ask for evidence first: screenshots, clips or demos.
- Resolve disputes in private threads, not in public chat.
- Apply the published rule, even if you would write it differently next time. Change the rule afterwards.
- Record the decision in the match thread so it can be referenced later.
- One admin decides; the others do not overrule in public.
Communication templates
Check-in announcement: “@Captain Check-in is open until 18:45. React to this message to confirm your team is playing. Teams that have not checked in by 18:45 will be removed from the bracket.”
Bracket announcement: “The bracket is live: [link]. Round one starts at 19:00. Find your opponent in the bracket and create your lobby. Report scores in #match-reports with a screenshot.”
Delay announcement: “Round two is delayed by 15 minutes to 20:15 while we finish the last round-one match. No action needed.”
After the tournament
- Post the final bracket image and standings in #announcements.
- Thank teams, admins and casters.
- Ask for feedback with a short form.
- Archive the tournament category.
Game-specific guides
For game-specific settings and vetoes, see our guides to running a Valorant tournament and a Counter-Strike 2 tournament. When your server is ready, build your bracket and share the link.