Skip to Content
Haven Documentation is the shared home for product guides, plugin setup, and release docs.

Staff Handbook Configuration

When dashboard-backed configuration is enabled, use the dashboard first because live settings may be stored in MongoDB instead of reading only local JSON5 files.

Config Files

  • Main config: configuration/staff_handbook.json5
  • Content config: configuration/staff_handbook_content.json5
  • Language config: configuration/staff_handbook_lang.json5
  • Plugin entry: plugins/staff_handbook/main.js

Main Fields

FieldTypeDefault / Template ValueNotes
enabledbooleantrueTurns the command and interactions on or off.
response.ephemeralbooleantrueShows handbook replies only to the member who opened them.
command.categorystringmanagementAthena help category for /handbook.
ui.embed_colorstring#d7263dSix-digit hex color used for embeds.
ui.show_timestampbooleantrueAdds a timestamp to handbook embeds.
ui.max_visible_optionsinteger20Categories or situations shown per menu page. Allowed range: 1-25.
ui.button_styles.main_menustringPrimaryMain Menu button style.
ui.button_styles.backstringSecondaryBack button style.
ui.button_styles.previousstringSecondaryPrevious button style.
ui.button_styles.nextstringSecondaryNext button style.
access.allowed_role_idsarray[]Roles allowed to open the handbook.
access.allowed_user_idsarray[]Users allowed to open the handbook.
access.senior_role_idsarray[]Roles allowed to view senior-only items.
access.senior_user_idsarray[]Users allowed to view senior-only items.
search.enabledbooleantrueAdds the optional search argument.
search.max_resultsinteger25Maximum displayed search results. Allowed range: 1-25.
search.max_query_lengthinteger100Maximum search length. Allowed range: 1-100.
permissions.handbook_commandstringmemberAthena permission level for the slash command.
permissions.handbook_componentsstringmemberAthena permission level for menus and buttons.

Button styles must be Primary, Secondary, Success, or Danger.

Content Structure

staff_handbook_content.json5 contains a categories array. Each category has its own pages array.

{ config: { categories: [ { id: "player_reports", label: "Player Reports", description: "Review and resolve player reports.", senior_only: false, required_role_ids: [], required_user_ids: [], pages: [ { id: "first_response", label: "First Response", description: "Handle a new report.", title: "Player Report First Response", summary: "Collect the facts and keep the case private.", senior_only: false, required_role_ids: [], required_user_ids: [], steps: [ "Ask for the player name, time, and evidence." ], action_guidance: [ "Escalate threats or active exploits to senior staff." ], evidence_requirements: [ "Screenshots, clips, logs, or message links." ], notes: [ "Keep sensitive reports in staff channels." ], links: [ { label: "Server Rules", url: "https://example.com/rules" } ] } ] } ] } }

Required Category Fields

FieldNotes
id1-40 letters, numbers, underscores, or hyphens. Must be unique.
labelCategory name shown in the embed and select menu.
descriptionShort category explanation.
pagesArray containing one or more valid pages.

Required Page Fields

FieldNotes
id1-40 letters, numbers, underscores, or hyphens. Must be unique inside the category.
labelShort select-menu label.
titlePage embed title.
summary or descriptionPage introduction. At least one must contain text.
stepsArray of steps. Use [] when the section is not needed.
action_guidanceArray of punishment or action guidance.
evidence_requirementsArray of evidence requirements.
notesArray of notes.

links is optional. Each link needs a label and an http:// or https:// URL. senior_only, required_role_ids, and required_user_ids are optional on both categories and pages.

Discord limits select menus to 25 options and embed fields to 1,024 characters. The plugin paginates menus and trims long rendered fields, but short, focused pages remain easier for staff to use.

Language Config

Use staff_handbook_lang.json5 to change:

  • The command, description, and search option wording
  • Error and access messages
  • Embed titles and field labels
  • Menu placeholders and navigation button labels
  • Category, situation, and page count labels

The templates accept {query}, {count}, {current}, and {total} where the matching message or label uses those values. AthenaBot also resolves configured custom emoji names.