Safe Staff Docs Dashboard
Documentation

Everything Safe Staff can do

How to set the bot up and how each feature works, for server owners, admins and staff. Short on time? Read Getting started and you're ready to go.

Getting started

Setup takes about two minutes.

  1. Add the bot with the invite link. Keep the permissions it asks for: Manage Roles gives the On Leave role, and Manage Channels is only used if you ask it to create channels for you.
  2. Run /setup in your server. It walks you through five steps: staff ranks, LOA approvers, channels, the On Leave role and departments. You can skip any step and come back later.
  3. Drag the bot's role above your staff roles and the On Leave role in Server Settings → Roles. Discord only lets a bot give out roles that are below its own.
  4. Optional: pick your timezone with /settings timezone, and open the web dashboard to fine-tune everything else.

When the bot joins, it posts a welcome message with a Start setup button. The dashboard's Overview page has a setup checklist showing what's done and what still needs fixing, with a button to jump to each one.

Templates: on the Overview page, pick Roleplay server, Roblox group, Esports team or Community server to add a starter set of departments, a weekly activity quota for all staff, and task completion questions. A template only adds what's missing and never changes what you've set up.

Type /help in any server with the bot for a quick in-Discord guide to every command.

Staff ranks & profiles

Anyone with a role you mark as a staff rank is on your staff team. Each rank has a level: higher numbers are more senior. Levels decide who can give tasks to whom.

  • /staffrole add role level makes a role a staff rank, or changes its level. Add loa_approver:True to let that rank approve leave.
  • /staffrole remove role and /staffrole list manage your ranks.

Profile cards

Every staff member gets a profile card in your profiles channel. It shows their rank, staff join date, time on staff, active hours this week and last week, departments, leave status and open tasks. Cards update on their own every few minutes.

Cards are grouped by department, each under its own heading, with the highest rank first. Someone in several departments appears under the one they lead, otherwise their first department. Staff in no department come last under Other staff. When ranks or departments change, the channel is rearranged by editing the cards, so it stays in order without re-posting.

  • /staff profile [member] shows someone's profile, or your own.
  • /staff list shows the whole team by department, with rank headings and this week's hours.
  • /staff setjoined member date fixes someone's join date (Manage staff).
  • /staff refresh re-posts every card, sorted by rank (Manage staff).
Promotions keep join dates. If someone loses one staff role and gets another within 7 days, they keep their original join date.

Welcome DMs for new staff

When someone joins the staff team, a department or a leadership position, the bot sends them one DM with:

  • their rank and departments (with any leadership title)
  • the activity quota that applies to them, and when the current period ends. If they joined partway through a period, it won't count against them.
  • any open tasks given to a role they now have. Each person with the role has their own copy, so a new member gets one too, with the usual reminder buttons.

Joins that happen together, like getting a staff role that also puts them in two departments, come as one message. Setting up staff roles for the first time doesn't DM your whole team.

It's on by default. Turn it off on the dashboard's Server settings page or with /settings welcome enabled:False.

Activity hours

Hours are counted automatically from two things:

  • Voice: time in any voice channel except the AFK channel.
  • Chat: each message counts as 10 active minutes. Messages close together join into one session.

Time is never counted twice: chatting while in voice, or being in voice in two linked servers, counts once. Weeks run Monday to Sunday in your server's timezone.

Choosing what counts

Each server can change what counts, on the dashboard's Server settings page or with /settings activity:

  • Turn voice off so only chat activity counts: /settings activity voice:False.
  • Ignore channels, like a music or AFK-style lounge or a bot-commands channel: /settings activity ignore:#channel. Pick a category to ignore every channel in it, including threads.
  • Count a channel again: /settings activity count:#channel.

Changes apply from then on. Hours already counted stay. The AFK channel never counts.

Privacy: the bot only notes that a staff member sent a message. It never reads or stores what was said.

Leave of absence

  1. A staff member runs /loa request start end reason. Dates look like 2026-12-20, and end is their last day off.
  2. The request appears in your LOA channel with Approve and Deny buttons. Denying needs a reason, and nobody can review their own request.
  3. The member gets a DM with the decision.
  4. On the start date they get the On Leave role in every linked server. It's removed when the leave ends.
  • /loa end [member] ends leave early or cancels a request. Approvers can end anyone's leave.
  • /loa list shows who's on leave now, upcoming leave and pending requests.

People with the Approve LOAs permission, or a rank marked as an LOA approver, can approve requests. Change the role with /settings onleave-role.

Departments

