The Discord bot
One slash command — /sheetwright — puts your living character sheet in your table's Discord server. Everything acts through the same rules as the web app: rolls land in the campaign dice log, pool spends show up live on an open sheet, attack damage updates the GM's encounter.
Getting connected
- Run /sheetwright link in any server with the bot. It replies (only to you) with a magic link, valid 15 minutes.
- Open the link while signed in to Sheetwright — your Discord account is now connected, once, for every server.
- Pick who you play with /sheetwright character name:<who> — the bot autocompletes your active characters.
/sheetwright link action:disconnect disconnects at any time. Everything below requires a linked account and a picked character.
Player commands
Action results post as table-safe summaries the whole channel sees; sheet, status and list replies stay private to you.
| Command | What it does | Example |
|---|---|---|
| link [action] | Connect your Sheetwright account — action:disconnect severs it again | /sheetwright link |
| notifications [state] | Opt in to (or out of) DMs: you're up, new handout, unclaimed loot, an intrusion awaits — off until you turn them on | /sheetwright notifications state:on |
| character [name] | Pick which of your characters you play here (autocompletes) | /sheetwright character name:Vess |
| sheet | Your character sheet — with buttons for any prompt waiting on you | /sheetwright sheet |
| roll dice [note] [target] [approach] [difficulty] | Server-side dice (d20, 2d6+1…) into the campaign dice log. In a social scene, naming a target or approach (or a bare difficulty) makes it a real social task through the engine; a bare roll auto-attaches to the one active scene you're in, with a one-tap "Not part of it" undo | /sheetwright roll dice:d20 target:The Conductor approach:charm |
| task difficulty [skill] [assets] [effort] [stat] [note] | A Cypher System task roll against difficulty 0–10; Effort is paid from the chosen pool, Edge applies automatically | /sheetwright task difficulty:4 skill:trained effort:1 stat:intellect note:Decipher the glyphs |
| attack target damage [ability] [skill] [assets] [effort] [stat] [difficulty] | Attack an enemy in the active encounter — difficulty defaults to the target's level, damage lands in the GM's encounter. Name an ability (Onslaught and friends) and its cost is paid with the same roll, Edge applied once, from the ability's pool unless you pick a stat | /sheetwright attack target:Guard damage:4 ability:Onslaught effort:1 |
| initiative [skill] [assets] [effort] | Roll initiative (a Speed task) when an encounter starts | /sheetwright initiative effort:1 |
| defend [prompt] [skill] [assets] [effort] | Answer a pending defense prompt (defaults to your oldest open one); a failed defense applies damage automatically | /sheetwright defend effort:2 |
| help target | Help another PC — they gain one asset | /sheetwright help target:Marla |
| move zone | Move to an adjacent zone in the encounter | /sheetwright move zone:The scree |
| pool stat amount | Spend (negative) or restore (positive) pool points | /sheetwright pool stat:might amount:-2 |
| resource name amount reason | Adjust a trackable custom resource (Soul Points and friends) — negative spends, positive restores, and the reason lands in the resource's audit history | /sheetwright resource name:Soul Points amount:-1 reason:Powered the ward |
| recover | Make your next recovery roll (1d6 + tier), using slots in order | /sheetwright recover |
| xp amount | Adjust your XP (positive gains, negative spends) | /sheetwright xp amount:2 |
| cypher [name] | List your cyphers, or mark one used | /sheetwright cypher name:Detonation |
| abilities | List your abilities with their Pool and tracked resource costs and the remaining tracked uses | /sheetwright abilities |
| use ability [effort] [stat] | Use an ability, paying every Pool and tracked resource cost at once and counting a tracked use (going beyond a use limit warns, never blocks) — pick stat for the Effort Pool when the cost alone doesn't decide it (custom-only or multi-Pool costs) | /sheetwright use ability:Bash effort:1 |
| lookup query | Look up a creature in the bestiary | /sheetwright lookup query:broken hound |
| encounter status | What's happening right now, spoiler-free — in combat, the live turn order with whoever is up marked | /sheetwright encounter status |
| intrusion accept · decline · status | Answer the GM intrusion waiting on you (+2 XP / −1 XP), or list the open ones you can see | /sheetwright intrusion accept |
| clock status | Where the party's clocks stand | /sheetwright clock status |
| rewards list · claim reward | Browse the party's loot queue and claim a reward for your character | /sheetwright rewards claim reward:Ray emitter |
| arc view · start · log | Privately view your arc journal, start an arc, or log a milestone and its XP | /sheetwright arc view |
Prompts come with buttons: defenses offer [Roll defense] and [With Effort…], a natural 19/20 offers [Take +damage] — choosing a special effect instead happens on the web via the link in the reply.
GM commands
Everything a GM does lives under /sheetwright gm, so players never scroll past commands that aren't theirs. First pick which of your campaigns you run here with gm campaign — the GM's mirror of a player picking a character; no linked character is needed to GM. The bot checks that you are the picked campaign's GM (GM features need a subscription, like on the web), and GM replies are always private to you, so the table sees nothing it shouldn't.
| Command | What it does | Example |
|---|---|---|
| gm campaign [name] | Pick which of your campaigns you run here (autocompletes) | /sheetwright gm campaign name:The Sunken Vault |
| gm encounter [name] | The full encounter picture, privately — turn order with every initiative roll, who is up, NPC health, concealed threats. Needs no character in the campaign; name an encounter when several are active | /sheetwright gm encounter |
| gm start · next · end | Start the prepared encounter, advance the turn, end the scene | /sheetwright gm next |
| gm convert | Flip the active encounter in place: a social scene turns violent, or a combat becomes a parley — same cast, same log | /sheetwright gm convert |
| gm damage target amount [piercing] | Apply direct damage to one participant (Armor applies) | /sheetwright gm damage target:Vess amount:3 |
| gm effect target name kind [value] [duration] [applies_to] | Apply an asset / eased / hindered effect for an action, a round, the encounter, or until removed | /sheetwright gm effect target:Guard name:Dazed kind:hindered duration:round |
| gm request pc target [approach] [note] | Ask a named player for a social roll vs. an NPC ("Persuasion vs. the Conductor") — they get the prompt on their sheet, web view and DM, and their answer lands pre-attached with your target and approach | /sheetwright gm request pc:Vess target:The Conductor approach:reason |
| gm intrusion pc description | Propose a GM intrusion against a PC — they answer with accept/decline (from Discord or the web) | /sheetwright gm intrusion pc:Vess description:The bridge rope snaps |
| gm tick clock [amount] | Advance or rewind a clock (negative rewinds) | /sheetwright gm tick clock:Reinforcements amount:1 |
| gm assign reward character | Hand a staged reward straight to a character | /sheetwright gm assign reward:Ray emitter character:Vess |
gm encounter shows you the full picture (privately): the live turn order with each initiative roll, who is up, NPC health and concealed threats — no character in the campaign needed. Playing a character at the table, the player-side clock status and encounter status show you the same; players get the spoiler-free view. Initiative rolls reorder the turn list on their own. Some steps deliberately stay on the web runner: reordering the turn list by hand, announcing NPC attacks, multi-target actions, the effect side of a special choice, and resolving the encounter with rewards.
GMs: bring the bot to your server
- Add Sheetwright to your Discord server — you need the Manage Server permission there. The bot registers slash commands and joins with zero permissions: it never posts in channels and reads no messages — being a member only lets it DM the players who opt into notifications.
- Have every player /sheetwright link and pick their campaign character. You link too, then pick the campaign you run with /sheetwright gm campaign — GMing needs no character of your own.
- That's it. The bot has no per-server setup — campaign membership on Sheetwright decides who can do what, in any channel the command is used.
Slash commands work in every channel the bot's commands are allowed in — use Discord's Server Settings → Integrations to restrict them to a game channel if you like.
A play-by-post week, start to finish
Play-by-post is where the bot and the campaign pages click together: Discord is the table, Sheetwright keeps everyone oriented. Nothing posts for you and nothing enforces a pace — the bot answers commands, DMs the players who asked to be pinged, and keeps the campaign pages current. Here's a worked week at a Ninth World table: the GM is running the vault delve from the GM guide, the players are Mara and Jori.
Once, at setup
- The GM adds the bot to the server; everyone runs /sheetwright link. Players pick their character, the GM picks the campaign with gm campaign.
- Everyone who wants pings runs /sheetwright notifications state:on — DMs are strictly opt-in, per player, and never appear in a channel.
- The GM makes a thread per open scene (#the-flooded-stair) and puts its link and label on the scene card, so the scene — and the party's "Whose move is it?" card — always point at the right thread.
Monday — the GM opens the scene
The GM posts the framing in the thread, marks the scene active on the scenes page and sets its waiting state to players, ticking Mara and Jori. Both get a DM — "you're up" with the scene's title and a link — and the campaign's handouts page now answers play-by-post's eternal question: whose move is it?
Tuesday — Mara acts
Mara replies in character, then rolls right in the thread: /sheetwright task difficulty:4 skill:climbing effort:1 — the result posts as a table-safe summary the whole thread sees and lands in the campaign dice log. It's a natural 1. The GM, on a phone, answers with /sheetwright gm intrusion ("the rusted rail tears loose"); Mara gets the "an intrusion awaits" DM and takes the XP with /sheetwright intrusion accept.
Wednesday — the world moves
The GM ticks the Rising water clock (gm tick) and reveals a handout — the star-chart mosaic, an image on a note addressed to Mara alone. Mara's DM says a new handout waits; nobody else is pinged, and nobody else can open it. Anyone can check /sheetwright clock status or the handouts page between posts.
Thursday — slow-motion combat
The encounter prepared on the scene starts (gm start). Combat works exactly like at a live table, just slower: players roll initiative as they come online, attack with /sheetwright attack, and a pending defense waits patiently on its player — with roll buttons on /sheetwright sheet — until they answer. Nothing times out.
Friday — loot, and the quiet player
The GM stages the warden's cypher: every member gets the "unclaimed loot" DM, and Jori claims it with /sheetwright rewards claim. Jori has otherwise been silent all week — the spotlight strip on the GM's scenes page sorts him first (waited on since Monday, no roll, no reward before this), the GM's cue for a friendly out-of-game nudge. The "you're up" DM fired Monday and won't repeat — pings happen when the waiting state newly points at someone, never on a timer.
Sunday — wrap the beat
The GM marks the scene resolved, activates the next one, nudges the thread's history and wraps the week into a session log. A player back from vacation doesn't reread four hundred posts: the Recap page (Campaign → Handouts → Recap) assembles what the table saw — sessions played, clues found, revealed threads that moved, the encounter's outcome, new handouts and the dice log — over a 7, 14, 30 or 90-day window. It's spoiler-free for everyone, the GM included.
The contract in one line: your posts are yours, the waiting state is guidance rather than enforcement, and every number — rolls, pools, clocks, XP, loot — stays honest in one place while the story happens in the thread.