Skip to main content

Forms and applications

Building a form, letting people fill it in, and reading what comes back.

Module: intake. Off until a bot owner runs /moduleadmin enable module: Forms and applications. See Modules.

Building a full application form, start to finish​

Create it​

/formadmin create key: staff-app name: "Staff Application" template: Blank

key is a short id you'll refer to it by in every other command. Lowercase, no spaces. template can be Blank or Staff application (a pre-built starting point, still fully editable).

Add questions​

/formadmin addquestion form: staff-app type: "Short text"

This opens a modal, Discord's own pop-up form, not a follow-up message, for the question itself:

BoxWhat goes in it
QuestionThe label shown above the answer box (45 characters, Discord's own limit)
Help textOptional, shown under the label (100 characters)
Required?yes / no, defaults to yes
OptionsChoice types only. One option per line
RulesOptional validation, see below. E.g. minWords=40, max=10

type is one of:

TypeValueWhat it collects
Short textTEXT_SHORTA single line
Long textTEXT_LONGA paragraph box
NumberNUMBERDigits. Commas are stripped, so 1,000 and 1000 both work
EmailEMAILValidated as name@domain.tld
LinkURLMust start with http:// or https://
DateDATETyped as YYYY-MM-DD
Pick oneSINGLE_CHOICEOne of the listed options
Pick severalMULTI_CHOICEAny number of the listed options
Yes / noBOOLEANA true/false toggle
AgreementCONSENTLike Yes/no, but if it's required the answer must be "yes". A blank or "no" blocks submission
File uploadFILEAn attachment
Pick a memberUSER_SELECTAnyone in the server
Pick a roleROLE_SELECTAny role in the server
Pick a channelCHANNEL_SELECTAny channel in the server

The key is generated from the question, not typed. "Subject Roblox Username" becomes the key subject_roblox_username, truncated to 24 characters; a clash gets _2, _3, and so on appended. Keys are what /formadmin removequestion and the CSV/JSON export headers use, so if you need a specific one, check /formadmin show after adding the question rather than guessing from the label.

Validation rules​

The Rules box takes comma-separated name=value pairs. Which names do anything depends on the question's type:

TypeRulesExample
Short/long textminLength, maxLength, minWords, maxWords, regexminWords=40, maxLength=2000
Numbermin, max, integer=truemin=1, max=168, integer=true
DatenotBefore, notAfter (both YYYY-MM-DD)notBefore=2026-01-01
LinkallowedDomainsnot settable from the modal. Template/JSON only
Pick severalminSelections, maxSelectionsminSelections=1, maxSelections=3
File uploadminFiles, maxFilesmaxFiles=3

A rule that doesn't apply to the question's type is silently ignored rather than erroring. /formadmin check won't flag a stray minWords on a Number question, it just never fires. The error a member sees names the field in plain language ("Describe your relevant experience needs at least 40 words (you wrote 12)"), never the rule name itself.

Long text has a hidden Discord ceiling: the biggest a text box can hold is 4000 characters, no matter what maxLength says.

By default the question goes on the form's first page. To organise a longer form into pages:

/formadmin addpage form: staff-app title: "Background"

Then add questions to it with page: page2 (page keys are page1, page2, … in creation order. /formadmin show lists them). A "page" here is a logical grouping, not necessarily one screen: Discord modals hold at most 5 fields, so a page with more than 5 questions is automatically split into Background (1/2), Background (2/2) and so on when a member fills it in.

Check it​

/formadmin check form: staff-app

Tells you what's blocking publish. Usually a page with no questions, or a choice question with no options.

Preview it​

/formadmin preview form: staff-app

Runs the form exactly as a member would see it, without creating a real submission.

Publish it​

/formadmin publish form: staff-app

Publishing takes a snapshot. Anyone mid-application keeps the version of the form they started on. Editing a published form later, or even adding/removing questions, never rewrites what's underneath someone halfway through. /formadmin check has to pass clean first.

Post the panel​

/formadmin panel form: staff-app name: main channel: #applications title: "Join the Staff Team" description: "..." button: "Apply now"

channel defaults to wherever you run the command. The form has to be published first. Panel refuses a draft.

That's a complete form: created, questioned, paged if needed, checked, published, and live behind a button.

A worked example, start to finish​

Building a real staff application. Three pages, five questions, two of them validated. Using the exact commands above:

/formadmin create key: staff-app name: "Staff Application" template: Blank
/formadmin addpage form: staff-app title: "About you"

addpage gives back the new page's key. Page2 here, since the form already has page1 from creation. Add the region question to it:

/formadmin addquestion form: staff-app type: "Pick one" page: page2

Question: Which region are you in? · Required: yes · Options:

Americas
Europe or Africa
Asia or Oceania

And a commitment question on the same page, this time with a rule:

/formadmin addquestion form: staff-app type: Number page: page2

Question: Hours per week you can commit · Required: yes · Rules: min=1, max=168, integer=true

A member typing 40.5 gets "Hours per week you can commit must be a whole number.". That's the integer=true rule speaking in plain language, not a schema error.

Add a third page for the write-up questions:

/formadmin addpage form: staff-app title: "Experience"
/formadmin addquestion form: staff-app type: "Long text" page: page3

Question: Describe your relevant experience · Help text: Around 40 words or more. · Required: yes · Rules: minWords=40, maxLength=2000

Someone who writes twelve words sees "Describe your relevant experience needs at least 40 words (you wrote 12)" and keeps everything else they already answered. A failed question never wipes a page.

Close with an agreement page:

/formadmin addpage form: staff-app title: "Confirm"
/formadmin addquestion form: staff-app type: Agreement page: page4

Question: I confirm the above is accurate · Required: yes

Then check, preview, publish, and post it, exactly as in the steps above.

This is what template: "Staff application" builds for you automatically — region, hours, experience, a scenario question, and the agreement, already wired with those same rules. Reach for the template unless you specifically want fewer or different questions; reach for Blank when you don't.

Managing forms afterward​

CommandWhat it does
/formadmin listEvery form and its state
/formadmin show <form>Its pages and questions
/formadmin removequestion <form> <key>Remove one question (key shown in show)
/formadmin pause <form>Stop taking new responses; drafts in progress stay saved
/formadmin resume <form>Let a paused form take responses again
/formadmin panelsEvery panel and whether its message is still healthy
/formadmin delete <form> confirm: <exact name>Retire a form. Responses are kept, it just disappears everywhere. Confirm by typing the form's exact display name, on purpose: a typo shouldn't be able to take out an application history.
/formadmin purge confirm: <exact name>Irreversibly destroy a deleted form and every response to it

Filling one in (member side)​

/form open form: staff-app

Or press the panel button. The form runs privately, one page at a time.

You can leave and come back. Progress is saved as you go:

CommandWhat it does
/form resumeContinue a form you started earlier
/form status receipt: <code>Look up a submission you made, by the receipt code you were given
/form withdrawDiscard a form you have not submitted yet

If a form refuses to open, it says why in one sentence: a role you need but don't hold, a role you hold that isn't allowed to use it, or a cooldown with how long is left.

Setting up review​

Turn review on and a card appears in a channel of your choice for every new submission, with a reviewer role pinged if you set one. Staff claim it, accept or deny it with a reason, and the applicant hears back automatically.

/formadmin review form: staff-app channel: #staff-applications reviewer_role: @Staff

Review stays off until you set a channel. Run the command again with turn_off: true to switch it back off.

Set which roles a decision hands out:

/formadmin review-roles form: staff-app outcome: Accept add: @Staff remove: @Applicant
/formadmin review-roles form: staff-app outcome: Deny remove: @Applicant

add and remove each take role mentions or ids, space or comma separated. Leave one blank to clear it. A role can never be both added and removed on the same outcome.

Chancery will refuse to touch some roles no matter what you set here. A role has to sit below Chancery's own highest role, and it can never carry Administrator, Manage Server, Manage Roles, Ban Members or Kick Members. Run /intake health after setting this up: it flags a role you configured that sits above Chancery's, and a review channel that @everyone can already see.

You can also build all of this from the Chancery dashboard's form builder, in its Review section: the same channel, role, and add/remove pickers, saved to the same form.

Who may apply​

/formadmin eligibility form: staff-app required: @Verified blocked: @Banned-from-applying

required limits the form to people holding one of those roles. blocked refuses anyone holding one of these, regardless of anything else. Leave either blank to clear it.

A repeat cooldown​

/formadmin review form: staff-app cooldown_days: 30

Setting a cooldown switches "how often one person may send this" to "again, after waiting a while." Someone who applies again before the wait is up sees how many days are left.

Deciding an application​

The review card shows the applicant, when they applied, their receipt, and every answer. Three buttons sit under it:

ButtonWhat it does
ClaimMarks the case as yours, so two reviewers don't work it at once. Anyone with the reviewer role or admin can still accept or deny without claiming first.
AcceptOpens a box for a reason, then records the decision, DMs the applicant, and runs the role changes you configured.
DenySame as Accept, with deny's own reason and role changes.

The decision always sticks, even when a role change fails. Say a role you configured to add on accept gets moved above Chancery's own role. The acceptance is still recorded and the applicant still hears about it: the card just says which role change failed and why, with a Retry button that only re-runs what's still broken. Fix the role order, press Retry, and it finishes. Pressing Accept twice, or Discord redelivering the same button press, never records a second decision or hands out a role twice.

If the applicant has DMs closed, the card says the DM failed rather than hiding it.

Only the reviewer role and admins can press these buttons. Anyone else gets a private refusal, and the card itself doesn't change.

Reading responses afterward​

/formadmin responses form: staff-app

Shows the 15 most recent: who submitted, their status, and when. For the full answers, including the outcome, who decided it, and when:

/formadmin export form: staff-app format: CSV

format is CSV (spreadsheet) or JSON (full detail). The export always uses the version each respondent actually answered, so column labels match what they saw, even if the form has changed since.

Answers are frozen at submission time. Ranks change and people leave groups. A queue that re-checked identity on opening would quietly rewrite its own history, so responses show things as they were when submitted, not now.

Diagnostics​

/intake health

Bot-owner diagnostic: checks whether intake can actually do what it's being asked to (permissions, config) in this server.

/intake audit

Recent intake configuration changes and case events, who created, published, or deleted what, and when.

It's not working​

When you are stuck

"This feature is not enabled in this server."

intake is off. Ask the bot owner to run /moduleadmin enable module: Forms and applications.

"Cannot publish. N problem(s)"

Run /formadmin check to see exactly what. Usually a page with no questions.

"Publish the form before putting a panel up for it."

/formadmin panel only works on a published form. Run /formadmin publish first.

People can't see the panel button

Check they can see the channel, and that the bot has View Channel and Send Messages there. /formadmin panel refuses to post if the bot itself can't.

I edited a form and someone's application looks old

Working as intended. They keep the version they started on. See step 5 above.

"That did not match." when deleting a form

/formadmin delete needs confirm to be the form's exact display name, not its key. /formadmin show has the name if you're not sure.

No review card showed up for a submission

Check /formadmin review form: <key> shows a channel. Review stays off until one is set. If a channel is set, check Chancery can still see and post in it.

A card says a role change failed

Read the reason on the card. Most often the role now sits above Chancery's own highest role, or someone gave it Administrator, Manage Server, Manage Roles, Ban Members or Kick Members after it was configured here. Fix the role, then press Retry on the card.

Someone with the reviewer role can't press the card's buttons

Check /formadmin review form: <key> shows the role you expect. Only that role and admins can act on a card.