Departments group your staff by area, like Moderation or Events. A staff member can be in several.

  • /department create and /department delete make or remove one (Manage departments).
  • /department add and /department remove change members by hand.
  • /department link name role connects a Discord role. Staff with that role join automatically and leave when they lose it.
  • /department taskchannel name channel gives the department its own task channel in this server.
  • /department list and /department view name show departments, members and open tasks.

Leadership positions

/department leadership name role position makes a role a leadership position, like Head or Co-Head (any title you like, up to 10 per department). Leaders:

  • are members of the department automatically, with their title on their profile card
  • can add and remove the department's members
  • can give department tasks to its members, even if they aren't ranked below them

Tasks

Give tasks to yourself, to staff ranked below you, or to a whole staff role below you. Admins with Manage tasks can assign to anyone.

Creating a task

/task create title due, plus these optional fields:

assignees@mention everyone it's for, people and roles together, like @Ben @Cara @Moderators. Leave it empty to assign yourself. People you @mention by name share one task. A role gives every staff member with it their own separate task, so each person checks off only their part.
due2026-11-20, 2026-11-20 18:00 (your server's timezone), or a length of time like 3d or 12h.
supervisorSomeone who checks the task off when it's submitted. See Supervisors & approvals.
detailsWhat needs doing.
departmentPosts the task in that department's task channel. Individual assignees must be in the department.
questionsQuestions to answer when finishing, split with |, like What did you do? | Link to proof. Up to 4.
startWhen the task starts, like 2026-11-20 09:00 or 2d. Leave it empty to start now. See Future tasks.
repeatDaily, weekly, every 2 weeks or monthly. See Recurring tasks.

Everyone assigned gets a DM with reminder buttons (1 hour before, 1 day before, or a custom time), and everyone is told if the task becomes overdue.

Managing tasks

  • /task edit id changes the title, due date, start date (future tasks only), details, department, supervisor, questions or repeat. Only the options you fill in change. Type none to clear details, department or questions.
  • /task assign id who and /task unassign id who add or remove people. Adding a role gives each of its staff members their own copy of the task.
  • /task reopen id [who] [due] [note] reopens a completed task. Leave who empty to give it back to the same people, or @mention someone new. If the old due date has passed, give a new one. Everyone on it gets a DM with your note. Whoever assigned it, its supervisor, or Manage tasks can reopen it.
  • /task remind id before sets a DM reminder, like 30m, 2h or 1d before it's due.
  • /task list [filter] shows tasks assigned to you, by you, by department, waiting for review, or all.
  • /task view id shows one task, and /task complete id finishes it.
  • /task delete id deletes a task you assigned.
  • /task resend DMs your open tasks to you again, with their Submit / Complete and reminder buttons. Add id to resend one task to everyone on it (whoever assigned it, its supervisor, or Manage tasks), who to pick people, or all:True to resend every open task to everyone. Resending other people's tasks needs the Resend tasks permission.
Who can change a task? Whoever assigned it, its supervisor, or anyone with Manage tasks can edit it and change its assignees. Only whoever assigned it, or Manage tasks, can delete it.

Staff applications

Let people apply to join your staff team with a form, and review them in a channel.

  1. Make a form on the dashboard's Applications page, or with /application create name questions review_channel [role] [department]. A form has up to 5 questions (split them with | in the command), a review channel, and optionally a role and department to give when someone is accepted, like your lowest staff rank.
  2. Post the Apply buttons with /application panel channel (or on the dashboard), usually in a public channel like #apply. People can also use /apply.
  3. Applicants press Apply, answer the questions, and get a confirmation. Only staff see the answers.
  4. Reviewers get the application in the review channel with Accept and Deny buttons, or decide on the dashboard. /application list shows what's waiting.
  5. Accepting gives the form's role (which adds them to staff) and department, and DMs them. Denying asks for a reason and DMs it.
  • People can have one pending application per form. After a denial they wait the form's cooldown (7 days by default) before applying again.
  • /application open form and /application close form open or close a form. /application delete form deletes it.
  • Reviewing needs the Review applications permission. Making forms needs Manage settings. The bot's role must be above the role it gives.

Supervisors & approvals

A task with a supervisor has to be approved before it counts as done.

  1. The assignee presses Submit for approval (or runs /task complete) and answers the task's questions.
  2. When a supervisor is picked, on a new task or later with /task edit, they get a DM letting them know.
  3. The supervisor, and whoever assigned the task, get a DM showing the answers, with Approve and Deny buttons. Anyone with Manage tasks can decide too.
  4. Denying needs a reason. The task goes back to open so it can be fixed and resubmitted.
  5. The result is DMed to everyone on the task and shown in a Review section on the task's post.

The supervisor can't also be an assignee. Pick yourself as supervisor to approve tasks you hand out. The dashboard's Task settings page sets the server's default completion questions and whether a note is needed when approving.

Future tasks

Give a task a start date to hand it out now but have it begin later.

  1. Everyone assigned gets a DM straight away saying they've been given a Future Task, with when it starts and when it's due.
  2. Until it starts, it shows as 🕒 in /task list and as Future on the dashboard. It can't be finished yet and isn't posted in the task channel.
  3. When the start time comes, it's posted in the task channel and everyone gets a second DM saying it has started, with the Submit / Complete and reminder buttons.
  • Set it with the start option on /task create, or the Starts field when creating a task on the dashboard.
  • Move it with /task edit id start:…, or use start:now to start it straight away. On the dashboard, clear the Starts field.
  • The start has to be before the due date. A repeating future task keeps the same gap between start and due each time.

Recurring tasks

Tasks can repeat every day, every week, every 2 weeks or every month. When a repeating task comes due, a fresh copy is created with the next due date: same people, details, questions and supervisor. The new copy is created even if the previous one isn't finished, so nothing gets skipped.

  • Set it when creating: the repeat option on /task create.
  • Change it later: /task repeat id every, or pick Don't repeat to stop.

Activity quotas

Quotas set how many active hours staff need each period: every week, every 2 weeks, or every month.

  • /quota create for hours period makes one for all staff, a department, or a department position like Moderation · Head (Manage quotas).
  • The most specific quota wins: position, then department, then all staff.
  • /quota me shows your quota and progress. /quota progress shows everyone's.
  • /quota pause, /quota resume and /quota delete manage a quota, and /quota channel picks where results are posted.

Everyone a quota applies to gets a DM when it starts. At the end of each period, results (met, missed or excused) are posted. Staff on leave during the period, or who joined part-way through, are excused.

History & notes

Staff history

/staff history [member] shows a timeline for a staff member: when they joined, promotions and demotions, departments joined and left, leave, and quota results. It's recorded automatically.

Notes, warnings and praise

Keep private records about staff. Only people with the Manage staff permission can add or see them.

  • /staff note member type text adds a note, warning or praise. Add notify:True to DM a warning or praise to the person.
  • /staff notes member lists them, and /staff deletenote id removes one.

On the dashboard, open Staff members → Profile next to anyone to see both, along with their hours, tasks and leave.

Strikes

Strikes are formal warnings that add up. Each one expires after a set number of days (30 by default).

  • /strike add member reason gives a strike. The person gets a DM with the reason and how many active strikes they have. It's logged and added to their history.
  • /strike remove id takes one back, and /strike list [member] shows someone's strikes. Anyone can see their own.
  • When someone reaches the limit (3 by default), the server owner, their department leaders and the log channel are alerted. You can also choose to remove their staff roles automatically.
  • Change the limit, expiry and what happens with /settings strikes, or in Server settings → Strikes on the dashboard. Strikes can also be given from a staff member's Profile on the dashboard.
  • Needs the Give strikes permission. Without Manage Server, you can only give strikes to people ranked below you.

Staff of the week

Every Monday the bot can celebrate last week's standout staff member in a channel, with the runners-up. It's picked automatically: active hours + 2 points per completed task. Anyone who got a strike that week can't win. The win is added to their history.

Turn it on with /settings staffoftheweek channel [role], or Server settings → Staff of the week on the dashboard. With a role, the bot moves it to each new winner (its role must be above it). Add announce_now:True to pick last week's winner straight away, or off:True to stop.

Inactivity alerts

Get a heads-up when a staff member has had no activity (voice or chat) for a set number of days.

  • /settings inactivity days [channel] [dm_leaders] turns it on. Use 0 days to turn it off.
  • Alerts go to the channel you pick, or your log channel. With dm_leaders, the person's department leaders get a DM too.
  • People on leave are skipped. Each person is flagged once, and again only after they've been active and gone quiet again.

The dashboard's Server settings page also lists who is inactive right now.

Weekly report

Every Monday (in your server's timezone) the bot can post a summary of last week for leadership:

  • Total and average hours, the most active staff, and who was least active or had no activity.
  • How many staff have met their quota this period.
  • Tasks created and completed, overdue tasks, and tasks waiting for approval.
  • Who is on leave, and leave requests waiting for approval.
  • Who joined or left the staff team, and applications waiting for review.

Turn it on with /settings report channel (or Server settings → Weekly report on the dashboard). Add send_now:True to see one straight away, and use off:True to stop it. Keep the channel private to leadership.

Settings & timezone

  • /settings view shows everything at a glance, including linked servers and permissions.
  • /settings channels changes the profiles, LOA and task channels.
  • /settings onleave-role role picks the On Leave role.

Timezone

/settings timezone zone sets the timezone used for task due times you type, LOA dates, the Monday weekly reset and quota periods. Start typing a city to search. It's UTC until you change it, and it applies to all your linked servers.

Due times in task posts still show in each person's own local time in Discord.

Permissions

The server owner and anyone with Manage Server can do everything. Give other roles bot permissions with /settings permission role permission enabled or the dashboard's Permissions page:

PermissionLets the role…
Manage settingsUse /setup, /settings and /staffrole, and open the dashboard
Approve LOAsApprove or deny leave, and end anyone's leave
Manage departmentsCreate and delete departments, change members, link roles
Manage tasksAssign tasks to anyone, and edit, approve, complete or delete any task
Manage staffChange join dates, re-post profile cards, and add or read notes
Manage quotasCreate, pause and delete quotas
Send staff DMsUse /message to DM staff, roles, departments or the whole team
Resend tasksResend anyone's task DMs, or every open task at once, with /task resend

Only the owner and Manage Server can change permissions, so nobody can give themselves more access.

Logging

/settings logging picks a log channel and which events are logged: staff changes, LOA, tasks, departments and settings. Run it with no options to see your current setup, or use off:True to stop logging.

Spaces (linking servers)

A space is a group of your servers that share one staff team. Profiles, hours, leave, departments, tasks and quotas then match in every server in the space. Each server still picks its own roles and channels. You can have several spaces, and any server can stay out of them.

  • Manage them on the dashboard: Your servers → Manage spaces. Create a space, give it a name and colour, and tick which of your servers are in it.
  • The name and colour show to everyone who manages a server in that space.
  • Only the owner of the servers can create spaces and move servers, because it shares their staff data.
  • A server in no space has its own staff team. Moving a server starts it on the new space's team; departments, tasks and LOAs stay with the team they were made in, and come back if you move it back.
  • If you transfer ownership of a server, it leaves its space and gets its own staff team.

Web dashboard

Log in with Discord to manage any server where you have Manage Server or the Manage settings permission. Login shares your username, avatar and server list. The server list is only used to show servers you could add the bot to.

The Your servers page shows linked servers together, joined by a green connection, since they share one staff team. Below that, Add the bot to your other servers lists servers you own or manage that don't have the bot yet, each with an + Add button. The settings menu is grouped into General, Staff team, Activity, Tasks and Setup.

PageWhat it's for
OverviewSetup checklist, quick-start templates and a summary of your team
Server settingsTimezone, welcome DMs, strikes, staff of the week, the weekly report, activity tracking, inactivity alerts, and who's inactive now
Activity statsWeekly team hours, tasks completed, on-time rate, quota success and leave trends, each member's voice and chat time, department totals, and a weekly hours CSV
SpaceWhich space this server is in, and a link to manage spaces
Spaces (from Your servers)Create spaces, name and colour them, and choose which servers share a staff team
Staff ranksWhich roles are staff and their levels
Channels · On Leave rolePick or create channels and the On Leave role
DepartmentsMembers, linked roles, leadership positions and task channels
Staff membersHours and join dates, a staff CSV, and each person's Profile: their hours chart, quota, task record, leave, history, notes and strikes
ApplicationsApplication forms, the Apply panel, and accepting or denying applications
QuotasCreate quotas and see everyone's progress
Active tasksEvery open task, with filters. Create, edit and delete tasks here, and download every task as a CSV
Task settingsDefault completion questions and approval notes
Permissions · LoggingRole permissions and the log channel
Audit logWho did what and when, from slash commands and the dashboard, kept for 180 days. Searchable and filterable

Messaging staff

/message sends a DM to staff. Pick who gets it like you do for tasks:

  • to: @mention staff and staff roles together, like @Ben @Moderators
  • department: everyone in a department
  • everyone:True: the whole staff team

Add a title and text, or leave text empty to write a longer message with line breaks in a form. Only staff receive it, up to 200 people at once, and the reply tells you if anyone's DMs were closed. You need the Send staff DMs permission.

Every message shows who sent it. Each one also has a Stop staff messages button: anyone who presses it gets no more /message DMs from that staff team (the sender is told they were skipped), and can press it again to turn them back on.

Feedback & updates

  • /review type message [rating] sends the developer a review, suggestion or bug report. It works in DMs with the bot too.
  • The dashboard has Review and Report a bug buttons at the top.
  • Server owners get a DM when a new version comes out. Press STOP on it, use /unsubscribe, or DM the bot stop to opt out. /subscribe turns them back on.

Voting & "Powered by"

Like the bot? Use /vote to vote for Safe Staff on top.gg. It takes a few seconds and helps more servers find it. You can vote every 12 hours. After voting you get a thank-you DM with a Remind me in 12 hours button.

Public posts (the Apply panel and staff of the week) show a small Powered by Safe Staff link. Turn it off in Server settings → Powered by Safe Staff on the dashboard.

Privacy & your data

Safe Staff never reads message text. For staff members it stores rank, join date, departments, active time, leave, tasks, applications, notes and strikes. Full details are in the Privacy Policy.

  • Delete your own data: run /privacy (works in DMs too) or open Your data on the dashboard. It deletes everything about you in every server, straight away.
  • Delete a server's data: the server owner can do it on the dashboard under Server settings → Delete server data. This also removes the bot.
  • Removing the bot: the server owner gets a warning DM, and the server's data is deleted automatically 3 days later unless the bot is added back. If it was the last server in its space, the space and its staff data are deleted too, unless you move another server into the space first.

Server owners: please tell your staff team that the bot records their activity, and link them to the Privacy Policy.

All commands

Options in [brackets] are optional. "Manage …" means the matching bot permission.

Everyone on staff

/helpThe in-Discord guide
/staff profile [member]A staff profile
/staff listThe whole team with this week's hours
/staff history [member]A staff member's timeline
/strike add · remove · listGive, remove and see strikes (Give strikes)
/apply [form]Apply to join the staff team
/application create · panel · list · open · close · deleteApplication forms and reviewing
/loa request start end reasonAsk for leave
/loa end [member]End or cancel leave
/loa listCurrent, upcoming and pending leave
/task create title due …Create a task
/task edit id …Change a task you assigned or supervise
/task repeat id everyChange or stop how a task repeats
/task assign · unassign id whoAdd or remove people and roles
/task remind id beforeGet a DM reminder
/task list [filter]List tasks
/task view · complete · delete idWork with one task
/task reopen id [who] [due]Reopen a completed task
/task resend [id] [who] [all]DM tasks again with their buttons
/department list · viewBrowse departments
/quota meYour quota and progress
/review type messageSend feedback to the developer

Admins

/setupThe step-by-step setup
/settings viewAll settings at a glance
/settings channels · onleave-roleChannels and the On Leave role
/settings timezone zoneThe server's timezone
/settings activity [voice] [ignore] [count]What counts toward activity hours
/settings welcome enabledWelcome DMs for new staff
/settings inactivity daysInactivity alerts
/settings loggingLog channel and events
/settings permission role permission enabledRole permissions
/staffrole add · remove · listStaff ranks and levels
/staff setjoined · refreshJoin dates and profile cards (Manage staff)
/staff note · notes · deletenotePrivate notes, warnings and praise (Manage staff)
/department create · delete · add · removeDepartments and members
/department link · unlinkAuto-membership by role
/department taskchannelA department's task channel
/department leadership · leadership-removeHead, Co-Head and other positions
/quota create · list · progressActivity quotas (Manage quotas)
/quota pause · resume · delete · channelManage quotas
/message [to] [department] [everyone]DM staff (Send staff DMs)

Server owners

/subscribe · /unsubscribeTurn update announcement DMs on or off

Troubleshooting

A new command isn't showing up

Discord saves the command list on your device. Reload Discord with Ctrl+R (Cmd+R on Mac), or fully close and reopen the app on your phone.

The On Leave role or a department role isn't being given

The bot's role must be above those roles in Server Settings → Roles, and the bot needs the Manage Roles permission.

Someone didn't get a DM

They probably have DMs from server members turned off. They can turn them on in the server's Privacy Settings. The bot tells whoever created the task when a DM couldn't be delivered.

"You can only assign tasks to staff ranked below you"

Task assignment follows rank levels. Ask someone more senior, use a department you lead, or get the Manage tasks permission.

Someone's hours look too low

Only staff are tracked, and only from when they became staff. Time in the AFK channel doesn't count, and overlapping voice and chat time counts once.

The bot can't post in a channel

Check the channel's permissions: the bot needs View Channel, Send Messages and Embed Links there. When the bot can't post somewhere it was told to use, it DMs the server owner (and posts in the log channel) saying what's missing, at most once a day. The Overview page's checklist shows it too.

Tasks aren't posting in a department's channel

Set the channel with /department taskchannel or on the Departments page. With linked servers it only needs setting in one of them. Tasks given to a role linked to a department post in that department's channel even without picking the department.

The bot said "error code E-…"

Something broke on the bot's side, and the developer has been sent the details. Try again in a moment, and if it keeps happening share the code in the support server.

Still stuck? Ask in the support server.