Skip to content
CreateDiscordBot
Menu

Custom Discord tournament bots for esports leagues

Registration, team roles and channels, check-ins, map vetoes, match rooms and results, built as one bot on your own Discord application. I have been a tournament admin since 2017 and have set up Discord for leagues of up to 154 teams.

Usually
Community bot, from $1,490
Timeline
2 to 4 weeks
You get
Source code and your own bot token

Example commands

  • /register team:Northside

    Opens a team card where the captain adds players and subs through short forms for in-game name and tracker profile.

  • /season setup dry-run:true

    Previews every role, category and channel the bot will create from the roster before anything changes.

  • /checkin

    Checks the team in during the window staff set, and lists teams that missed it so staff can drop or replace them.

  • /veto best-of:3 vs:@Valkyrie

    Runs the ban, pick and side phase between the two captains in the match room and posts the final maps.

  • /report score:2-1

    Reports the result; the other captain confirms it or calls a referee, and the confirmed score goes to your bracket.

  • /standings division:2

    Posts the current table for one division from your bracket or league database.

Connects to

  • start.gg
  • Challonge
  • FACEIT
  • Riot Games API
  • Challengermode
  • Twitch
  • Google Sheets

A custom Discord tournament bot runs the parts of a league or cup that happen in your server: registration, a role and private channels for every team, check-in, a room per match, the map veto, result reporting and the alerts around it. I build it as one bot on your own Discord application, connected to the bracket you already use, whether that is start.gg, Challonge, FACEIT or a Google Sheet.

It fits leagues that have outgrown free bots: a hundred teams or more, rosters that carry over between seasons, or staff tired of building 300 channels by hand. For a single evening cup, a free bot is usually the better choice.

What the bot does

Before the season. You hand the bot a roster from your sign-up form, sheet or start.gg event. It first shows a dry run: every role, category and channel it would create, and how close that puts your server to Discord's caps of 250 roles and 500 channels. When staff approve, it builds everything in one go: a role for each team, a private voice and text channel per team, division and group channels, and staff access on all of them. For Rivals League that meant 7 divisions, 18 groups and 154 teams, each with its own role and private voice channel. For a Swedish online league's season, the registration bot I co-built created 138 channels and 123 roles in under half an hour.

Registration. A captain runs /register and gets a team card with buttons to add players and request subs. Each button opens a short form for in-game name and tracker profile. The data lands in the bot's database and, if you like, back in the sheet your admins already work in.

Match day. Check-in opens at the time you set, as a button in the team's channel or a shared check-in channel. When it closes, the bot lists the teams that missed it, and staff decide who is dropped or replaced. For each match the bot opens a private room for the two teams and your referees, and posts the format, the deadline in every reader's own time zone, and the veto. Captains ban and pick maps by button in the right order for best-of-1, 3 or 5, choose sides, and the decider is picked automatically. Try the flow in the map veto tool, or see the veto bot I co-built. After the match one captain reports the score, the other confirms, and the result goes to your bracket. A disagreement opens a referee ticket with the match room's history attached.

Around the matches. Go-live alerts post in the right game's channel when a team starts streaming. Standings go out after each round. At the end of the season, a reset command removes everything the bot created so the next season starts clean.

Provisioning, registration cards, map vetoes, stream alerts, Discord login and ticket systems are things I have built for real leagues and organizers, two of them with other developers; the case studies below say who built what. Check-in and score reporting are built the same way and tested in a private server before your season starts.

What it connects to

Checked against each provider's documentation in September 2026.

System What the bot can do with it What to know
start.gg Read events, sets and entrants; report confirmed results with reportBracketSet; match players to Discord accounts GraphQL API; tokens expire after one year; limit of 80 requests per 60 seconds and 1,000 objects per request; registration can require a Discord connection
Challonge Create tournaments, add participants, update match scores (API v2.1) 500 requests a month on the free plan and 2,000 with Premier; heavier use needs a paid API plan, and apps over the limit get a 429 error
FACEIT Read championships, matches and results; react to match_status_ready, match_status_finished and tournament_status_checkin webhooks The Data API only reads; webhook subscriptions are created in FACEIT's App Studio and can cover all of your organizers
Riot Games (League of Legends) Generate tournament codes and receive results automatically through the Tournament API Needs a production key, and Riot wants to see a working app, a prototype or clear mockups first; its tournament policies include at least 20 participants, at least 70% of entry fees to the prize pool, and no gambling. Events run on start.gg get tournament codes and result fetching from start.gg itself
Riot Games (VALORANT) Match history and ranked leaderboards Production keys only, and players must opt in through Riot Sign On
Challengermode Browse tournaments, sign players up and follow live updates through the Client API Bot or user-token auth; Challengermode recommends a caching backend to stay inside its rate limits
Twitch Post go-live alerts per team or per game EventSub's stream.online event needs no user authorization; polling also works (Rivals checks the league's own channel every minute, with a six-hour cooldown per game)
Google Sheets Seeding in, rosters and results out Good when admins already live in a sheet

