Tickets¶
Coming soon
Tickets aren't released yet. This page describes a feature that's on its way, so the commands below don't work in your server yet.
Tickets give your members a private line to your moderation team. Members use them to report another member's behavior, appeal a punishment, or ask for support. Your team keeps track of every ticket's status, assigns it to someone, replies to the member, and leaves internal notes that only staff can see.
Tickets work in Discord and on the Bernard dashboard. Both show the same queue, so your team can use whichever it prefers. If you like, each ticket can also get its own private thread in your server; see Ticket Threads.
Turning Tickets On¶
Tickets are off until a server turns them on. Anyone with the CONFIG_CHANGES administrative capability can do this, in either of these places:
- Discord: run
/tickets settings enabled:True staff_channel:#mod-queue. - Dashboard: open your server, go to Tickets, then Ticket settings.
A staff channel is required to turn tickets on, because that's where Bernard announces new tickets to your team. A ticket thread channel is optional and doesn't replace the staff channel.
The settings are:
| Setting | What it does |
|---|---|
| Accept new tickets | Whether members can open tickets. Existing tickets stay available to your team either way. |
| Accepted kinds | Which kinds members can open: reports, appeals, and support requests. All three are accepted by default. |
| Anonymous staff | Which kinds hide your team's identities from the member. Only appeals are anonymous by default. See Anonymous Staff. |
| Staff channel | Where Bernard announces new tickets and replies from members. Required to accept tickets. Mentions in these announcements never ping anyone. |
| Ticket thread channel | Optional. Where each new ticket gets a private thread. Leave it empty to keep tickets out of your channels. See Ticket Threads. |
Who Can Work Tickets¶
Working the queue requires the MANAGE_TICKETS administrative capability. Server owners and members with Discord's Administrator permission always have it. Give it to your moderator roles with:
!role capability add @Moderators MANAGE_TICKETS
By default, Discord only shows /tickets to members with the Timeout Members permission. To show it to other roles (or hide it from some), go to Server Settings → Integrations → Bernard and change who can use /tickets. Members still need MANAGE_TICKETS to use it.
On the dashboard, anyone who can manage the server can work its tickets.
Opening a Ticket (Members)¶
Any member can open a ticket in a server that accepts them:
/ticket openopens a form. Choose Report a member, Appeal a punishment, or Ask the staff for help. For reports, you can also pick the member you're reporting.- Report message is an app command. Right-click a message (or long-press it on mobile), choose Apps, then Report message. Bernard fills in who you're reporting and attaches a link to the message plus a copy of what it said. The copy stays with the report even if the message is later edited or deleted.
Everything is private. Only you and the server's staff can see your ticket.
If the server uses ticket threads, Bernard may add you to a private thread for your ticket; just talk with the staff there. Otherwise, staff replies reach you as a direct message from Bernard, and you can answer by replying to that message. Use Discord's Reply on Bernard's message: other direct messages to Bernard aren't added to your ticket. To follow up:
/ticket listshows your tickets in the server./ticket view number:12shows ticket #12 and its conversation./ticket reply number:12sends the staff a reply.
You can also follow and reply to all your tickets from My tickets on the dashboard.
A member can have up to three unresolved tickets in a server at a time.
Appealing After a Ban¶
A member who is banned can't use a server's commands anymore, so appeals also work from the dashboard. Share this link in your ban message, with your server's ID in place of SERVER_ID:
https://getbernard.io/tickets/new/SERVER_ID?kind=appeal
The member signs in with Discord and opens their appeal there. It lands in the same queue as every other ticket. Discord only lets Bernard send direct messages to people who share a server with it, so a member banned from their only shared server follows their appeal on the dashboard instead.
Working the Queue (Staff)¶
| Command | What it does |
|---|---|
/tickets queue |
Lists tickets, newest first. By default it shows active tickets (open, in progress, or waiting on the reporter). Filter by status, or by Me / Unassigned. |
/tickets view number:12 |
Shows ticket #12 with its full history, including internal notes. |
/tickets assign number:12 [member] |
Assigns the ticket to a member, or to you if you leave member empty. Assigning an open ticket moves it to In progress. |
/tickets unassign number:12 |
Removes the assignee. |
/tickets status number:12 status:Resolved |
Changes the status. The member is told by DM. |
/tickets reply number:12 |
Replies to the member (by DM). Set internal:True to write an internal note instead. Set status to change the status in the same step. |
/tickets settings |
Shows or changes the server's ticket settings (requires CONFIG_CHANGES). |
The dashboard's Tickets tab has the same queue, with filters by status, assignee, and kind. Open a ticket there to see its history, change its status, assign it, or reply.
Statuses¶
| Status | Meaning |
|---|---|
| Open | New, and nobody has picked it up yet. |
| In progress | Someone on staff is working on it. |
| Waiting on reporter | Staff asked the member something. When the member replies, the ticket moves back to open (or to in progress if it's assigned). |
| Resolved | Handled. |
| Closed | Closed without further action. |
Members can't reply to resolved or closed tickets; they open a new ticket instead. Staff can reopen a ticket by changing its status.
Anonymous Staff¶
Some teams don't want members to know who handled their ticket. Appeals are the usual case. For each kind of ticket, you choose whether your team is anonymous:
- The member sees Staff instead of the name of whoever replied, changed the status, or is assigned.
- Your team always sees who did what.
Bernard saves this choice on each ticket when it opens. If you change the setting later, older tickets keep their original setting, so changing it never reveals who handled an earlier ticket.
Whatever the setting, members never see internal notes, assignment changes, or anyone's Discord ID.
Ticket Threads¶
Set a ticket thread channel (/tickets settings thread_channel:#tickets, or Ticket settings on the dashboard) and every new ticket gets its own private thread there. The thread and the ticket stay in sync: messages posted in the thread show up on the ticket in the dashboard, and anything written on the dashboard or with commands is posted in the thread.
Who is in the thread depends on the ticket:
- The reporter joins the thread when your team isn't anonymous for that kind of ticket (reports and support requests, by default). Everything posted in the thread is shared with them, including screenshots and other files. For notes only staff can see, use
/tickets reply internal:Trueor the dashboard's internal note option; those never appear in the thread. - The thread is staff-only when your team is anonymous for that kind of ticket (appeals, by default), or when the reporter can't be added (for example, because they're banned). Messages posted there are internal notes. Answer the reporter with
/tickets reply: they get your message by DM, signed "Staff" on anonymous tickets, and their replies to that DM, including attachments, are posted into the thread.
Inside a ticket's thread, /tickets commands work without a ticket number. Resolving or closing a ticket locks its thread; reopening the ticket unlocks it. Assigning a ticket adds the assignee to its thread.
When someone edits or deletes a message, the ticket is updated to match. Staff can still read a deleted message on the dashboard, marked as deleted, so evidence isn't lost. The reporter just sees that the message was deleted.
Setting Up the Thread Channel¶
- Create a text channel, for example
#tickets. - Let members view the channel, but turn off their Send Messages and Create Public/Private Threads permissions there. They only need to see the channel to take part in their own ticket's thread, and they can't see anyone else's.
- Give your staff Manage Threads in the channel so they can see every ticket's thread.
- Make sure Bernard has Create Private Threads, Send Messages in Threads, Manage Threads, and Attach Files in the channel.
Changing the thread channel only affects new tickets. Threads for earlier tickets stay where they are and keep syncing.
If Bernard can't create a thread (usually because of a missing permission), the ticket still opens without one, and the problem is shown in /tickets settings and on the dashboard's ticket settings page.