Documentation

Setup, permissions, commands, feature behavior and logging.

Getting started with Opal

Opal is a hosted Discord bot for staff management and day-to-day staff operations. After adding Opal to a server, configuration is handled through Discord with /setup.

1. Add Opal

Use the official Opal installation link and select the server where you want to use it. The person installing the app needs Discord Manage Server permission.

Opal should have:

  • View Channels
  • Send Messages
  • Embed Links
  • Manage Roles

Manage Roles is required for staff-role changes and verification.

2. Place the Opal role correctly

Discord only lets a bot manage roles below its highest role. A typical hierarchy is:

Owner
Opal
Management
Senior Staff
Moderator
Trial Staff
Verified
@everyone

Opal only needs to sit above roles it must assign or remove.

3. Run /setup

/setup requires Discord Manage Server and opens a private configuration panel.

The main sections are:

  • Access — staff and management roles
  • Features — enable or disable Opal workflows
  • Logging — choose audit-log destinations
  • General — timezone, terminology, coverage target
  • Leave requests — configure the request/review channel and leave log
  • Verification — configure and publish the verification panel

4. Configure Access

Staff roles

Select every Discord role that represents a staff position Opal may assign or use for promotions/demotions.

Example:

Trial Moderator
Moderator
Senior Moderator
Support

Management roles

Select roles that should be able to use Opal's management commands. Discord Administrator and Manage Server also grant management access.

/setup itself always requires native Manage Server permission.

5. Choose features

Opal's operational features can be enabled independently:

  • Staff directory
  • Internal notes
  • Staff warnings
  • User reviews
  • Staff availability
  • Coverage scheduling
  • Leave requests
  • Management analytics
  • Verification

Disable workflows your team does not use.

6. Configure logging

Logging categories can be routed independently:

  • Staff changes
  • Notes & warnings
  • Reviews
  • Scheduling
  • Leave requests
  • Bot access
  • Configuration
  • Verification

Opal needs View Channel, Send Messages, and Embed Links in configured log channels.

7. Configure leave requests

Open /setupLeave requests.

Choose:

  • Primary channel — receives the detailed request card with Accept and Deny buttons.
  • Log channel — receives compact request and decision audit messages.

When management presses Accept or Deny, Opal opens a modal and requires a decision reason. The detailed request message is updated with the final decision.

8. Configure verification (optional)

Open /setupVerification and choose:

  • verification channel;
  • role to grant;
  • panel title/body/button label.

Publish the panel when ready. Members press Verify and Opal assigns the configured role.

9. Add staff

Use:

/staff add member:@Alex role:@Moderator

10. Manage the staff lifecycle

Use:

/staff promote
/staff demote
/staff remove

Promotion/demotion changes the tracked Discord role and staff position together. Removal records the departure date and changes the position to Former-Staff.

11. Reviews

Members can submit one review for each eligible staff member. Reviewers cannot edit or delete their own review. If management deletes the review, that does not open a new submission slot for the same reviewer/staff pair.

Management can permanently remove an inappropriate review with:

/reviews delete member:@Staff review_id:3

If a member abuses reviews or another user-facing Opal feature, use /access ban to restrict their access.

12. Availability and leave

Staff can submit recurring weekly availability and leave requests. Management can:

  • view one staff member's availability with /availability staff;
  • view coverage with /schedule coverage;
  • approve or deny leave directly from the leave-request message.

13. Support

Use /opal-about for Opal's public links, including the official support Discord when configured.

Configuration

All normal configuration is handled through /setup.

Access

Staff roles

Choose the Discord roles Opal may use as staff positions. These roles are used by:

  • /staff add
  • /staff promote
  • /staff demote
  • staff recognition for applicable features

Opal validates role hierarchy and assignability when roles are configured and again when role-changing commands run.

If a configured staff role is deleted, Opal removes it from configuration automatically. Historical staff records are preserved.

Management roles

Configured management roles can use management-only Opal commands. Discord Administrator and Manage Server also grant management access.

/setup itself requires Discord Manage Server.

Features

The feature panel controls:

Feature Controls
Staff directory /staff ...
Internal notes /notes ...
Staff warnings /warnings ...
User reviews /reviews ...
Staff availability /availability ...
Coverage scheduling /schedule coverage
Leave requests /leave ... and leave decision buttons
Management analytics /analytics
Verification Verification panel/button

Disabling a feature blocks its workflow without deleting existing records.

Logging

Each audit category can be disabled or routed to a selected channel:

Category Typical events
Staff changes add/remove/promote/demote
Notes & warnings note/warning changes
Reviews submissions and management deletions
Scheduling availability changes
Leave requests submissions and decisions
Bot access /access changes and /wipe
Configuration /setup changes
Verification successful verifications