Whichever bracket you pick, one system should own each fact. If start.gg owns check-in, the bot reads it; if Discord owns check-in, start.gg should not run its own.

Free Discord tournament bot, builder or custom?

Ready-made tournament bots are cheap and good. Prices are from each product's own page, as of September 2026.

Option Price Best for Watch out for
BattleBot Free Single elimination or first-to-X brackets, 4 to 32 players Brackets must be 4, 8, 16 or 32; double elimination and round robin are listed as roadmap
Tourney Bot Free (3 tournaments a month, 8 participants); $1.99, $2.99, $4.99 or $15.99 a month for 32 to 512 participants Many formats, check-in, match threads, proof screenshots Team tournaments need a paid tier; its docs say submitted proof images are used to train Joyn's own AI model
Team Up Free; Pro $1.99/mo; Unlimited $4.99/mo; White Label $19.99/mo Elo ladders, matchmaking queues, tournaments seeded by rating Players sign up one by one and are seeded by Elo, not by league roster
start.gg, Battlefy or Challonge plus Discord Battlefy is free, Challonge is free up to 256 participants, start.gg adds 6% to paid online registrations Brackets, check-in and match pages on the web Anything inside your server still needs staff or a bot
A custom bot From $590 (see below) Leagues, rosters across seasons, 100+ teams, your own data Costs more and needs lead time before the season

Pick a free bot if your event fits inside its limits. Pick custom when the job touches your own rosters, website, stats or sponsors, when you need team channels for more than a hundred teams, or when you want one bot instead of four. For scale, Arionis Games lists tournament and match bots at $16,000 to $28,000 with a two to four month timeline, as of September 2026.

What it costs

My packages, in USD, excluding VAT where it applies.

Package Price Fits
Starter bot from $590, 1 to 2 weeks One system on its own, such as a map veto bot, team provisioning from a roster file, or stream go-live alerts
Community bot from $1,490, 2 to 4 weeks Up to three systems that share data, for example registration, team channels and match rooms with check-in, plus one integration such as start.gg, Twitch or Google Sheets
Platform bot from $3,500, 4 to 8 weeks A league platform: web dashboard or standings site, Discord login, several game or bracket APIs, more than one server

Most league bots land in Community. What pushes a quote up: more games and map pools, a Riot production key (Riot wants to see the product or mockups before it approves one), an admin dashboard, several servers, or importing old seasons. What keeps it down: letting start.gg or Challonge own the bracket, one game, and a server structure you are happy to keep.

If you want a fixed price before committing, the Bot Blueprint is $249 for a call and a written spec, credited in full if you order the build within 30 days. During the season, Care is $49 a month and Care Plus $149 a month with up to 2 hours of changes and a reply within one business day. That is not someone on call during your Saturday playoffs, so the build includes admin commands and a written runbook your own staff can use on match night. Extra changes are $90 an hour in prepaid 5-hour blocks.

How the build works

  1. Brief. Your rulebook, team count, games and where the bracket lives. A spec template helps.
  2. Spec and fixed quote. Commands, permissions, data and integrations, with an acceptance checklist.
  3. Private test server. Fake teams at your real scale, so the dry run, the caps and the veto order are tested before any player sees them.
  4. Launch on your application. You hold the token and get the source code and setup docs. I take a limited number of builds each month, so plan back from registration day.
  5. Care during the season. Hosting, monitoring and library updates, so the bot is still online in week eight. See hosting and Care plans.

Technical notes

  • Intents. Slash commands and buttons need no privileged intent, and fetching one member by ID to give them a role is a plain API call. The privileged Server Members intent is only needed to list every member or to react when someone joins, for example to hand a late player their team role.
  • Permissions. The bot needs Manage Roles and Manage Channels, and Discord only lets a bot allow or deny channel permissions it has itself. Its role must sit above every team role it hands out. The permissions calculator builds the invite link.
  • Caps. 250 roles and 500 channels per server, categories included, 50 channels per category. Past about 200 teams, give teams one channel each and put match rooms in private threads, which only invited members and staff with Manage Threads can see.
  • Data. Team names, Discord user IDs, in-game IDs, results and an audit log of staff actions, in a database you own.
  • Rate limits. discord.js queues requests and waits out Discord's rate limits, so a 150-team setup takes a while. Run it the day after registration closes, not an hour before round one.

To see how the pieces fit before you decide, read how to host a tournament on Discord. When you are ready, send me your league's details and I will reply with a quote.

Built before

