The Manual

Roles & permissions

Why your bot cannot assign a role

Six causes, in order. The first one is right about three times in four, takes ten seconds to check, and produces no error message at all.

Time
5 min
Topic
Roles & permissions
Published
30 August 2026

Open Server Settings, then Roles. The bot’s own role must sit above every role it hands out. Discord’s documentation puts it plainly: “A bot can grant roles to other users that are of a lower position than its own highest role.” Nothing errors when this is wrong — the role is simply never applied.

That is the cause about three times in four. The five below cover almost all of the rest.

Before you start: you need Manage Roles, and you need to be able to drag roles in the role list.

Is the bot’s role above the role it is granting?

Server Settings, then Roles. The list is a ladder — highest at the top — and only position counts. The bot needs no relationship to the role other than sitting above it.

Drag the bot’s role up until it is above every role it needs to assign, then try again. Nothing else needs to change. A bot with Administrator and a bottom-of-the-list role still cannot assign anything, which is the detail that makes this failure so confusing.

Two consequences worth internalising:

  • Adding a new role later breaks it again. New roles are created at the bottom, but a role dragged above the bot stops being assignable the moment you move it.
  • The rule is the same for humans. You cannot grant a role above your own highest role either, which is why “it works when I do it manually” is not the test people think it is — you may simply be higher up the ladder than the bot.

Role hierarchy, explained properly covers the model in full, including how it interacts with channel overrides.

Does the bot have Manage Roles?

Server Settings, then Roles, then the bot’s role, then Permissions. Manage Roles must be on.

This is a server-level permission, so a channel override cannot grant or remove it. If it is missing, the cleanest fix is to re-invite the bot with the correct permissions rather than adding it by hand — an invite link generated with the right scopes creates a managed role with the right permissions already attached.

Do not solve this by granting Administrator. It fixes this one symptom and creates several larger problems; why you should not give a bot Administrator explains what you take on when you do.

Is the target role managed by an integration?

Some roles cannot be assigned by anyone, bot or human. Discord marks them managed, meaning they “are managed by an integration”, and only that integration may grant them.

The ones you will actually meet:

RoleOwned byAssignable by a bot?
A bot’s own roleThe bot’s integrationNo
Server BoosterDiscord’s boost systemNo
Twitch subscriber roleThe Twitch integrationNo
A linked-role rewardDiscord’s linked rolesNo

An integration-managed role also shows no drag handle in the role list, which is a fast way to identify one. If your reward ladder points at a managed role, create a normal role instead and point at that.

Is the target the server owner?

The owner cannot be role-managed by anyone, regardless of permissions or position. There is no setting that changes this.

If your rank rewards, auto-roles or self-role panels appear to work for everyone except you, and you own the server, they are working correctly. Test with a second account before spending an hour on it.

Does your server require two-factor authentication?

This one is rare, invisible, and maddening when you hit it. Discord’s permission documentation states: “These permissions require the owner account to use two-factor authentication when used on a guild that has server-wide 2FA enabled.” Manage Roles is on that list, along with Kick Members and Ban Members.

So a server with the 2FA moderation requirement switched on will refuse role changes from a bot whose owner account does not have 2FA enabled. Nothing in your server is misconfigured and nothing you can change will fix it — the bot’s developer has to enable 2FA on the account that owns the application.

The tell is that the bot fails at every moderation action at once: no role assignment, no kick, no ban, no timeout. If one of those works and the others do not, this is not your cause.

Did the bot ever try?

Everything above assumes the bot attempted the assignment and Discord refused. Frequently it never attempted it, because the feature that would have triggered the assignment is off or its condition was never met.

Check three things, in this order:

  1. The feature’s master switch. Most bots ship their systems off. If leveling, auto-roles or self-roles is disabled on the dashboard, no role is granted and the bot reports nothing.
  2. The trigger condition. A rank reward at level 10 does nothing for a member at level 9. An invite-based role does nothing when the member joined through a different invite. A delayed role does nothing until its timer expires.
  3. Exclusions. Excluded roles and excluded channels are the usual reason a specific member, and only that member, never qualifies.

Vetox exposes each of these separately, which makes them quick to eliminate. Its Server Setup switchboard carries the master toggle per system; its Leveling page carries the reward ladder with a text threshold, a voice threshold and an AND/OR operator per row; and its exclusion lists sit on the same page. Rank rewards themselves are ungated — unlimited reward rows on every tier including the free one — so a missing role there is a configuration question rather than a billing one.

One Vetox behaviour worth knowing while you debug: reward roles are re-evaluated on every XP award, not only on a level-up. A member who crossed a threshold while the bot was offline, or who lost the role, gets it back on their next message without anyone doing anything. If a role is still missing after the member has spoken, the cause is one of the five above rather than a missed event.

Check it in ninety seconds

  1. Position — bot’s role above the target role in Server Settings, then Roles.
  2. Permission — Manage Roles on the bot’s role.
  3. Managed — the target role has a drag handle, so it is not integration-owned.
  4. Target — the member is not the server owner.
  5. Trigger — the feature is enabled and the member genuinely meets its condition.

If all five pass and the role still does not appear, the next thing to read is why your bot is not responding — a bot that cannot see the channel the trigger fires in behaves exactly like a bot that cannot assign roles.

Sources and verification

Checked

  1. Discord developer docs — Permissions (opens in a new tab)
  2. Discord Support — Role Management 101 (opens in a new tab)

How we verify