Concepts
Discord bot permissions and role hierarchy, explained
Why a bot cannot give a role or ban a member, how the role hierarchy works, which permissions to give and why you should not use Administrator.
"Missing Permissions" is the most common error a new bot owner sees. It almost always comes from one of two things: the bot role lacks a permission, or the role is below the target in the role list. This guide explains both.
Two layers of permissions
- Server permissions: what the role may do in the whole server, such as Kick Members or Manage Roles.
- Channel overwrites: extra allow or deny rules in a channel or category, such as View Channel or Send Messages.
For an action in a channel, both layers must allow it. A bot with Send Messages at server level still cannot post in a channel that denies it for its role.
The role hierarchy
Roles are ordered in the role list in the server settings, from the top down. A role can only manage roles below it, and a member can only be acted on by someone whose highest role is above theirs. For a bot this means:
- It can only give or remove roles that sit below its own highest role.
- It can only kick, ban or time out members whose highest role is below its own.
- It can never act on the server owner.
So after you invite a bot, drag its role high enough in the role list, above the roles it should manage but below your own admin roles.
Which permissions to give
Choose the permissions from what the commands do:
- Kick Members, Ban Members: moderation commands.
- Moderate Members: timeouts.
- Manage Roles: giving roles, role menus, level rewards.
- Manage Channels: ticket channels.
- Manage Messages: deleting or pinning messages.
- Send Messages, Embed Links, Read Message History: normal replies in channels.
Why not Administrator
Administrator bypasses every permission and every channel overwrite. If the bot has a bug or its token leaks, the damage is the whole server. A bot with a short list of permissions can do far less harm, and the errors you get when something is missing tell you exactly what to allow.
How a generated bot behaves
BotsMaker asks the generated code to check the hierarchy before it acts and to give a clear message when it cannot, such as "I cannot ban this member because their role is higher than mine". Commands also declare a default member permission so that Discord hides them from members who should not use them.
A quick checklist
- Is the permission on the bot role at server level?
- Does the channel overwrite deny it?
- Is the bot role above the target role?
- Is the target the owner?