Rivals League, a Swedish league whose platform I build, 2026

Discord operations for a 154-team league

  • Provisioning scripts build the server from the league roster: 7 divisions, 18 groups and 154 teams, each with its own role, private voice channel and staff permissions. Every script has a dry-run mode.
  • A go-live notifier checks the league's Twitch channel every minute. When it goes live, each game's Discord channel (CS2, League of Legends, VALORANT) gets an alert with that day's division, with a six-hour cooldown per game so nobody gets spammed.
  • Players sign in to the league website with Discord, and a sync job repairs usernames that have changed since registration.

An esports tournament organiser, 2024 to 2025

Map veto bot for CS2 and VALORANT matches

I rebuilt the veto flow and the side-pick logic on top of an existing codebase started by another developer.

  • Admins create a veto channel per match, assign a captain for each team and set the format with slash commands.
  • The veto engine works out the ban and pick order for best-of-1 to best-of-5, handles attacker and defender or CT and T side picks, and picks the decider automatically.
  • Each step is a button press by the right captain, and the bot posts a summary embed with the final maps when the veto ends.

A Swedish online esports league, 2025

Registration and setup bot for a 131-team league season

Built together with another developer from the league.

  • Captains run /register and get a team card with Add Player and Request Sub buttons that open short forms for in-game name, tracker profile and nationality.
  • On season start the bot created 138 channels and 123 roles in under half an hour for 131 teams and 793 players.
  • Seeding comes in from Google Sheets and teams and players go back out, so admins keep working in the sheet they already use.

Common questions

Can a Discord bot report scores to start.gg?

Yes. start.gg's public GraphQL API has a reportBracketSet mutation, and its OAuth scopes include tournament.reporter, so a bot can send a confirmed result straight to the bracket. The public API has no check-in mutation, so if you use start.gg's own event check-in, keep check-in there.

How many teams can one Discord server hold?

Discord caps a server at 250 roles and 500 channels, categories included, with at most 50 channels per category. With one role and two private channels per team you run out at roughly 240 teams in an otherwise empty server, so bigger leagues split by division or move match rooms into threads.

Is a free tournament bot enough for my event?

Often, yes: as of September 2026, BattleBot is free for brackets of up to 32 players, and Tourney Bot's free tier covers 8. A custom bot starts to pay off with multi-week leagues, 100+ teams, your own rosters or stats, or several bots you want replaced by one. The tournament guide covers both paths.

Are Discord bots allowed in a tournament server?

Yes, when they run on a bot account through Discord's official API. What Discord forbids is automating a normal user account (a selfbot), which can get that account terminated. I only build bots on your own Discord application.

Who owns the bot and the league data?

You do. The bot runs on your Discord application, so you hold the token, and you get the source code and the database. Rosters and results stay yours when the season ends.

Sources

Prices and features were checked on September 27, 2026.

  1. Discord Support, Account caps, server caps and more (250 roles, 500 channels including categories)
  2. Discord, Opcodes and status codes (role and channel caps)
  3. Discord, Channel resource (50 channels per category, private threads)
  4. Discord, Threads (threads do not count toward the channel limit)
  5. Discord, Permissions (role hierarchy, overwrites)
  6. Discord, Gateway (privileged intents)
  7. Discord, Guild resource (Get Guild Member, List Guild Members)
  8. Discord, Automated user accounts (self-bots)
  9. start.gg Developer Portal, Sending requests
  10. start.gg Developer Portal, Rate limits
  11. start.gg Developer Portal, Report set mutation
  12. start.gg Developer Portal, OAuth scopes
  13. start.gg Help Center, Account connections in registration
  14. start.gg Help Center, League of Legends tournament codes
  15. start.gg Help Center, Platform fee and processing fee
  16. start.gg schema reference, Mutation (no check-in mutation)
  17. Challonge API v2.1, Getting started (request limits)
  18. Challonge, Integration and API features by plan
  19. Challonge, Pricing
  20. Battlefy, Organize (pricing)
  21. FACEIT for Developers, Webhooks
  22. FACEIT for Developers, Data API
  23. Riot Developer Portal, League of Legends (Tournament API and policies)
  24. Riot Developer Portal, VALORANT
  25. Challengermode, Client API
  26. Twitch, EventSub subscription types (stream.online)
  27. Tourney Bot, Premium tiers
  28. Tourney Bot, Match proof system
  29. BattleBot, Free Discord tournament bot
  30. Team Up, Pricing
  31. Team Up, Discord tournament bot
  32. Arionis Games, Discord bots for gaming communities (price table)

Tell me what your bot needs to do

Send a short brief. You get a reply within one business day with questions or a price range, and a fixed quote before any work starts.

Last updated 2026-09-27 by Adam Peleback.