Who can use what
The five access levels, how members reach them, and what protects your staff.
Every Ledra command sits at one of five levels. The levels are ordered — a command that needs Moderator also works for admins, the server owner and the bot owner.
| Level | Name | How a member reaches it |
|---|---|---|
| 0 | Everyone | Nothing required |
| 1 | Moderator | A role you gave the moderator level, or the Discord permission Kick Members or Moderate Members |
| 2 | Administrator | A role you gave the admin level, or the Discord permission Manage Server or Administrator |
| 3 | Server owner | Owns the server |
| 4 | Bot owner | Operates Ledra itself |
Two ways in, whichever is higher#
A member's level is the highest result of two independent checks:
- Configured roles — roles you set with
/permissions set - Native Discord permissions — what Discord already grants them
They add up rather than override. Someone with Manage Server is an
administrator to Ledra even if you never configured a single role. Someone
with no Discord permissions at all is a moderator if you gave their role the
moderator level.
Why both? So Ledra is useful in the first minute without any setup, and
still lets you grant staff access later without handing out real Discord
permissions. Give someone the moderator level and they can use /warn and
/timeout — but they still cannot edit channels, manage roles or see the
audit log.
To see where a specific member lands:
/permissions check member:@Someone
It shows the resolved level and which of the two paths granted it.
Configuring staff roles#
/permissions set role:@Moderator level:moderator
/permissions set role:@Admin level:admin
/permissions list
/permissions remove role:@ExStaff
Rules Ledra enforces:
- Only the server owner can grant or revoke
admin. An admin can create moderators, but not more admins. Without this, one compromised admin account could quietly mint permanent access. @everyonecannot be promoted.- Integration roles cannot be promoted — the roles Discord manages for bots and subscriptions. They are outside your control, so they cannot carry staff access.
/permissions reset wipes every configured staff role at once. It is
server-owner only and asks for confirmation first. Afterwards, staff access
comes purely from native Discord permissions again.
What protects your staff#
Before any action touches a member, Ledra runs the same checks every time:
| Rule | Effect |
|---|---|
| No self-targeting | You cannot kick, ban, warn or mute yourself |
| No bot-targeting | Ledra refuses to action itself |
| Server owner is protected | Nobody can action the owner — ever |
| No equal or higher staff | A moderator cannot action another moderator, an admin, or the owner |
| Role position vs. you | The target's highest role must sit below yours |
| Role position vs. Ledra | The target's highest role must sit below Ledra's |
The last two are Discord's own hierarchy rules. Ledra checks them before acting so you get a readable message instead of a failed API call.
The server owner is exempt from the role-position check against themselves — they can action anyone below Ledra. They are still bound by Ledra's own role position, because Discord itself enforces that one.
Bot permission checks#
Beyond your level, Ledra verifies its own permissions in the exact channel
you are using. /purge needs Manage Messages and Read Message History
right there; a server-wide grant that is denied in one channel is caught.
The failure message names the missing permission, so the fix is usually one click in channel settings.
Cooldowns#
Destructive commands are rate-limited per member, per server:
| Commands | Limit |
|---|---|
/kick /ban /tempban |
5 uses / 30 seconds |
/unban /clearwarns |
5 uses / 60 seconds |
/timeout /untimeout /warn /unwarn |
10 uses / 30 seconds |
/purge |
3 uses / 30 seconds |
/remind |
3 uses / 30 seconds |
Cooldowns are per person — one moderator hitting a limit never blocks another.
When something is refused#
Ledra never shows a stack trace. You get a short, private message naming the reason: your level, a missing bot permission, a protected target, or a role position problem. Unexpected errors get a reference ID you can quote to support.