The dashboard
Chancery has a web dashboard at chancery.titanite.family. Everything on it can also be done with a slash command, and everything a slash command does can be done on it. See parity for why that matters.
The ? in the corner of any dashboard page links straight to the section of
this page that covers it.
Signing in
You sign in with Discord. Chancery never sees your password.
A server shows up in your picker when both are true:
- Chancery is in that server, and
- you are an administrator of it, or you hold the admin or staff role set on its General Settings page.
Change your roles in Discord and the list changes with them. There is nothing to grant on the dashboard itself.
If a server is missing, check in this order: is the bot actually in it; are you an administrator there; has someone set an admin role that you do not have. The third one catches most cases. Setting an admin role does not remove Discord administrators, but it does mean somebody without either will not get in.
Home
What this server has switched on, and what has changed recently. The strip at the top counts modules on and off, and each chip jumps to that module.
General Settings
The settings that apply whatever modules you have on: who counts as an admin, who counts as staff, and where the bot reports its own failures.
Every value here is the same one /config set writes. The full list, with the
type and default of each, is in the settings reference.
Server administrators bypass all of these. The roles exist so somebody can run the bot without being handed Administrator.
Modules
One page per module, and each page is a directory rather than a form: a list of categories, and the settings live one level down. Events has twelve settings and Tickets more, so a single page of every setting would be unreadable.
Each category row shows how many of its settings are filled in. If it says needs setup, something in there is required and empty. The module is on, but the part of it behind that row will not work until you fill it.
Switching a module off hides its commands in Discord. Nothing is deleted, and everything comes back when you switch it on again. See Modules.
Lists
Some categories are a list rather than a set of settings: event types, games, ticket types, panels, forms, suggestion boards, tags, statuses, factions, stores, pipeline stages, divisions.
They all behave the same way. Search, add, click a row to edit it, arrows to reorder, bin to delete. Order matters for some of them: pipeline stages and form outcomes are a sequence and the order is what it means.
Most of these save for real. Three exceptions, for now:
- Forms is read-only here. A form's questions live behind the versioned
publish flow
/formuses, not a field you can patch from a table. Build and publish forms with the command. - Ticket staff roles still shows placeholder rows. The real data is one
row per ticket type, not a flat list of roles, and needs its own page —
use
/ticketadmin staffroleuntil it lands. - Stores, pipeline stages, checklist steps and divisions are fixed in the bot's code, not settings a server changes, so there is nothing here for them to save to. They display as reference, same as before.
A worked example: setting up Events from the web
Turning on event hosting for a server, without touching a slash command:
- Sign in, pick the server from
/servers. - On Home, find the Events chip among the off modules and click it. This takes you straight to that module's page rather than making you hunt for it under Modules.
- The Events page opens as a directory: Announcement, Who can host, Cooldowns, Vote requests, Event log. Each its own category, each showing how many of its settings are filled in.
- Click Announcement. It says needs setup. Fill in the announcement channel and the hoster role, save.
- Back on the directory, Announcement now shows fully configured. The other categories are still optional; leave them for now.
- Go to Lists → Event types, click Add, create
ssu/ "Server Start Up". Do the same under Game presets for at least one game. - That's it.
/event startin Discord now has something to offer in its dropdowns, exactly as if an admin had run/config setand/eventadmin type addby hand.
Nothing here is dashboard-only. Anyone could've done the identical thing with slash commands instead, and either path leaves the server in the exact same state, because both call the same code underneath.
Templates
A template is a message you build once and point things at. A ticket panel, a form panel and an event announcement are all "send this message", so they can all use the same template, and changing it changes every one of them.
Duplicate is on every row, because "the same panel with one line changed" is the thing people actually do.
Variables like ${user} and ${event.name} are filled in when the message is
sent. The editor only offers the variables that make sense where the template is
used, and will not save one it does not recognise.
Building a template and using it from a custom command or a button works today. Pointing a built-in feature's own message at one is the remaining gap. The event announcement, for instance, still posts its own built-in text regardless of what you set on its Announcement page. This is landing feature by feature; nothing is broken, the wiring on that specific sending path just isn't there for most features yet.
Components
Buttons and select menus.
The important thing, and the thing people get wrong: this page does not build the button. The button's label, colour and emoji are set on the template. What you build here is a named set of actions, and the button points at it by name. One behaviour can therefore be shared by every button that uses that name.
An action is one of:
| Action | What it does |
|---|---|
| Send message | Replies where the button was pressed. Can be visible only to them. |
| Send channel message | Posts into a channel you pick. |
| Edit message | Replaces the message the button is on. |
| Delete message | Removes the message the button is on. |
| DM user | Sends it to them privately. |
| Open a form | Starts one of this server's forms. |
| Open a ticket | Opens a ticket of a type you pick. |
| Give / take away / toggle roles | Changes the presser's roles. |
Role actions are limited on purpose. A button can only hand out roles below your own highest role, so it can never grant more than you hold. This is re-checked the moment the button is pressed, not just when you build it. Your own roles, or the button-builder's, can change afterwards, and the check runs against whoever is pressing it right now.
Open a form and open a ticket call straight into the same code /form
and the ticket-opening flow already use, so eligibility rules, duplicate
checks and the rest all still apply.
Commands
Every Chancery command, with whether it is on and who can use it. Custom
commands live here too: a name and a list of actions, the same actions the
buttons use. Saving one registers it as a real slash command in this server —
Discord can take a minute or two to show a brand new one in the picker after
you save, the same delay /moduleadmin has always had. Renaming a command
retires the old slash command and registers the new one; deleting it removes
the slash command entirely. A name that collides with one of Chancery's own
commands is refused when you try to save it.
Profile
Who you are signed in as and which servers you can manage. Nothing is configured here.
Parity
Anything you can do on the dashboard you can do in Discord, and the other way round. This is structural, not a promise we keep re-checking: both surfaces call the same code, so there is no path where one can write something the other cannot.
The practical consequence: if the dashboard is down, Discord still works. Nothing here is web-only.
One gap remains: a built-in feature's own announcement or notice (the event announcement is the current example) does not yet read the template you can point its message at from that feature's own page. Everything you build directly, a custom command, a button, a select menu, runs for real; this is narrower than it sounds, and is landing feature by feature.
Troubleshooting
| What you see | Usually means |
|---|---|
| A server missing from the picker | The bot is not in it, or you hold neither Administrator nor the configured admin/staff role. |
| A category says needs setup | A required setting inside it is empty. Open it; the empty field says what needs it. |
| A module's commands missing in Discord | The module is off. Switch it on from its page or with /moduleadmin. |
| A setting saved on the web but nothing changed | Check the module is on. Settings are kept whether or not the module is enabled. |
| A brand new custom command isn't in Discord's picker yet | Give it a minute or two. Discord itself takes a moment to show a newly registered command, the same as any new slash command. |
| A custom command or button does nothing when pressed | The template it points at was deleted, or (for a button) its label doesn't match a Components entry's name exactly. Case-sensitive. |
| A built-in feature's message doesn't reflect the template set for it | Expected for now. See Templates. Most built-in features don't read that pointer yet; things you build directly (commands, buttons) do. |
| A role missing from a role action's list | It is at or above your own highest role. That is deliberate. |
| A saved custom command's name was refused | It collides with one of Chancery's own commands. Pick a different name. |
"Unknown config key" from /config set | The key does not exist. The autocomplete matches on the setting's name as well as its key. Type what it is called. |