General

Timezone

Used for scheduling and automatic leave-status handling.

Minimum coverage

Sets the target used by /schedule coverage.

Terminology

Changes selected display wording. It does not rename slash commands or alter permissions.

Leave requests

The Leave requests setup panel has two destinations:

Primary channel

Detailed leave requests are posted here with Accept and Deny buttons. Management must provide a reason for either decision.

Log channel

Compact leave-submission and leave-decision events are sent here.

The primary channel is required before staff can submit leave requests.

Verification

Configure:

  • channel;
  • role;
  • title;
  • message body;
  • button label.

Supported message placeholders:

{server}  Discord server name
{role}    configured verification role
{button}  configured button label

Publishing the panel enables Verification. Opal must have Manage Roles and its role must be above the verification role.

If the configured verification role or channel is deleted, Opal clears the stale configuration and disables Verification until it is configured again.

Permissions

Access levels

Manage Server

Native Discord Manage Server permission. Required for /setup.

Management

A member has Opal Management access when any of these is true:

  • Discord Administrator;
  • Discord Manage Server;
  • they have a role configured under /setup → Access → Management roles.

Tracked staff

A member with a current Opal staff-directory record. Used for staff self-service workflows such as availability and leave requests.

Member

A normal server member. User-facing feature switches and /access restrictions still apply.

Command permission matrix

Command Access Feature
/setup Manage Server Always available
/opal-about Member Always available
/access ban Management Always available
/access unban Management Always available
/access status Management Always available
/access list Management Always available
/wipe Management Always available
/staff add Management Staff directory
/staff remove Management Staff directory
/staff promote Management Staff directory
/staff demote Management Staff directory
/staff profile Management Staff directory
/staff list Management Staff directory
/staff history Management Staff directory
/notes add Management Internal notes
/notes list Management Internal notes
/notes delete Management Internal notes
/warnings issue Management Staff warnings
/warnings list Management Staff warnings
/warnings revoke Management Staff warnings
/reviews submit Member User reviews
/reviews staff Member User reviews
/reviews mine Member User reviews
/reviews delete Management User reviews
/availability add Tracked staff Staff availability
/availability clear Tracked staff Staff availability
/availability mine Tracked staff Staff availability
/availability staff Management Staff availability
/schedule coverage Management Coverage scheduling
/leave request Tracked staff Leave requests
/leave mine Tracked staff Leave requests
/analytics Management Management analytics

/access restrictions

Management can restrict user-facing Opal features with /access ban.

Supported scopes:

  • all
  • user_reviews
  • availability
  • leave
  • verification

Management users cannot be restricted until their management access is removed.

Discord bot permissions

Opal normally needs:

  • View Channels
  • Send Messages
  • Embed Links
  • Manage Roles

Manage Roles is needed for staff roles and verification. Opal can only manage roles below its highest Discord role.

Complete command reference

This page documents every public slash command in Opal.

Access labels

  • Manage Server — Discord's native Manage Server permission.
  • Management — Discord Administrator, Discord Manage Server, or a configured Opal Management role.
  • Tracked staff — member with a current Opal staff record.
  • Member — normal server member; enabled features and access restrictions still apply.

Core

/setup

Access Manage ServerFeature Always available

Opens the interactive configuration dashboard.

/setup

Use it to configure Access, Features, Logging, General settings, Leave requests, and Verification.

/opal-about

Access MemberFeature Always available

Shows a short explanation of Opal and any configured public links.

/opal-about

Bot access

/access ban

Access ManagementFeature Always available

Restricts a member from selected user-facing Opal features.

Argument Required Description
member Yes Member to restrict
scope No all, user_reviews, availability, leave, or verification; defaults to all
reason No Internal reason
/access ban member:@User scope:user_reviews reason:"Repeated review abuse"

Bots, the caller, and current Opal managers cannot be restricted.

/access unban

Access ManagementFeature Always available

Removes an Opal access restriction.

Argument Required Description
member Yes Member whose access should be restored
scope No Scope to restore; defaults to all

/access status

Access ManagementFeature Always available

Shows one member's active Opal restrictions, who created them, and any recorded reason.

Argument Required Description
member Yes Member to inspect

/access list

Access ManagementFeature Always available

Shows recent active Opal access restrictions.

/wipe

Access ManagementFeature Always available

Permanently removes Opal-held data tied to a selected user after a confirmation modal.

Argument Required Description
user Yes User whose Opal data should be wiped

The confirmation modal requires the exact word WIPE and optionally accepts an internal reason.

The wipe removes the user's staff profile and owned staff records, reviews they wrote or received, availability, leave requests, access restrictions, and record counters. Manager/actor references on unrelated records are anonymized where needed.

Discord roles and historical Discord messages are not modified.


