Shockwave

Getting started

The first command a new player runs.

/setup utility

Introduces Shockwave, creates your personal solo team, and walks you through picking which lane roles you like and dislike playing (for future role-aware team balancing) - press a role to pick it, then press Confirm. Safe to run again any time to update either.

ParameterTypeDescription
solo_team_namestring, optionalName for your personal solo team. Required the first time you run /setup; optional after that (renames your existing solo team if given, left alone if omitted).
Roles are picked with buttons, not typed. After the team-name step, Shockwave posts a message with 5 role buttons (highlighted once selected) and a "Confirm" button. Press the roles you like playing, press Confirm, then do the same for the roles you dislike. Only you can toggle your own selections or press your own Confirm button.
A role can't end up both liked and disliked. If you pick the same role in both rounds, it's left neutral instead of picking a side - Shockwave tells you which role that happened to and asks you to run /setup again if you'd like to fix it.
Finishing both rounds the first time unlocks the Onboarded achievement and is what /make-teams' use_roles checks for: everyone currently in the voice channel has to have completed /setup at least once, or role-based teams won't form.

Team setup

Run these once per server, or whenever you want to reset a session.

/set admin

One admin command for every server-tunable setting: team voice channels and size, the betting window length, the wager-postings channel, a direct elo correction, and the starting elo new players get. Give any combination of these in the same call. Requires the Manage Server permission.

ParameterTypeDescription
team1string, optionalName for the first team's voice channel. Creates it if missing. Give together with team2.
team2string, optionalName for the second team's voice channel. Creates it if missing. Give together with team1.
sizeinteger, optionalNumber of players per team.
betting_timerinteger, optional1–600 seconds a betting window stays open. Defaults to 60 for a server that's never set one.
wager_channelstring, optionalName of the text channel to direct all wager/betting postings to. Creates it if missing.
membermember, optionalWhose elo to set directly, to an exact value. Give together with elo.
elointeger, optionalThe exact elo value to set member to. Give together with member.
default_elointeger, optionalThe elo a brand new player in this server starts at. Defaults to 1000. Doesn't change anyone's existing elo.
team1/team2 are optional, not required. If a game is started with ▶️ before they've ever been set, Shockwave falls back to channels named Team-1/Team-2, creating them if they don't exist, and remembers them as the server's own from then on.
team1/team2 also become the display names. Whatever you name the channels is what /make-teams//captains title the roster with, what the matchup graphic labels each side with, and what the win announcement, elo-change line, and a later /report-correct-winner correction all say too - instead of the generic "Team 1"/"Team 2" a server that's never named its channels falls back to.
betting_timer applies everywhere betting happens: a roster's Start button, a sequential tournament match, and as the base per-match duration for a simultaneous tournament round (multiplied by how many matches are in that round).
member+elo still credits tier rewards. Setting someone to Diamond+ directly unlocks that tier's trading-card title/scheme exactly like earning it normally would.
/clear admin

Wipes the current teams and draft state so you can start a fresh session. Channel names, tournament data, and player elo/economy are kept unless you explicitly clear them too. Requires the Manage Server permission.

