Integration

Discord Bot

Bring pairings, reminders, and match reporting into the Discord server you already use - no coding, a few clicks.

The MTGSL Discord bot posts your pairings, sends match reminders, and lets players report results, all inside the Discord server you already use. Setup is a few clicks - nobody needs to write any code or touch a developer portal.

This is different from the older Discord Webhook field (League Settings → Integrations), which just posts results to a channel and needs no bot. You can use either one, or both together - see Running a League for the webhook.

Get Started

Pick the option that matches you - each one takes a couple of minutes.

Signed up or logged in with Continue with Discord? You're already connected. Skip to the last step.

  1. Go to your Profile page (click your avatar, top right)
  2. Find the Discord card and click Connect
  3. Click Authorize on the Discord page that opens - you'll land back on MTGSL automatically
Done. You'll now get tagged when pairings go up, get match reminders, and can report your own results with /report in Discord. Nothing else to set up on your end.
  1. Open your league's Discord server and type /setup-league
  2. For the league option, paste your league's link (or its ID, if the league is private - see Advanced Details below)
  3. Press enter - Discord confirms the server is linked
  4. Go to the channel you want pairings and results posted in and type /set-channel

That turns on pairing pings, reminders, and lets players use /join, /standings and /report. No webhook to copy and paste.

Want players to automatically get a Discord role for your league? Skip the command above and instead go to your league's Settings → Integrations tab and click Add Bot to Server. One extra click, and it also links the server for you.
  1. Go to your store's page and open the Discord Bot section (under the Dashboard tab)
  2. Click Add Bot to Server
  3. Pick your Discord server and click Authorize
  4. In Discord, go to the channel you want updates in and type /set-channel
Done. Every league under your store now gets pairing pings, reminders, /join, and automatic Discord roles for participants - no per-league setup needed. Your Majors and Series show up in /join and /standings too. (Prefer a lighter setup with no roles? Run /setup-store in your server instead.)

What Happens Automatically

Once you've connected your account and your server is linked, these all happen on their own - no commands needed:

Pairings
Posted the moment a new week (or pod, or draft round) goes live, tagging both players.
Match reminders
24 hours and 1 hour before a scheduled match (leagues with Match Scheduling on).
Schedule confirmations
When a match time is locked in, the when/where posts automatically, shown in each player's own timezone.
Unconfirmed results
In leagues where both players confirm the score, the player who hasn't confirmed gets tagged after 24 hours. After 3 days, league staff get a notification.
Role cleanup
Players lose the league role when they drop or get banned. A week after a league ends, its role is deleted so old roles don't pile up.

A player who hasn't connected their Discord account just doesn't get tagged - nothing breaks for anyone else.

Organiser extras Pro, Community & Store

These also run on their own, for events whose organiser is on the Pro Organiser, Community or Store plan:

Last-day nudge
24 hours before a week ends, players who still haven't played get tagged. Only for leagues where weeks move on by themselves (a set number of days, or a set day of the week).
Discord events
Leagues and Majors with a start date show up in your server's Events tab, where members can click "Interested". Change the date on MTGSL and the Discord event moves too.
Major registration
A post when registration for one of your Majors opens, and a last call 24 hours before it closes.
Champion roles
When a league ends, the winner gets your server's "Commander Champion" (or Modern, Draft...) role, taken from the last champion of that format.
Monday digest
Top of each running league, how many results came in, and what's coming up in the next two weeks. Off until you run /digest enabled:true.

Every Command

Slash commands are just messages you type into Discord starting with / - Discord will show you the options as you type, so you don't need to memorize the exact wording.

