Getting Started

Create an account

Sign in with Discord using the Sign In link in the top-right corner, or register with an email and password using Register. Discord sign-in is recommended - it links your account to the bot automatically.

If you register with email, we send a verification link that is valid for 24 hours. Click it to activate your account. You can resend the email from your account page if needed. You can link a Discord account to an email-registered account at any time from My Account.

Find and join a league

Go to Leagues to browse public leagues. Click a league to view its overview. While the league is in setup, you will see a Request to Join button. Submit a proposed team name, abbreviation, coach name, and an optional message; the league admin will approve or deny the request from their dashboard, and you will get a notification either way.

If you are already in the league's Discord server, you can also register from there with the /register command as an alternative.

Edit your team

Once you are in a league, you can update your team name, abbreviation, or coach name at any time with /team_edit in Discord, or from your team page on the website. See Your Team for more customization options.

Your Account

My Account page

Visit My Account from the user menu to manage your profile. From here you can change your username, set or change your password (if you registered with email), set a custom profile picture URL, and link or unlink a Discord account.

Discord notifications

If your account is linked to Discord, the Receive Discord pings toggle controls whether the bot @mentions you in your league's Discord channel for major events (draft turn alerts, trade offers, FA decisions, join request decisions, and similar). Toggle it off if you only want in-app notifications.

Data export and account deletion

You can download a data export at any time - a JSON file containing everything we store about you. You can also delete your account: this anonymizes your team history (so league records remain intact) and removes your personal information.

Your Team

Customizing your team profile

Open your team page and click the edit controls to customize how your team appears to the league. You can set a team name, abbreviation, coach name, slogan, banner image, and team logo. Banners and logos can be set with a URL or by uploading an image.

You can also pick your Star Players on your team page to showcase your favorite Pokemon from your roster. Team profiles are public, so anyone visiting the league can see them.

The Draft

How it works

Leagues use a snake draft - teams pick in order, then the order reverses each round. Each Pokemon has a point value, and your roster total cannot exceed the league's point cap.

Making a pick

When it's your turn, use /pick <pokemon> in Discord. The draft board on the website updates in real time - find it under Rosters > Draft Board in the league sidebar. You can also queue picks in advance with /my_queue; the bot will auto-pick from your queue when it's your turn.

Exploring the pool

Use /available to see Pokemon still in the pool, or visit the Pool page in the league sidebar for a full searchable list with point values.

Draft order and status

/whos_next shows who is currently on the clock and the upcoming pick order. The Draft Board tab on the Rosters page also shows this with a highlighted column.

Regular Season

Reporting results

After your match, run /report in Discord. The match dropdown autocompletes every open match you're a party to as 'Week N vs Team', so you can also use this to catch up on a past week you forgot to report. Pick Win or Loss, optionally add a score (e.g. 3-2), and submit. The opponent then has to click Confirm Result or Dispute.

Player-facing match reporting is currently Discord-only. If your league admin needs to set or override a result, they can do so from the admin panel.

Teamsheets

Before each match, you may be required to submit a teamsheet - the six Pokemon you plan to use. From Discord, /my_match is the one-stop hub: it shows your current opponent, the scheduled deadline, both teamsheet states, and adapts its buttons to whatever action is currently available. From the website, the same actions are on the Schedule page and the match's teamsheet page (which also lets you fill in items, abilities, and moves per Pokemon).

The Submit Teamsheet / Edit Teamsheet button on /my_match opens a six-pick dropdown. Click it, choose six from your roster, save. Re-running the command to edit pre-fills your current selection. Both players submit independently and can see their own sheet immediately.

Once both teamsheets are in, the Reveal Opponent button appears. Clicking it locks your own sheet from free edits and shows theirs. If you need to change something after that, use Request Change on the same view: pick a new six and an admin approves or denies it.

Each league has an open teamsheets setting (off by default). When on, opponents see items, abilities, and moves; when off, they only see the six Pokemon. Admins can see both sheets in full at any time.

Match disputes

When a player reports a result, the opponent can confirm or click Dispute. A disputed match is marked DISPUTED and held until it is resolved. If it is still disputed 24 hours later, the bot pings the league's moderators in the Discord channel. Admins can override the result from the admin panel at any time.

Standings and schedule

Check the Standings page for current records and playoff positioning. The Schedule page shows all matches by week, including past results.

Stats

The Stats page tracks individual Pokemon performance across the season - wins, losses, games played, and more.

Playoffs