ParameterTypeDescription
clear_channelsboolean, optionalAlso forget the saved team channel names.
clear_tournamentboolean, optionalDeletes this server's tournament entirely: bracket, registrations, and match history. Runs immediately, no confirmation. Registered/persistent teams (/team-create) aren't touched.
clear_eloboolean, optionalResets every player's elo back to this server's default (1000 unless an admin changed it with /set's default_elo); balance, wins/losses, and gold are untouched. Server-wide, so it asks for confirmation before it runs (see below).
clear_economyboolean, optionalWipes every member's stats for this server entirely: balance, elo, game record, betting record, and gold wagered/won/lost. Also server-wide and confirmation-gated; if both this and clear_elo are set, this one wins since it already includes an elo reset.
clear_achievementsboolean, optionalResets earned achievements so they go back to locked, every player in the server by default, or just one player if user is also set. A player who still qualifies (e.g. their win count is still past the threshold) simply earns it back the next time something checks; this doesn't touch elo, balance, game record, or any other unlocks. Confirmation-gated; can be combined with clear_elo, clear_economy, or clear_card_unlocks in the same run (the elo/economy flags always stay server-wide regardless of user).
clear_card_unlocksboolean, optionalWipes every trading-card unlock (titles, color schemes, fonts: tier rewards, special grants, shop purchases, and achievement titles alike), every player in the server by default, or just one player if user is also set. Also resets that player's equipped trading card back to Shockwave's defaults, so it never renders pointed at something no longer unlocked. Confirmation-gated; combinable with the other flags the same way clear_achievements is.
usermember, optionalOnly usable together with clear_achievements and/or clear_card_unlocks; narrows either to just this one player instead of everyone. Setting it without either of those is rejected outright.
clear_tournament can't be undone. Unlike clear_elo/ clear_economy/clear_achievements/ clear_card_unlocks below, it doesn't ask for confirmation first: it deletes the tournament the moment the command runs.
clear_elo/clear_economy/clear_achievements/clear_card_unlocks require confirmation. Since they reset data for at least one player (every player, unless clear_achievements/clear_card_unlocks is narrowed with user), none of them run immediately. Shockwave posts a warning with "Confirm reset" / "Cancel" buttons, and only the member who ran /clear can click them. The prompt expires after 30 seconds with nothing changed if it's ignored.

Team formation

Two tracks: casual games just organize a roster, ranked games also balance and track elo.

Casual vs. ranked: the actual difference. Every game, casual or ranked, still starts via the roster's own Start button to move players and open betting, and still updates each player's Game Record (win/loss) when a winner is reported. The only thing ranked adds: teams are split by current elo instead of pure random/draft order, and elo itself only ever moves for games built with ranked:true on /make-teams or /captains. A casual game, either command with ranked left off, never touches anyone's elo, win or lose. Pick the track when you build the roster; everything downstream (starting via ▶️, betting, reporting the winner or cancelling with 🛑) works identically either way.

Casual

Organizes a roster for the night. Betting still works; elo never moves.

/make-teams casual

Randomly splits everyone in your voice channel into two even teams and posts the roster. Optionally assigns a lane to each player. Doesn't move anyone; press Start on the roster once you're happy with the teams to move everyone and open betting.

ParameterTypeDescription
use_rolesboolean, optionalAlso hand out lane roles (Top / Jungle / Mid / Bottom / Support); needs exactly 5 players per side (10 for ranked, split 5-and-5). Combined with ranked, roles are chosen to favor each player's liked lane and to keep the two sides close in elo - see Ranked below.
rankedboolean, optionalForm roughly elo-balanced teams instead of a random split, and track elo for this game once a winner is reported. See Ranked below.
Team 1
Kestrel Bramble Onyx
Team 2
Fennmark Dusk Corvid
↑ what Shockwave posts right after the shuffle
Start moves the game; Start (no move) opens betting only; Reroll reshuffles roles. All three buttons sit on the second team's own message. Start moves everyone into their team channels and opens betting, clickable by anyone, not just whoever ran /make-teams. Start (no move) does everything Start does - matchup graphic, betting window - except the move, for a group that's already elsewhere and doesn't want Shockwave touching anyone's voice channel. Reroll only shows up when use_roles actually applied (exactly 5 players a side); pressing it reshuffles who has which role and edits both team messages in place.
You have to be in a voice channel yourself to run this - that's where the roster gets drawn from. Running it from outside one gives a plain explanation instead of an error.
use_roles requires everyone in voice to have run /setup first. If anyone hasn't, the command stops and mentions who's still missing instead of forming plain (role-less) teams anyway. Same requirement whether the game ends up casual or ranked.
/captains casual

Starts a live captain draft. Name two captains, or let Shockwave pick two at random from the voice channel. Everyone else lands in a pool the captains pick from with /choose.

ParameterTypeDescription
captain_1member, optionalFirst captain. Required unless use_random is set.
captain_2member, optionalSecond captain. Required unless use_random is set.
use_randomboolean, optionalPick two captains at random from the voice channel instead.
rankedboolean, optionalTrack elo for the resulting game once a winner is reported. See Ranked below.
Team 1
Kestrel (captain)
Team 2
Fennmark (captain)
PLAYERS
Bramble Onyx Dusk Corvid
↑ the draft pool, posted once captains are set
You have to be in a voice channel yourself to run this - with at least one other player in it. Running it from outside a voice channel, or alone in one, gives a plain explanation instead of an error.
Once the draft is full, press Start on the roster to move everyone into their team channels and open betting, or Start (no move) to open betting without moving anyone - see /make-teams above for what each does.
/choose casual + ranked

Captains only. Picks one player from the pool onto your team, then passes the turn to the other captain. Works the same whether the draft was started with /captains or /captains ranked:true.

ParameterTypeDescription
membermember, optionalThe player to pick. Required unless use_random is set.
use_randomboolean, optionalPick a random remaining player instead of naming one.
Turn order is enforced. Picking out of turn, or picking as anyone other than the two captains, gets rejected with a message instead of going through.

Setting up a casual game

01

Get everyone into one voice channel.

02

Build the roster: /make-teams for an instant random split, or /captains + /choose for a live draft.

03

Press Start on the posted roster to move everyone into their team channels and open betting.

04

Press the winning team's own button to report it, then press Confirm on the prompt that follows. Bets pay out and Game Record updates; elo is untouched.


Ranked

Same commands as casual, with ranked:true set, not a separate command. Splits your voice channel into two roughly elo-balanced teams instead of a fully random/draft split, and tracks elo once a winner is reported.

How the elo-balanced split works (/make-teams ranked:true). Each player's elo gets a random nudge; teams are then drafted strongest-to-weakest in a snake pattern (side A, side B, side B, side A, …) so team sizes stay even and the top players don't all land on one side. /captains ranked:true runs the exact same live draft as plain /captains; the only difference is the resulting game has elo tracked.
Adding roles to a ranked split (/make-teams ranked:true use_roles:true, 10 players only - 5 a side). Each of the five lanes gets filled from whoever's marked it as a liked role in /setup first, then from anyone with no stated preference, and only from someone who disliked it if there's truly nobody else left for that lane. Playing off-role quietly costs a player some of their elo for balancing purposes only (more if it's a lane they said they dislike, not just one they didn't pick) - real elo never changes from this. On top of that, Shockwave tries swapping pairs of players' lanes to see if it nets a closer overall matchup, keeping whichever combination balances the two sides best.

There's one case where a disliked lane does touch real elo: winning on it. A player who wins a ranked game while playing a role they marked disliked gets their own elo gain boosted by 50% on top of the normal team-average swing - a reward for pulling off a win on a less-wanted assignment. Losing on a disliked role gets no such bonus.

Setting up a ranked game

01

Get everyone into one voice channel. New players start at 1000 elo automatically (an admin can change that server-wide with /set's default_elo); nothing to set up ahead of time otherwise.

02

Build the roster: /make-teams ranked:true for an elo-balanced instant split (add use_roles:true with exactly 10 players for lane assignments too), or /captains ranked:true + /choose for a live draft that's still marked ranked.

03

Press Start on the posted roster to move everyone into their team channels and open betting, identical to the casual flow.

04

Press the winning team's own button to report it, then press Confirm on the prompt that follows. Bets pay out, Game Record updates, and elo shifts for every rostered player: more for beating a stronger team, less for beating a weaker one.

05

Reported the wrong result? /report-correct-winner undoes the wrong elo/payouts and re-applies them correctly. Admin-only.

Ending a ranked game early. The Cancel Game button on the report message works exactly like it does for a casual game: it refunds any open bets and moves everyone back. Since elo only ever changes when a winner is actually reported, cancelling a ranked game before that happens leaves elo completely untouched, same as if the game had never been played.

Voice channel ops

Moving people around without dragging them by hand.

Start button voice

Not a slash command: a Start button Shockwave attaches to every posted team roster (/make-teams, /captains once the draft finishes, /team-use). Pressing it moves the current rosters into their team channels and kicks off the game; anyone can press it, not just whoever ran the original command. Remembers the channel everyone started in, so the Cancel Game button on the report message (see below) knows where to send them back. Also opens a betting window on the match and posts the winner-report message immediately (60-second betting window by default; see /set's betting_timer). See Betting & economy below for how that works.

Posts a matchup graphic. Right before betting opens, Start shows both teams' rosters (captain starred) facing off, the same graphic a tournament match gets. A team with no logo set gets a random built-in one for the image instead of a blank slot.
Nobody in voice? Start looks for a rostered player who's currently sitting in a voice channel to know where to move everyone; if it can't find one it posts a message asking someone to join a voice channel first, and the button stays clickable to try again.
/notify voice

DMs a one-time invite link to your voice channel, to one member, or to everyone holding a given role. Give one or the other, not both.

ParameterTypeDescription
membermember, optionalA specific member to invite.
rolerole, optionalInvite every member of this role instead.
messagestring, optionalReplaces the default invite text. Either way, the DM is signed "Sent by" you.
You have to be in a voice channel yourself to run this - that's the channel the invite link points to. Running it from outside one gives a plain explanation instead of an error.

Betting & economy

Every server member has a gold balance. Bet it on who wins the current game.

How a betting round works. Pressing Start on a posted roster opens betting for 60 seconds by default (configurable server-wide with /set's betting_timer) and immediately posts the winner-report message, with each team's own button (labeled with the team's actual name, or the generic "Team 1"/"Team 2" a server that's never named its channels falls back to) plus a Cancel Game button: it doesn't wait for the betting window to close, since a real game doesn't wait for a countdown to finish before anyone knows who won. The bot stays fully responsive to every other command the whole time. Pressing a team's button posts a Confirm/Cancel prompt rather than recording the result immediately - pressing Confirm is what actually pays out bets, updates everyone's game record (and elo too, for ranked:true games), and moves both teams back to the original channel. Cancel Game works the same way now: it posts its own Confirm/Cancel prompt rather than cancelling on the spot, since refunding bets and moving everyone back shouldn't hinge on one accidental click either. Either prompt's Cancel (or letting it time out) puts the original message's buttons back to pressable, in case the wrong team got picked or Cancel Game was pressed by mistake; confirming either one strips the original message's buttons for good, since that game is done. Reported the wrong result and already confirmed it? /report-correct-winner fixes it after the fact. Postings go wherever the game started unless an admin redirects them with /set's wager_channel.
Every rostered player earns gold just for playing, separate from anything anyone bet: 300 for being on the winning side, 150 for the losing side. It applies the moment a game resolves - ranked or casual - and is included in the winner-report message alongside the elo line. Correcting a misreported winner with /report-correct-winner doesn't pay it out twice or take it back; it correctly flips who gets the win amount and who gets the loss amount, same as everything else the correction re-derives.
/wager betting

Bets gold on one team winning the current game, or, with match_id, on one specific match in a simultaneous-mode tournament round. Only works while betting is open, only one bet per player per game/match, and you can't bet on a game or match you're actually playing in.

ParameterTypeDescription
amountintegerHow much gold to wager. Must not exceed your balance.
teamchoiceTeam 1 or Team 2: whoever you think wins.
match_idinteger, optionalA specific tournament match's id (shown as Match #N); omit to bet on the current casual/ranked game or sequential tournament match instead. See /tournament-start's simultaneous-mode note.
Payouts favor the underdog. Winners split the losing side's pool proportional to their own bet, on top of getting their wager back. A bet on the team fewer people backed pays out more than the same-sized bet on the heavily-favored side. Betting on a specific match_id settles independently: a match resolving pays out only that match's own bettors, without waiting on any other concurrent match.
Lopsided pools get raked. The losing side's pool isn't always paid out in full - the more one-sided the betting was, the more gets held back before the split (up to 50% at a maximally lopsided pool), so reliably betting whichever side looks obviously stronger isn't free money over time. A genuinely close pool, or a bet that ends up on the winning side despite being the minority pick, still pays full odds untouched.
/wager-against betting

Challenges another player to a heads-up gold wager, completely separate from the team-game betting above; no active game required.

ParameterTypeDescription
membermemberWho to challenge. Can't be yourself or a bot.
amountintegerHow much gold each side stakes. Must not exceed your balance.
How it plays out. Shockwave posts a message mentioning the challenged player with an Accept button; only they can press it. Nothing is held from either side until they do. On accept, both players' gold is escrowed and a new message goes out asking who actually won, with Challenger Won and Target Won buttons. Pressing either posts a Confirm/Cancel prompt rather than recording the result immediately; pressing Confirm is what actually pays out the full pot to the winner, the same confirm step used when reporting a team game's winner. If either player can no longer cover the amount by the time it's accepted, the wager is cancelled instead of running.
/daily betting

Claims 1000 free gold. Once per calendar day, per player.

/stats betting

The full picture for one player: elo (shown with a League-style rank), actual in-game win/loss record (combined, and broken out separately for ranked and casual games), betting record, balance, net gold won or lost overall, and their liked/disliked roles from /setup, all in one embed. Shows their Discord avatar as the embed thumbnail.

ParameterTypeDescription
membermember, optionalWhose stats to look up. Defaults to you.
Avatar toggles between this server's pfp and your regular one. Press it and the avatar shown switches from this server's own profile picture for that player (the default: whatever /stats already shows) to their regular, account-wide Discord avatar; press again to switch back. Same button either direction, and anyone can click it, not just the player it's about. Works on the plain embed and on the trading card below (Card): it re-renders the whole card image with the other avatar rather than disappearing once you're looking at the card.
Card turns the embed into a trading card. Press it and the whole embed (stats, fields, avatar, all of it) is replaced with a portrait-style trading card. Top to bottom: Shockwave's logo and this server's name across the top, the player's actual Discord username (not their nickname) in the opposite corner, their Discord avatar as the centerpiece, a customizable title underneath it, a colored rank badge with elo/ranked record/ranked win rate (each its own line), and finally - if they're rostered on any - their persistent teams, each with its own logo. Only Card disappears once this fires, replaced with a single Back button; press that to swap back to the plain stats embed, which restores Card. Avatar stays either way, since it still has something to toggle on the card. The card always starts on this server's own avatar, even if you'd toggled to the regular one on the plain embed first. Colors, title, and font are stored per player in the database (trading_cards) and default to Shockwave's own palette (a deep purple background) and a plain "Rookie" title until something changes them.
Elo is ranked-only, per-server. Every player starts at 1000, unless an admin has changed this server's starting elo with /set's default_elo. Elo only changes for games formed with ranked:true; plain /make-teams and /captains games update the Game Record above but never touch elo. When it does update, the size of the change is based on the average rating on each side: beating a higher-rated team gains more than beating a lower-rated one.
Game Record is ranked + casual combined; Ranked and Casual split it out separately. Fields are grouped in three rows: Elo/Ranked Wins/Ranked Win Rate, then Game/Casual/Bet Record (each showing its win rate right alongside the W-L count, e.g. 4W - 1L (80.0%)), then Balance/Net Gold/Gold Wagered. A player with no games in one of those categories yet shows 0W - 0L and N/A.
Elo shows an emoji rank alongside the number, the same way League does: nine tiers, each spanning 250 elo, with the 1000 starting elo landing everyone in Platinum by default. Iron through Diamond also break down into four divisions (IV lowest, I highest) the same way League's do; Master and up just show the tier, same as League switching to raw LP once you're that high:
EloRankDivisions
0 – 249⚙️ IronIV – I
250 – 499🥉 BronzeIV – I
500 – 749🥈 SilverIV – I
750 – 999🥇 GoldIV – I
1000 – 1249🔷 PlatinumIV – I
1250 – 1499💎 DiamondIV – I
1500 – 1749🟣 MasterN/A
1750 – 1999🔴 GrandmasterN/A
2000+👑 ChallengerN/A
/card-set betting

Equips any combination of your unlocked trading-card title, color scheme, and/or font in one call (see /stats' Card button), and shows the resulting card. Every field you give is checked against what you've actually unlocked before anything is applied; if one fails, none of them are equipped.

ParameterTypeDescription
titlestring, autocomplete, optionalWhich title to equip. Autocomplete only offers titles you've actually unlocked: "Rookie" (the default, always available) plus anything you've earned.
color_schemestring, autocomplete, optionalWhich color scheme to equip. Autocomplete only offers schemes you've actually unlocked: "Default" (Shockwave's own palette, always available) plus anything you've earned.
font_stylestring, autocomplete, optionalWhich font to equip. Autocomplete only offers fonts you've purchased: "Default" (Shockwave's own Chakra Petch/IBM Plex Sans pairing, always available) plus anything from /shop.
Reaching Diamond, Master, Grandmaster, or Challenger permanently unlocks that tier's own title and color scheme ("Diamond Mind", "Mastermind", "Grandmaster", "The Challenger", each paired with that tier's own rank-badge color, automatically brightened just enough to stay readable against the card's background) the moment you first get there; both stay unlocked forever after, even if your elo drops back down below the tier that earned them. Picking one here doesn't require currently being at that rank, just having reached it once.
Fonts are shop-only. Unlike titles and color schemes, there's no way to earn one by rank. Each one is a genuinely different bundled typeface, not just a different weight of the default: "Bold" is Russo One, "Elegant" is Cinzel, "Handwritten" is Permanent Marker, "Cyber" is Orbitron, "Retro" is Press Start 2P, "Villain" is Creepster, "Military" is Black Ops One, "Neon" is Bungee, "Western" is Rye - all free/open-source (Google Fonts, SIL Open Font License). Bold, Elegant, and Handwritten are the "quiet" faces and cost less; every other style commits hard to one loud look and costs more for it. Use /preview to see what each one actually looks like before buying.
/preview betting

Shows every option for one customization type in a single gallery image, regardless of what you've personally unlocked yet - the "what are my options" companion to /card-set and /team-set.

ParameterTypeDescription
typechoiceLogos, Card Titles, Color Schemes, or Fonts.
Logos and Color Schemes are laid out as a grid, each item labeled with its exact name underneath - useful as a lookup table for what to actually type into /team-set logo: or /card-set color_scheme:, not just a gallery. Fonts get shown in their own real typeface rather than just named. Generated once and cached, so this loads instantly after the first time anyone runs it.
/shop betting

Lists every trading-card title, color scheme, and font purchasable with gold, grouped by category, with your current balance and a ✅ next to anything you already own.

16 color schemes: five standalone colors (Crimson, Emerald, Azure, Sunset, Fire) plus one for each Runeterra region (Demacia, Noxus, Freljord, Ionia, Piltover, Zaun, Shurima, Shadow Isles, Bilgewater, Bandle City, Targon) - the same region set /team-set's built-in crests cover, so a team already using one of those logos has a matching player-card scheme to go with it.
Sort: Price / Sort: Owned, and Ascending / Descending buttons sit under the listing so you can re-sort each category on the fly, no need to re-run the command. Only the person who ran /shop can click them.
/shop-buy betting

Purchases a trading-card cosmetic with gold, permanently unlocking it the same way reaching an elo tier does.

ParameterTypeDescription
itemstring, autocompleteWhich item to buy; autocomplete only offers items you don't already own, labeled with their price.
Refuses the purchase if you already own the item or can't afford it; nothing is deducted either way. On success, equip it with /card-set.
/achievements betting

Lists every trading-card achievement with its description and a ✅/🔒 marker for whether you've earned it. No permission gate; anyone can check their own progress.

18 achievements, each unlocking an exclusive title equipped the same way as any other via /card-set:
  • First Blood - win a game.
  • Veteran ladder (four tiers, each its own distinct title, not just "Veteran II"): Veteran (10 career wins) → Elite (50) → Battle-Hardened (150) → Immortal (500).
  • On Fire ladder (three tiers): On Fire (5-game win streak) → Unstoppable (10) → Untouchable (20).
  • High Roller - win a single bet of 5000+ gold.
  • Jackpot - win a single bet paying out 3x+ your wager, any size.
  • Giant Slayer - a big single-match elo swing.
  • Team Player - rostered on 3+ persistent teams at once.
  • The Captain - actually captain one.
  • Big Spender - own 3+ items bought from /shop.
  • Frequent Bettor - place 25+ total bets, win or lose.
  • Iron Will - rack up 20+ game losses without quitting.
  • Tournament Champion - win a tournament.
  • Onboarded - run /setup for the first time.
Gold-based achievements are keyed off a single transaction, never a balance milestone: /daily hands out free gold every day, so "save up N gold" would just reward showing up. Unlocking one posts a notification in the channel where it happened. Running /achievements also retroactively unlocks anything you already qualify for but haven't been credited with yet.
Veteran and On Fire get their own sections. Since each is a ladder of several rising tiers, their achievements are grouped into their own field in the results instead of being scattered alphabetically alongside every unrelated achievement, so the four-rung Veteran progression (and the three-rung On Fire one) reads clearly as one climb from top to bottom.
/leaderboard betting

Ranks every player in the server who has stats to show. Leave both options out for an overview sorted by elo, showing the raw elo number alongside the ranked win/loss record; pick a specific stat to rank by just that instead.

ParameterTypeDescription
filterchoice, optionalElo, Balance, Game Wins, Game Losses, Game Win Rate, Ranked Wins, Ranked Losses, Ranked Win Rate, Casual Wins, Casual Losses, Casual Win Rate, Bet Wins, Bet Losses, Bet Win Rate, Net Gold, or Gold Wagered. Omit for the elo-sorted overview.
orderchoice, optionalDescending (highest first) or Ascending (lowest first). Defaults to Descending.
Paging happens on the same message. The result gets First/Prev/Next/Last buttons; clicking previous/next/first/last edits that message in place instead of posting a new one, so the leaderboard stays a single message no matter how many pages someone flips through. Anyone in the server can page through it, not just whoever ran the command. Players who've never touched the economy (no /daily, bets, or games) don't have a row yet and won't appear until they do.
/report-correct-winner admin

Fixes a misreported winner for the most recently resolved game - undoes the wrong payouts, win/loss records, and elo changes, then re-applies all of it for the correct team - or invalidates the game entirely. Requires the Manage Server permission.

ParameterTypeDescription
teamchoice, optionalThe team that actually won. Give this or invalidate, not both.
invalidateboolean, optionalUndo the last game entirely instead of picking a winner: refunds every bet to its exact pre-bet amount, and undoes elo, game/ranked records, and win/loss gold. Nothing is re-applied for either team, and there's no result left behind for a further correction to work from.
match_idinteger, optionalCorrect a specific tournament match instead of the last game; see the note there. Doesn't touch payouts/elo, only that match's recorded winner and the bracket. Winners-bracket matches only for now; a losers-bracket or Grand Finals match_id is refused with an explanatory message. invalidate isn't supported here yet.
Invalidating refunds the exact stake, not just the payout. Simply undoing a winner's recorded delta would remove their whole payout (stake plus winnings) and leave them down by exactly what they bet - the same state as a loss. Invalidating adds each wager's original amount back on top of that undo, so every bettor, winner or loser, lands back at their exact pre-bet balance, the same way cancelling an unresolved bet round already refunds it.

Tournaments & teams

A separate system from the casual/ranked games above: persistent, named teams a player can captain, and a bracket built from whichever of those teams register for the server's tournament.

Persistent teams

Distinct from the temporary team1/team2 a /make-teams or /captains game produces; these stick around across sessions and are what tournament registration works against. Every team-name field below autocompletes as you type, scoped to your own teams - the ones you captain for an action that requires it, any you're rostered on otherwise - the same way /card-set only ever suggests titles/schemes/ fonts you've actually unlocked. Team names are case-insensitive: typing "red" finds a team named "Red", and it can't be taken again as "RED" by someone else - the one exception is renaming a team to a different capitalization of its own current name, which is still allowed.

/team-create teams

Creates a persistent team with you as its captain; team ids are assigned automatically.

ParameterTypeDescription
namestringTeam name. Must be unique in this server.
team_sizeintegerHow many players the team is looking for in total.
captainmember, optionalMake this member the captain instead of you.
/team-set teams

Sets a team's voice channel and/or logo, any combination in one call. The team's captain, or anyone with Manage Server, can do this.

ParameterTypeDescription
teamstringName of the team.
voice_channelvoice channel, optionalExisting channel to use. Can't be combined with new_voice_channel.
new_voice_channelboolean, optionalCreate a brand new voice channel named after the team instead of naming an existing one.
logostring, autocomplete, optionalWhich built-in Clash-themed logo to use; autocompletes as you type from the full built-in set.
Reusing another team's channel asks first. If voice_channel is already set for a different team, Shockwave posts a warning with "Yes, use it anyway" / "No" buttons instead of silently reassigning it. "No" doesn't retry anything; just run the command again with a different channel. Any logo given in the same call is still applied even while that confirmation is pending.
Every team gets a logo automatically. A team with no logo set gets a random one assigned the first time it's looked up (creation, /team-stats, /my-teams, …); logo here is for picking a specific one instead of leaving it to chance.
/team-rename teams

Renames a persistent team. The team's captain, or anyone with Manage Server, can do this.

ParameterTypeDescription
teamstringCurrent name of the team.
new_namestringNew name. Must be unique in this server, same rule /team-create enforces.
Everything else about the team is untouched - roster, record, voice channel, and logo all carry over unchanged. Renaming doesn't rename an assigned voice channel to match; use /team-set for that separately if you want them to match.
/team-delete teams

Permanently deletes a persistent team - its roster, record, and any pending invites go with it. The team's captain, or anyone with Manage Server, can do this.

ParameterTypeDescription
teamstringName of the team to delete.
Confirmation required. Posts a warning with "Delete team" / "Cancel" buttons instead of deleting immediately - only the member who ran the command can click them, and the prompt expires after 30 seconds with nothing deleted if it's ignored, the same pattern /clear uses for its own destructive flags.
Doesn't affect a tournament this team is already registered in. Registration snapshots a copy of the team at the time it registered, not a live link back to it, so an in-progress bracket plays out exactly as registered either way.
/team-transfer teams

Hands off a persistent team's captaincy to another player already on its roster. The team's captain, or anyone with Manage Server, can do this.

ParameterTypeDescription
teamstringName of the team to transfer.
membermemberWho to make the new captain. Must already be on the team's roster - invite them with /team-invite first if they aren't.
Only the captaincy moves. The roster, record, voice channel, and logo are all untouched - the old captain stays on the team as a regular member unless they /team-leave afterward.
/team-invite teams

Invites up to 5 members at once to a team, in a single shared message. The team's captain, or anyone with Manage Server, can do this.

ParameterTypeDescription
teamstringName of the team.
member_1memberWho to invite.
member_2 … member_5member, optionalUp to 4 more members to invite in the same message.
forceboolean, optionalManage Server only: adds everyone straight to the roster, skipping their own confirmation.
Each invite has to be accepted individually. Shockwave posts one message mentioning everyone valid with a single Accept button; each invited player presses it for themselves to join, entirely independently of whether anyone else invited alongside them has. Bots, duplicates, and anyone already on the team are skipped with a note rather than failing the whole invite.
force skips all of that - no posted invite, no button, nobody's own confirmation needed. Requires Manage Server even for the team's own captain.
/team-leave teams

Removes you from a persistent team's roster. No permission needed - anyone rostered can do this to themselves.

ParameterTypeDescription
teamstringName of the team to leave.
The team's captain can't use this one directly. A captain who wants out has to answer "who's in charge now" first: /team-transfer the captaincy to someone else on the roster, then leave normally, or /team-delete the team if it shouldn't exist at all anymore.
/team-stats teams

Shows a team's captain, roster, voice channel, win/loss record, and logo (if it has one) as a thumbnail.

ParameterTypeDescription
teamstringName of the team.
Card turns the embed into a team card. Press it and the whole embed is replaced with a portrait-style card built around the team's own logo as the centerpiece: colors (frame, header, labels, background) are all sampled straight from that logo, not a stored setting, so every team's card automatically matches its own crest. A dark logo color gets automatically lightened just enough to stay easily readable against the card's own background, so text is never sacrificed for the sake of matching the crest exactly. Below the logo: the team's name, then its captain, record, and win rate, then its full roster with the captain starred. A Back button replaces Card once the card is up and swaps back to the plain embed, restoring Card in turn: a real toggle, not a one-way trip. A team with no logo set falls back to Shockwave's own gold.
/my-teams teams

Lists every team you (or another player) are a rostered player on (captain or not) in this server, and lets you flip through each one's full /team-stats-style card.

ParameterTypeDescription
membermember, optionalWhose teams to look up. Defaults to you.
Paging happens on the same message, same First/Prev/Next/Last button pattern as /leaderboard; clicking a button edits the message in place so you can immediately press the next one.
/team-list teams

Browses every team in the server, filtered and sorted however you like - including by win rate, to rank teams.

ParameterTypeDescription
searchstring, optionalOnly show teams whose name contains this.
recruiting_onlyboolean, optionalOnly show teams still short of their target roster size.
sortchoice, optionalName, Wins, Losses, Win Rate, or Roster Size. Defaults to Name.
orderchoice, optionalAscending or Descending. Defaults to Ascending.
To rank teams by win rate, use sort:"Win Rate" order:"Descending". Paged with the same First/Prev/Next/Last buttons as /leaderboard//my-teams.
/team-use teams

Loads two persistent teams straight into a casual or ranked game, skipping /make-teams//captains's random-split-or-draft entirely: the quickest way to run a scrim between two teams that already exist.

ParameterTypeDescription
team1stringName of the first team.
team2stringName of the second team. Must be different from team1.
rankedboolean, optionalTrack elo for this game. Defaults to casual.
Same contract as /make-teams and /captains. This only loads the roster; nobody moves and no elo/betting starts until you press Start (or Start (no move), to open betting without moving anyone) on it.
/reuse teams

Re-posts the exact same two teams from whichever of /make-teams, /captains, or /team-use ran last, instead of drawing a fresh random split or captains draft. No parameters - it just runs the last game back.

Stays ranked if the last game was ranked, casual if it was casual - same for role labels on a 5v5 roster. If a game from those same teams is still being bet on or played, it's cancelled first (bets refunded, everyone moved back) before the roster's reposted.

Tournaments

A server has at most one tournament at a time. Build the shell, register teams into it, then build the bracket; re-running the bracket step rerolls it from whoever's currently registered.

/tournament-create tournament

Creates an empty tournament shell for this server: a name, a team size, and a bracket size. A server can only have one tournament at a time.

ParameterTypeDescription
namestringTournament name.
teamsizeintegerNumber of players on each registered team.
numteamsintegerHow many teams the bracket holds. At least 2.
double_elimboolean, optionalDouble elimination instead of single. Defaults to single.
Creating the first tournament in a server needs no special permission; overwriting an existing one does. Since a server only ever has one tournament, running this again while one already exists requires the Manage Server permission, and doesn't overwrite it right away even then. Shockwave posts a warning naming the existing tournament with "Overwrite tournament" / "Cancel" buttons, same confirmation pattern as /clear's clear_elo/clear_economy. Only the member who ran the command can click them, and the prompt expires after 30 seconds untouched if ignored.
/tournament-register tournament

Registers one of your teams for the server's tournament. The team's captain, or anyone with Manage Server, can do this.

ParameterTypeDescription
teamstringName of the team to register.
Has to actually fit. The team's current roster size must match the tournament's team size exactly; it can't already be registered; the bracket can't already be full; and none of its players can already be on another team registered for this same tournament. A player can sit on multiple teams in the server, just not two that are both in the same tournament.
/tournament-create-bracket tournament

Builds the tournament bracket from whichever teams are currently registered, seeded in random order.

ParameterTypeDescription
elimination_typechoiceSingle or double elimination.
losers_bracket_timingchoiceDouble elimination only. When the losers bracket plays: after the whole winners bracket finishes (default), or interleaved as each round unlocks it.
Running it again is a reroll. There's no confirmation here; calling /tournament-create-bracket again replaces whatever bracket already existed, reshuffled from the currently-registered teams. If the team count isn't a power of two, the leftover slots are byes. The bracket is printed automatically right after; no need to also run /tournament-print-bracket unless you want to see it again later.
Double elimination builds a real losers bracket, not just a label; a team gets a second chance after its first loss instead of being knocked out immediately. See /tournament-start below for how the whole thing plays out.
Two ways to time the losers bracket. The default keeps the two brackets fully separate in time; the losers bracket doesn't start until the winners bracket has crowned its champion. losers_bracket_timing: Interleaved instead pauses the winners bracket after each of its rounds to let any losers-bracket round that round just unlocked play out first, so both brackets make progress side by side instead of one sitting idle until the other finishes.
/tournament-print-bracket tournament

Posts the current bracket as an actual image: every round's matchups connected with lines, the same layout you'd sketch on a whiteboard, plus a short status line naming the current champion (or TBD).

Unplayed slots show TBD (or BYE for a permanently empty seed) until the match feeding them actually resolves, but the bracket lines themselves already show every possible matchup for every round, not just the next one.
Double elimination posts two images. The winners bracket and the losers bracket each get their own attached image on the same message, plus a Grand Finals status line once both brackets have produced a champion, showing the winners-bracket champion (undefeated) against the losers-bracket champion (one loss), and the tournament's actual final result once it's decided.
Big brackets converge toward the center. Once a bracket is 16 or more teams, it's drawn as two mirrored halves growing inward from either side and meeting in the middle, the same layout a printed tournament poster uses, rather than one long strip. Smaller brackets still print left to right.
/tournament-start tournament

Starts playing the current round of the bracket. Byes auto-advance immediately; everything else becomes a match.

ParameterTypeDescription
modechoiceSequential or Simultaneous, see below. Applies to the whole tournament run, not just this round.
Every match gets a matchup graphic posted alongside its text announcement: both teams' logos and rosters facing off, captain starred and listed first, and which round of the tournament it is.
Sequential. One match at a time. Shockwave posts "Match #N: A vs B" with a Ready button. Either team's captain can press it to begin the match. Once accepted, that match runs through the exact same cycle a Start-triggered game does: /wager opens, the usual Team 1/Team 2 winner report resolves it, payouts and elo apply normally. As soon as it resolves, the bracket updates in chat and the next match's ready check goes out; the round doesn't advance until every match in it is done, even if two other teams are both sitting there ready to go.
Simultaneous. Every match in the round posts its "Match #N: A vs B" report at once, with Team 1/Team 2 buttons like any normal winner report: no ready check. Betting opens once for the whole round, covering every match in it at the same time: the base duration from /set's betting_timer is multiplied by how many matches are in the round, and /wager takes a match_id to say which one you're betting on; you can bet on more than one concurrently-open match. Each match settles its own bets independently the moment it resolves, without waiting on the rest of the round. The bracket updates in chat as each match comes in.
Every Team 1/Team 2 report, either mode, needs a Confirm press before it counts. Pressing either button posts a Confirm/Cancel prompt rather than resolving the match immediately, closing betting on that match right away either way. Cancel (or letting the prompt time out) puts the match's buttons back to pressable, in case the wrong side got picked.
Round transitions get their own announcement. Once every match in a round has resolved, Shockwave posts "🏁 Round N has ended!" with a fresh copy of the bracket, then immediately kicks off the next round, or, once the bracket has nothing left to play, announces the champion. None of this blocks the bot: everything runs off button presses rather than a waiting loop, so /wager and every other command keep working normally for other games in progress while a tournament round plays out.
Every match gets an id. Shown as Match #N in its messages; pass it as match_id to /report-correct-winner to fix a wrong result, as long as the next round hasn't started yet. (Currently only supported for winners-bracket matches; see the note there.)
Double elimination keeps going after the winners bracket. Once it crowns its own champion, the losers bracket plays out the same way (byes auto-advance, everything else becomes a match, sequential or simultaneous per the same mode); no need to run /tournament-start again. Once the losers bracket also has a champion, Shockwave posts Grand Finals: the winners-bracket champion (undefeated) against the losers-bracket champion (one loss). If the winners-bracket champion wins, the tournament's over. If the losers- bracket champion wins instead, both sides now have exactly one loss, so a second, decider match settles it; whoever wins that one is champion regardless of which bracket they came from.

Utility

/roll utility

Rolls a random number between 1 and a number you give it. Handy for deciding who gets first pick.

ParameterTypeDescription
numintegerTop of the range. Must be greater than 1.
/help utility

Run with no arguments for a link to this page. Pass a command name (with or without the leading slash) for a short usage line and description without leaving Discord.

ParameterTypeDescription
commandstring, optionalName of the command to look up, e.g. wager. Omit for the full site link.