Command Who can use it What it does
/standings Anyone Posts current standings. In a linked server, leave the event blank to get this server's event, or start typing to pick one (leagues, Majors and Series). Works for any public league in any server too.
/join Anyone Shows the league (or the store's open leagues, Majors and Series) this server is linked to, with links to join.
/setup-store Store owner/staff Links this server to your store, once. Turns on /join and pairing/reminder pings for every league under that store.
/setup-league League manager/staff Links this server to one league that isn't part of a store. Works for private leagues too.
/set-channel Store owner/staff, league manager/staff Run it in the channel (or thread) you want pairings, results and reminders posted in. Replaces pasting a webhook. Add off:true to stop.
/report Either player in a match Reports your 1v1 match result without leaving Discord. If you only have one open match, just enter the score.
/mymatch Any player Shows your open matches: who you're playing, when, and where. Only you see it.
/propose-time Either player in a 1v1 match Suggest 2 or 3 times. Your opponent picks one with a button, or says none work. Needs Match Scheduling turned on for the league.
/judge Any player Calls the league's staff to your match, with an optional note. Staff get tagged and a notification on MTGSL.
/card Anyone Looks up a card, with its legality in this server's league format (and Canadian Highlander points, for a Highlander league).
/events Anyone What's coming up at this server's store or league, with dates and when Major registration closes.
/leaderboard Anyone The store's rating ladder for a format. Leave the format empty for the most-played one.
Organiser commands - Pro Organiser, Community & Store plans
/round-status League staff This week at a glance: how many matches are in, and which are still to play. Only you see it.
/nudge League staff Tags every player whose match this week is still unplayed.
/repost-pairings League staff Posts this week's pairings again without pinging anyone, for when the original has scrolled away.
/report-for League manager/staff Records a 1v1 result, or a no-show, for two players. Works like reporting on the website as staff, so it doesn't wait for the players to confirm.
/digest Store owner/staff, league manager/staff Turns the Monday morning digest on or off for this server.

Common Tasks

My league is private - can I still connect it?

Yes. Your league never needs to be made public to use the bot. Open your league's Settings → Integrations tab - if the league is private, you'll see its ID there with a Copy ID button. Use that ID anywhere you'd normally use a league link, including in /setup-league and /report.

How do automatic Discord roles work?

Once you've clicked Add Bot to Server (league Settings, or the store page), MTGSL creates a Discord role for your league the first time it's needed. From then on:

  • A participant gets the role the moment they join
  • It's removed automatically when they drop or get banned (and given back if you unban someone who's still playing)
  • A week after the league ends, the role is deleted from your server
  • Adding and removing the role needs that player to have connected their own Discord account first

How do I choose where the bot posts?

Go to the channel you want updates in and type /set-channel. The bot posts a short test message there so you know it can post in that channel. From then on, pairings, results and reminders go to that channel. It works in threads too.

If the bot says it can't post there, check that you used Add Bot to Server and that the bot's role can view and send messages in that channel. Already set up a webhook in MTGSL settings? /set-channel replaces it for that league or store, and /set-channel off:true switches back.

How do I report a match from Discord?

Type /report and enter the games you and your opponent each won. If you're only in one league with one open match, that's all you need. Otherwise, pick the league or match from the list Discord shows as you type. If you have more than one open match and don't pick one, the bot lists them and asks which one you mean.

If your league requires both players to confirm the score, your report is posted with Confirm and Dispute buttons that only your opponent can click. Confirm locks in the result immediately; Dispute lets them know the score needs a second look (they can run /report themselves with the correct score, or reach out to the manager).

How do I set up a match time from Discord?

Type /propose-time and fill in two or three times as YYYY-MM-DD HH:MM, for example 2026-10-02 19:30. The times are read in your timezone: the one saved with your availability on MTGSL, otherwise your store's. If that's wrong, set the timezone option (type a city like "london" to find it).

Your opponent gets tagged with a button for each time. Once they pick one, the match is scheduled, just like on the website, and everyone sees the time in their own timezone.

How do I record a result for players? Pro, Community & Store

Type /report-for and start typing a player's name in match. Then either enter player1_games and player2_games (player 1 is the first name shown in the match), or pick who didn't turn up in no_show. The result posts in the channel so both players can see it.

Advanced Details

Skip this section unless you're curious how something works, or you've hit one of these specific situations.

Why doesn't /setup-league alone turn on automatic roles?

That command only tells MTGSL which server to send pings to - it doesn't add the bot to your server as an actual member, so Discord never gives it permission to manage roles. Add Bot to Server is the one action that installs the bot with that permission. If a league or store already shows as "Linked" but roles still aren't appearing, this is almost always why - use Add Bot to Server (or Relink) to fix it.

Which standings will /standings show?

/standings works for anyone, with no Discord account connection required, so MTGSL can't check who's asking. Because of that, it only shows a private league in the server its manager linked it to with /setup-league. Anywhere else, the league has to be public. Majors and Series only show in a server linked to their store.

Why can't everyone in my server see /setup-store, /setup-league and /set-channel?

Discord only shows those three commands to members with the Manage Server permission, so regular members don't see setup commands. A server admin can let other roles use them under Server Settings → Integrations. Either way, MTGSL still checks that you're staff of the linked store or league.

What can't the Discord bot do yet?

/report, /report-for and /propose-time only cover 1v1 matches - pod/multiplayer results and times, and suspected-cheating reports, still need the website. Players report their own no-shows on the website too; staff can record one with /report-for. A Major that isn't part of a store can't be linked to a server yet.

My leagues aren't showing up in the server's Events tab.

Discord events need the bot's "Manage Events" permission, which servers that added the bot before this feature don't have. Click Relink next to your server in MTGSL settings (store Dashboard or league Settings → Integrations) and approve the new permission. Only leagues and Majors with a start date in the future get an event, and a store server only gets its public leagues.

Questions about setting up the bot for your league or store?

Contact Support Running a League