Staff directory

/staff add

Access ManagementFeature Staff directory

Adds or re-adds a staff member and assigns a configured staff role.

Argument Required Description
member Yes Member to add
role Yes Configured Staff role to assign
/staff add member:@Alex role:@Moderator

New staff members start as Active. Approved leave temporarily changes the displayed status to Leave for the approved dates.

/staff remove

Access ManagementFeature Staff directory

Removes the tracked staff role when possible and marks the member as former staff.

Argument Required Description
member Yes Staff member to remove
reason No Removal or resignation reason

The departure date is recorded and the displayed position becomes Former-Staff.

/staff promote

Access ManagementFeature Staff directory

Moves a staff member to a higher configured Staff role.

Argument Required Description
member Yes Staff member
role Yes Higher configured Staff role

Role direction is determined by Discord's role hierarchy.

/staff demote

Access ManagementFeature Staff directory

Moves a staff member to a lower configured Staff role.

Argument Required Description
member Yes Staff member
role Yes Lower configured Staff role

/staff profile

Access ManagementFeature Staff directory

Opens a navigable staff profile with employment information and links to Notes, Warnings, Reviews, and History when those features are enabled.

Argument Required Description
member Yes Staff member to view

The status is reconciled before display so current approved leave is reflected automatically.

/staff list

Access ManagementFeature Staff directory

Lists tracked staff grouped by status.

Argument Required Description
include_former No Include former-staff records

/staff history

Access ManagementFeature Staff directory

Shows recent staff lifecycle and record-history events.

Argument Required Description
member Yes Staff member to inspect

Internal notes

/notes add

Access ManagementFeature Internal notes

Opens a modal to add a private management note to a staff member.

Argument Required Description
member Yes Staff member

The created note receives the next note ID for that staff member.

/notes list

Access ManagementFeature Internal notes

Shows recent notes and their IDs.

Argument Required Description
member Yes Staff member

/notes delete

Access ManagementFeature Internal notes

Permanently deletes a note. Both the staff member and note ID are required.

Argument Required Description
member Yes Staff member the note belongs to
note_id Yes Note ID shown by Opal
/notes delete member:@Alex note_id:3

Deleted note IDs are not reused.


Staff warnings

/warnings issue

Access ManagementFeature Staff warnings

Opens a modal to issue a warning.

Argument Required Description
member Yes Staff member to warn
severity Yes low, medium, high, or critical

The warning reason is entered in the modal and the warning receives the next warning ID for that staff member.

/warnings list

Access ManagementFeature Staff warnings

Shows warnings recorded for one staff member.

Argument Required Description
member Yes Staff member
active_only No Show only active warnings

/warnings revoke

Access ManagementFeature Staff warnings

Revokes an active warning. Both the staff member and warning ID are required. A modal allows management to record a revocation reason.

Argument Required Description
member Yes Staff member the warning belongs to
warning_id Yes Warning ID shown by Opal
/warnings revoke member:@Alex warning_id:2

User reviews

/reviews submit

Access MemberFeature User reviews

Opens a modal to submit a 1–5 rating and feedback for an eligible staff member.

Argument Required Description
member Yes Staff member to review

A reviewer can submit only one review for a particular staff member and cannot edit or delete it themselves. A management deletion removes the review content but does not reopen that reviewer's submission slot.

/reviews staff

Access MemberFeature User reviews

Shows the average rating and recent reviews for one staff member.

Argument Required Description
member Yes Staff member

/reviews mine

Access MemberFeature User reviews

Shows reviews submitted by the caller.

/reviews delete

Access ManagementFeature User reviews

Permanently deletes a review. Both the staff member and review ID are required. The reviewer still cannot submit a replacement review for that staff member.

Argument Required Description
member Yes Staff member the review belongs to
review_id Yes Review ID shown for that staff member
/reviews delete member:@Alex review_id:4

If a reviewer is abusing the feature, management can combine deletion with /access ban.


Availability and scheduling

/availability add

Access Tracked staffFeature Staff availability

Adds one recurring weekly availability window.

Argument Required Description
weekday Yes Monday–Sunday
start Yes Start time in HH:MM
end Yes End time in HH:MM

Overlapping windows are rejected.

/availability clear

Access Tracked staffFeature Staff availability

Clears the caller's availability for one weekday or the whole week.

Argument Required Description
weekday No Day to clear; omit to clear the entire week

/availability mine

Access Tracked staffFeature Staff availability

Shows the caller's recurring weekly availability.

/availability staff

Access ManagementFeature Staff availability

Shows one staff member's recurring weekly availability.

Argument Required Description
member Yes Staff member to view

Former staff cannot be used for this view.

/schedule coverage

Access ManagementFeature Coverage scheduling

