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.
Nothing matches that search. Try a command name like loa or task.
Getting started
Setup takes about two minutes.
- 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.
- Run
/setupin 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. - 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.
- 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.
/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 levelmakes a role a staff rank, or changes its level. Addloa_approver:Trueto let that rank approve leave./staffrole remove roleand/staffrole listmanage 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 listshows the whole team by department, with rank headings and this week's hours./staff setjoined member datefixes someone's join date (Manage staff)./staff refreshre-posts every card, sorted by rank (Manage staff).
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.
Leave of absence
- A staff member runs
/loa request start end reason. Dates look like2026-12-20, and end is their last day off. - The request appears in your LOA channel with Approve and Deny buttons. Denying needs a reason, and nobody can review their own request.
- The member gets a DM with the decision.
- 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 listshows 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 createand/department deletemake or remove one (Manage departments)./department addand/department removechange members by hand./department link name roleconnects a Discord role. Staff with that role join automatically and leave when they lose it./department taskchannel name channelgives the department its own task channel in this server./department listand/department view nameshow 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. |
|---|---|
due | 2026-11-20, 2026-11-20 18:00 (your server's timezone), or a length of time like 3d or 12h. |
supervisor | Someone who checks the task off when it's submitted. See Supervisors & approvals. |
details | What needs doing. |
department | Posts the task in that department's task channel. Individual assignees must be in the department. |
questions | Questions to answer when finishing, split with |, like What did you do? | Link to proof. Up to 4. |
start | When the task starts, like 2026-11-20 09:00 or 2d. Leave it empty to start now. See Future tasks. |
repeat | Daily, 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 idchanges the title, due date, start date (future tasks only), details, department, supervisor, questions or repeat. Only the options you fill in change. Typenoneto clear details, department or questions./task assign id whoand/task unassign id whoadd 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. Leavewhoempty 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 beforesets a DM reminder, like30m,2hor1dbefore it's due./task list [filter]shows tasks assigned to you, by you, by department, waiting for review, or all./task view idshows one task, and/task complete idfinishes it./task delete iddeletes a task you assigned./task resendDMs your open tasks to you again, with their Submit / Complete and reminder buttons. Addidto resend one task to everyone on it (whoever assigned it, its supervisor, or Manage tasks),whoto pick people, orall:Trueto resend every open task to everyone. Resending other people's tasks needs the Resend tasks permission.
Staff applications
Let people apply to join your staff team with a form, and review them in a channel.
- 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. - Post the Apply buttons with
/application panel channel(or on the dashboard), usually in a public channel like #apply. People can also use/apply. - Applicants press Apply, answer the questions, and get a confirmation. Only staff see the answers.
- Reviewers get the application in the review channel with Accept and Deny buttons, or decide on the dashboard.
/application listshows what's waiting. - 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 formand/application close formopen or close a form./application delete formdeletes 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.
- The assignee presses Submit for approval (or runs
/task complete) and answers the task's questions. - When a supervisor is picked, on a new task or later with
/task edit, they get a DM letting them know. - 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.
- Denying needs a reason. The task goes back to open so it can be fixed and resubmitted.
- 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.
- Everyone assigned gets a DM straight away saying they've been given a Future Task, with when it starts and when it's due.
- Until it starts, it shows as 🕒 in
/task listand as Future on the dashboard. It can't be finished yet and isn't posted in the task channel. - 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
startoption on/task create, or the Starts field when creating a task on the dashboard. - Move it with
/task edit id start:…, or usestart:nowto 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
repeatoption 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 periodmakes 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 meshows your quota and progress./quota progressshows everyone's./quota pause,/quota resumeand/quota deletemanage a quota, and/quota channelpicks 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 textadds a note, warning or praise. Addnotify:Trueto DM a warning or praise to the person./staff notes memberlists them, and/staff deletenote idremoves 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 reasongives 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 idtakes 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. Use0days 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 viewshows everything at a glance, including linked servers and permissions./settings channelschanges the profiles, LOA and task channels./settings onleave-role rolepicks 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:
| Permission | Lets the role… |
|---|---|
| Manage settings | Use /setup, /settings and /staffrole, and open the dashboard |
| Approve LOAs | Approve or deny leave, and end anyone's leave |
| Manage departments | Create and delete departments, change members, link roles |
| Manage tasks | Assign tasks to anyone, and edit, approve, complete or delete any task |
| Manage staff | Change join dates, re-post profile cards, and add or read notes |
| Manage quotas | Create, pause and delete quotas |
| Send staff DMs | Use /message to DM staff, roles, departments or the whole team |
| Resend tasks | Resend 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.
| Page | What it's for |
|---|---|
| Overview | Setup checklist, quick-start templates and a summary of your team |
| Server settings | Timezone, welcome DMs, strikes, staff of the week, the weekly report, activity tracking, inactivity alerts, and who's inactive now |
| Activity stats | Weekly 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 |
| Space | Which 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 ranks | Which roles are staff and their levels |
| Channels · On Leave role | Pick or create channels and the On Leave role |
| Departments | Members, linked roles, leadership positions and task channels |
| Staff members | Hours and join dates, a staff CSV, and each person's Profile: their hours chart, quota, task record, leave, history, notes and strikes |
| Applications | Application forms, the Apply panel, and accepting or denying applications |
| Quotas | Create quotas and see everyone's progress |
| Active tasks | Every open task, with filters. Create, edit and delete tasks here, and download every task as a CSV |
| Task settings | Default completion questions and approval notes |
| Permissions · Logging | Role permissions and the log channel |
| Audit log | Who 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 @Moderatorsdepartment: everyone in a departmenteveryone: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./subscribeturns 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
/help | The in-Discord guide |
/staff profile [member] | A staff profile |
/staff list | The whole team with this week's hours |
/staff history [member] | A staff member's timeline |
/strike add · remove · list | Give, remove and see strikes (Give strikes) |
/apply [form] | Apply to join the staff team |
/application create · panel · list · open · close · delete | Application forms and reviewing |
/loa request start end reason | Ask for leave |
/loa end [member] | End or cancel leave |
/loa list | Current, upcoming and pending leave |
/task create title due … | Create a task |
/task edit id … | Change a task you assigned or supervise |
/task repeat id every | Change or stop how a task repeats |
/task assign · unassign id who | Add or remove people and roles |
/task remind id before | Get a DM reminder |
/task list [filter] | List tasks |
/task view · complete · delete id | Work 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 · view | Browse departments |
/quota me | Your quota and progress |
/review type message | Send feedback to the developer |
Admins
/setup | The step-by-step setup |
/settings view | All settings at a glance |
/settings channels · onleave-role | Channels and the On Leave role |
/settings timezone zone | The server's timezone |
/settings activity [voice] [ignore] [count] | What counts toward activity hours |
/settings welcome enabled | Welcome DMs for new staff |
/settings inactivity days | Inactivity alerts |
/settings logging | Log channel and events |
/settings permission role permission enabled | Role permissions |
/staffrole add · remove · list | Staff ranks and levels |
/staff setjoined · refresh | Join dates and profile cards (Manage staff) |
/staff note · notes · deletenote | Private notes, warnings and praise (Manage staff) |
/department create · delete · add · remove | Departments and members |
/department link · unlink | Auto-membership by role |
/department taskchannel | A department's task channel |
/department leadership · leadership-remove | Head, Co-Head and other positions |
/quota create · list · progress | Activity quotas (Manage quotas) |
/quota pause · resume · delete · channel | Manage quotas |
/message [to] [department] [everyone] | DM staff (Send staff DMs) |
Server owners
/subscribe · /unsubscribe | Turn 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.
Safe Staff