How to Run a Tournament on Discord: Channels, Check-In and Results

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:

ChannelWho can postPurpose
#announcementsAdminsSchedule, bracket link, rule changes. Nothing else.
#rulesAdminsThe full rulebook, pinned.
#registrationEveryoneRegistration form link or a registration thread.
#check-inCaptainsCheck-in on match day.
#match-reportsCaptainsFinal scores and screenshots.
#help-deskEveryoneQuestions and disputes, answered by admins.
#generalEveryoneChat, 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:

  1. Announce check-in 24 hours and 1 hour before it opens, pinging the Captain role.
  2. Open check-in 45 to 60 minutes before the first match. Captains react to a pinned message or post their team name.
  3. Close check-in 15 minutes before the first match. Teams that did not check in are removed.
  4. Regenerate the bracket with checked-in teams only, re-applying seeding. BYEs are recalculated automatically.
  5. Post the bracket link in #announcements.

Match flow

  1. Pairings: the bracket link shows every team its next opponent. Posting it once is better than posting each match separately.
  2. 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.
  3. Deadlines: state how long a team has to show up before forfeiting a map, then the match.
  4. 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

  1. Post the final bracket image and standings in #announcements.
  2. Thank teams, admins and casters.
  3. Ask for feedback with a short form.
  4. 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.

Previous guide

All tournament guides →