Shows availability coverage for a selected weekday against the configured minimum staffing target.

Argument Required Description
weekday Yes Monday–Sunday

Leave requests

/leave request

Access Tracked staffFeature Leave requests

Submits a leave request to management.

Argument Required Description
start_date Yes YYYY-MM-DD
end_date Yes YYYY-MM-DD
reason Yes Reason for the request

The primary leave-request channel must be configured in /setup first.

After submission, Opal posts a detailed request card to that channel with Accept and Deny buttons. Management presses a button and must provide a reason before the decision is stored.

Approved leave automatically changes the staff member's status to Leave during the approved dates.

/leave mine

Access Tracked staffFeature Leave requests

Shows the caller's recent leave requests, IDs, dates, reasons, and current decision status.

Management decisions are handled from the request message itself.


Analytics

/analytics

Access ManagementFeature Management analytics

Shows a compact management snapshot based on enabled features, including staff statuses, warnings, recent notes/reviews, pending leave, and active Opal access restrictions.

Feature guide

Staff directory

Staff records track:

  • current role-backed position;
  • status;
  • join date;
  • departure date for former staff;
  • notes;
  • warnings;
  • user reviews;
  • staff history.

Staff roles, promotions and demotions

/staff add assigns a configured staff role. /staff promote and /staff demote replace the tracked staff role and update the stored position/history together.

/staff remove removes the tracked role when possible, records the departure date, and sets the position to Former-Staff.

Internal notes

Notes are private management records. Each staff member has their own note numbering:

Alex: Note #1, #2, #3
Jordan: Note #1, #2

This is why destructive commands use both the staff member and note ID:

/notes delete member:@Alex note_id:2

Deleted numbers are not reused.

Staff warnings

Warnings include:

  • warning ID;
  • severity;
  • reason;
  • issuer;
  • active/revoked state;
  • revocation information.

Warning numbering is tied to the staff member, so /warnings revoke requires the staff member and warning ID.

User reviews

Members can submit one 1–5 review for each eligible staff member.

Reviewer rules:

  • cannot review themselves;
  • cannot review bots;
  • can submit only one review for the same staff member;
  • cannot edit or delete their own review.

Review IDs are tied to the staff member. Management permanently deletes a review with:

/reviews delete member:@Staff review_id:4

If review access is abused, management can restrict the reviewer with /access ban.

Staff availability

Tracked staff can add recurring weekly windows with /availability add and view their own schedule with /availability mine.

Management can inspect one staff member directly with:

/availability staff member:@Staff

Coverage scheduling

/schedule coverage compares recurring availability against the configured minimum coverage target and highlights under-covered periods.

Leave requests

Staff submit leave with /leave request.

A request is posted to the configured primary leave channel with:

  • requester;
  • dates;
  • reason;
  • status;
  • Accept and Deny buttons.

Management presses a button and must enter a reason. The request message is then updated with the decision and decision reason. A compact event is also sent to the configured leave log channel.

Approved leave automatically controls the staff member's Leave status during the approved date range.

Management analytics

/analytics gives a compact view of staff statuses, warnings, notes, reviews, pending leave, and active Opal access restrictions according to enabled features.

Verification

Verification publishes a persistent button that grants a configured role. The message can be customized from /setup.

Access restrictions

/access ban can disable all user-facing Opal features for a member or only a selected workflow. This is useful for review spam, leave-request abuse, verification abuse, and similar behavior.

User data wipe

/wipe is a destructive Management-only command that removes Opal-held records tied to a selected user after an explicit WIPE confirmation.

It removes their staff record, reviews, availability, leave requests, access restrictions, and associated record counters, while anonymizing their manager/actor ID on unrelated records that must remain. It does not remove Discord roles or historical messages already posted in channels.

Logging

Logging is configured through /setupLogging, with an additional leave-specific shortcut under /setupLeave requests.

Categories

Category Events
Staff changes staff add/remove/promote/demote
Notes & warnings notes and warning changes
Reviews review submissions/deletions
Scheduling availability changes
Leave requests leave submissions and decisions
Bot access access bans/unbans and user wipes
Configuration setup/configuration changes
Verification successful verification events

Leave channels

Leave requests use two different channels when configured:

  • Primary leave channel — detailed request cards with Accept/Deny controls.
  • Leave log channel — compact audit entries for submissions and decisions.

Channel permissions

Opal needs these permissions in configured channels:

  • View Channel
  • Send Messages
  • Embed Links

If a configured log channel is deleted, Opal removes the stale route automatically. If the primary leave channel is deleted, Opal clears that setting and staff cannot submit new leave requests until management selects another channel.

Audit behavior

Audit logging is best-effort. A temporary failure to write an audit message does not roll back an otherwise successful staff-management action.