When the regular season ends, an admin clicks Begin Playoffs on the league dashboard, then opens Manage Bracket. The first stop is Edit Seeding: the page pre-fills seeds in win order, and the admin assigns seeds 1 through N (the league's playoff size). Saving generates the full single-elimination bracket - seed 1 plays seed N, seed 2 plays seed (N-1), and so on, with seeds 1 and 2 only meeting in the final.

The Playoffs page in the public sidebar shows the live bracket: left half, center final, right half, with seed pills next to each team and the scheduled date under each match. As admins set results, winners advance into the next round.

Admins set match deadlines from the bracket page. The Round dates panel at the top sets the same date for every non-completed match in a round in one click; the per-match date input on each card overrides individual matchups when needed. Setting a result auto-marks the match Final; the Advance Winner button promotes the winner into the next round's slot.

Free Agent Transactions

What is an FA transaction?

During the regular season, you can drop a Pokemon from your roster and pick up a free agent in its place. Each team has a separate FA points budget that limits how valuable a pickup can be.

Submitting a request

Use /fa propose in Discord, or visit the FA Request page in the league sidebar on the website. Select the Pokemon you want to drop and the one you want to pick up. Your request is sent to the league admin for review.

From Discord you can also see your pending requests with /fa list and back out of one before it's reviewed with /fa cancel.

FA transactions require admin approval. You will receive a notification when your request is approved or denied.

FA points

Each team starts with a set number of FA points (visible on the Rosters page under "FA Pts"). The cost of a pickup is deducted from this budget. Once exhausted, you cannot make further FA pickups.

Trades

Proposing a trade

Use /trade propose in Discord or go to the Trades page in the league sidebar and click New Trade. Select the opposing coach, then list the Pokemon you are offering and the Pokemon you want in return as comma-separated names. Multi-Pokemon trades are supported on both surfaces; Discord autocomplete fills both sides from your roster and your opponent's roster as you type.

Responding to a trade

When you receive a trade offer you will get a notification. From Discord, /trade list shows your active trades grouped by who needs to act next, and /trade view shows the current terms for a specific trade. /trade accept and /trade cancel are direct actions; counter-offers are currently web-only via the Trades page (multi-pokemon counter UI in the bot is on the roadmap).

If the other party has changed what was originally offered to you since you last reviewed, the web page shows an anti-scam warning and highlights the diff. Always check the current terms before accepting.

Approval and cascade-cancel

After both parties accept, the trade goes to a league admin for final approval. Admins can act from the website's admin panel or with /trade approve / /trade deny in Discord. You will be notified of the decision.

When a trade is approved, any other open trade involving the same Pokemon is automatically cancelled, and any pending FA request that drops one of the swapped Pokemon is auto-denied. The affected coaches are notified. This prevents the same Pokemon from being committed to two different deals.

Trade activity feed

The right column of the Trades page shows recently completed trades across the league, so you can stay up to date on what other teams are doing.

Running a League

Creating a league

Anyone with Manage Server permission in a Discord server can run /league_create. The bot DMs back a one-time link to the website. Click it, sign in with Discord, and you will get a setup form pre-filled with your server name. Save it to become the league owner.

League moderators and co-owners

From the league admin dashboard, owners can add other registered users as moderators or co-owners. Moderators have full league admin access except for two owner-only actions: adding or removing other moderators, and renaming or deleting the league. This is the easy way to share the workload.

Pinned league info embed

Run /league_post in your league info channel to publish a pinned summary embed: status, current week's matchups with status pips, top-3 standings, pending counts, and recent activity. The bot updates the same pinned message in place as the season progresses (picks made, results confirmed, trades approved, teamsheets submitted, lifecycle changes). Use /league_refresh to force-refresh it manually, or to recreate it if the message was deleted.

Pools

A pool is a published draft template - a list of Pokemon with custom point values that a league can use as its draft pool.

Anyone can browse /pools to find published pools. Logged-in users can create their own at /pools/new, mark them public or private, fork someone else's pool to start from a copy, or import a pool from a JSON file.

League admins can apply any accessible pool to a league through the league's Pool Tools in the admin panel.

Following & Notifications

Follow a league

Logged-in users can click Follow on any league overview page to subscribe to its activity. Followed leagues appear in the Your Leagues section of your homepage so you can jump back in quickly.

Notifications

The bell icon in the top nav shows your in-app notifications: trade offers, FA decisions, join request decisions, draft turn alerts, dispute updates, and similar events. If you have linked Discord and the Receive Discord pings toggle is on (in My Account), the bot also @mentions you in the relevant league's Discord channel for the major events.

Homepage activity feed

The homepage shows a chronological feed of match results from public leagues. A Site News section above the activity feed surfaces announcements from site admins. If you are logged in, a Your Leagues section is pinned at the top with activity from leagues you follow or play in.

Discord Commands

All bot commands are Discord slash commands - type / in any channel where the bot is present to see the full list. Commands marked League Admin require Discord's Manage Server permission. The person who created the league with /league_create has this by default; server owners can grant it to additional moderators through Discord's role settings.

Registration

CommandDescriptionWeb equivalent
/registerRegister your team for the current league-
/team_editUpdate your team name, abbreviation, or coach nameTeam edit page
/playersList all registered teams in the current leagueRosters page
/draft_order League AdminSet a team's draft positionAdmin panel
/team_remove League AdminRemove a team from the leagueAdmin panel

Draft

CommandDescriptionWeb equivalent
/pickPick a Pokemon during your draft turnRosters > Draft Board
/availableList available Pokemon in the draft pool. Optional type, min_points, and max_points filters; results paginate with Prev/Next buttons.Pool page
/rosterView a team's current rosterRosters page
/my_queueView your current draft queuePool page - Manage Queue
/clear_queueClear your draft queuePool page - Manage Queue
/whos_nextShow draft order and who is on the clockRosters > Draft Board
/draft_skip League AdminSkip the current player's pickAdmin panel

Season

CommandDescriptionWeb equivalent
/my_matchYour current-week match hub: opponent, deadline, both teamsheet states, with state-adaptive buttons for Submit/Edit Teamsheet, Reveal Opponent, Request Change, and Show My/Opp Team. Ephemeral.Schedule + match teamsheet page
/reportReport your match result. match autocompletes all of your open matches as 'Week N vs Team', so you can catch up on past weeks too. Defaults to your earliest open match.Schedule page
/standingsView current season standingsStandings page
/scheduleView the schedule for a given weekSchedule page
/post_week League AdminPost this week's matchups to a channelAdmin panel

Trades

The /trade group covers proposal through approval. Subcommands marked League Admin are gated to league moderators.

SubcommandDescriptionWeb equivalent
/trade proposePropose a trade. opponent is a Discord member; give and receive are comma-separated Pokemon names with autocomplete that pulls from your roster and theirs.Trades page - New Trade
/trade listList your active trades, grouped by who needs to act next.Trades page
/trade viewView a specific trade's current terms and status.Trade detail page
/trade acceptAccept the current terms of a trade. Goes to admin for final approval.Trade detail page
/trade cancelCancel a trade you're a party to, with an optional reason.Trade detail page
/trade approve League AdminApprove an agreed trade. Applies the pick swaps and cascade-cancels overlapping trades and FA drops.Admin alerts
/trade deny League AdminDeny an agreed trade.Admin alerts
Counter-offers are currently web-only - use the Counter Offer button on the Trades page.

Free Agent

The /fa group covers FA requests end to end.

SubcommandDescriptionWeb equivalent
/fa proposeSubmit a free-agent swap. Both add and drop autocomplete from the available pool and your roster.FA Request page
/fa listList your pending FA requests.FA Request page
/fa cancelCancel one of your pending FA requests before it's reviewed.FA Request page
/fa approve League AdminApprove a pending FA transaction.Admin alerts
/fa deny League AdminDeny a pending FA transaction.Admin alerts

Info and setup

CommandDescriptionWeb equivalent
/post_rosterPost a team's roster as a Discord embedRosters page
/league_post League AdminPublish the pinned league info embed in the current channel. The bot updates this same message in place as the league progresses.-
/league_refresh League AdminForce-refresh the pinned league info embed; recreates and re-pins it if the message was deleted.-
/force_pick League AdminForce a pick for a team memberAdmin panel
/set_fa_points League AdminSet a team's FA points remainingAdmin panel
/setup_drafty League AdminConfigure all bot channels at once: alerts (bot status), draft (pick announcements), updates (trades/FAs/results), and info (/league_post destination). All parameters are optional - run with no arguments to view the current configuration.Admin panel
/league_create League AdminSet up a new draft league via the web panelAdmin panel
/draft_start League AdminBegin the draftAdmin panel
/season_start League AdminTransition from draft to regular seasonAdmin panel
/result_override League AdminOverride a match resultAdmin panel

If the Bot Is Offline

If Discord shows "This application did not respond" when you use a slash command, the bot process is temporarily offline. The website works independently of the bot and you can complete most actions there instead.

ActionWebsite alternative
Pick a Pokemon during the draftRosters > Draft Board - click a Pokemon card to copy the pick command, or ask your league admin to use the admin panel's Force Pick
Submit your teamsheetYour Roster Dashboard (Me in the top nav) - click Submit Teamsheet on the match card
View your opponent's teamsheetMatch teamsheet page - click Show Opponent's Team
Report a match resultMatch reporting is currently bot-only. Contact your league admin to set the result via the admin panel if the bot is unavailable for an extended period.
Submit a free agent requestLeague sidebar > FA Request page
Propose or respond to a tradeLeague sidebar > Trades page
View standings and scheduleLeague sidebar > Standings and Schedule pages
View rosters and draft boardLeague sidebar > Rosters page

If the bot has been offline for more than a few minutes and you need help, contact your league admin. Admins can perform most actions from the web admin panel regardless of bot status.