Discord: role not given, missing permission, bot role too low
When a role does not arrive, it is almost always the bot's role sitting below the role to give, or the Manage Roles permission missing.
Updated on Oct 4, 2026, 2:02 p.m.
On this page
- Causes, in order
- The bot's role is too low
- The "Manage Roles" permission is missing
- "Server Members Intent" is not enabled
- The role is managed by an integration
- A role received on Discord does not add the member to their group
- Messages in Administration → Configuration → Discord connection
- Bring everyone up to date
In short. A member gets a role on the site, but their linked Discord role does not arrive? Discord refused. The member's page (Administration → Members) shows the latest Discord calls: a 403 refusal means "missing permission".
Causes, in order #
1. The bot's role is too low #
A bot can only give roles placed below its own.
- Discord: Server Settings → Roles.
- Drag the bot's role above every role it must give.
- In Agora, on the member's page: Resync their Discord roles.
Agora checks this before you save: in Administration → Configuration → Discord connection, a role placed above the bot (or at the same rank) is greyed out in the list, with the reason, and picking it anyway is refused when saving. If you move roles later, the mappings that became impossible show in red under Mappings Discord will refuse. That list covers the groups' roles and the MDT rank roles. Under each problem, the Open in the Discord app button takes you to the screen where you fix it (Server Settings → Roles, Integrations), and Open the developer portal (Bot tab) takes you to your application (the Client ID must be filled in). These buttons only open the desktop app: on mobile, on Linux or in the browser they may do nothing, so follow the path written beside them.
To understand why the order matters, see the official help: Discord Roles and Permissions.
Tip, desktop app only. If you know your server's ID (see Create and set up your Discord bot, step 6), paste into your browser's address bar
discord://-/guilds/ID/settings/roles(Roles),discord://-/guilds/ID/settings/integrations(Integrations: you see whether the bot is there) ordiscord://-/guilds/ID/settings/audit-log(Audit Log: who changed which roles), replacingIDwith the server ID. These are unofficial shortcuts that may stop working; the path through Server Settings always works.
2. The "Manage Roles" permission is missing #
- Discord: Server Settings → Roles → the bot's role.
- Turn on Manage Roles.
- Resync.
3. "Server Members Intent" is not enabled #
Discord developer portal → your application → Bot → turn on Server Members Intent. Shortcut: https://discord.com/developers/applications/ID/bot, where ID is your application's Client ID (the one in Administration → Configuration → Discord connection, block Discord login (OAuth)).
4. The role is managed by an integration #
Boost roles or another bot's roles (marked "managed by an integration") cannot be assigned. Pick another role in Administration → Configuration → Discord connection.
5. A role received on Discord does not add the member to their group #
This is the Sync Discord → Agora box of a group (see Discord roles, sync and "Suspended member"). Check in this order:
- the box is ticked for that group (it is greyed out for a power group: administrator, moderator, rights, application examiners);
- the member already has an account linked to their Discord (otherwise they are aligned at first sign-in);
- the Recent problems panel of Administration → Configuration → Discord connection:
| Message | Fix |
|---|---|
| "Server Members Intent" disabled | Agora is in audit log fallback. Developer portal → Bot → turn on Server Members Intent, then click Resync |
| "View Audit Log" permission missing | In fallback, give that permission to the bot's role, otherwise Discord sends no event at all |
| Listening stopped (code 4004…) | The bot token is refused: fix it, then click Resync (Agora does not retry in a loop) |
A member who leaves the server on their own is only removed from the group, in fallback mode, at the next re-read: click Resync. Each problem has its Open in the Discord app or Open the developer portal button, as above.
Messages in Administration → Configuration → Discord connection #
| Message | Fix |
|---|---|
| Bot token refused by Discord (401) | Discord portal → Bot → Reset Token, paste the value again |
| The bot "…" is not on this server (or the server ID is wrong) | Invite the bot (OAuth2 → URL Generator → bot + Manage Roles), check the server ID |
| Server ID refused | A Discord ID only has digits: right-click the server → Copy Server ID (Discord help) |
| ⚠ role not found | The role was deleted on Discord: pick another one |
| Discord rate limit | Wait a few seconds, then try again |
| Discord did not answer in time: likely an outage on their side… | Check discordstatus.com, or your host's outgoing connection, then try again later |
Bring everyone up to date #
After fixing it, Administration → Members → Resync every member → Start the resync. Keep the page open until it finishes.
Was this article helpful?
Related articles
- Connect Discord to Agora: sign-in, bot and rolesDiscord sign-in is mandatory; the bot, optional, assigns your groups' Discord roles and sends private messages.
- Discord roles, sync and "Suspended member"Each group can carry a Discord role, set and removed automatically (or, if you prefer, Discord is the source of truth); the Suspended member setting decides what happens to roles during a suspension.
- Manage members: groups, suspension, anonymisationAdministration → Members: give or remove a group, resync Discord roles, suspend, sign out everywhere, anonymise an account.