Discord bot says “Missing Permissions”? How to find and fix the cause
Start with the channel and feature that failed. Build Discord Bots’ Free Permission Check module adds an opt-in /diagnose command for server managers. It gives you a private, read-only report of enabled modules’ bot permissions, saved role hierarchy and privileged intent dependencies, with suggested fixes. You make the changes yourself, then retry the original action.
Start freeStart free. Pro is $9.99/month.
Before you start
- Use an online bot in a test server, and a Discord account with Manage Server. Permission Check must be enabled for that bot and server; it is available on Free.
- Note which module, command and channel produced the failure. Keep the original action safe to repeat, especially when testing moderation or role changes.
- Have a manager who can review the bot’s role, channel permissions and configured target roles. Intent checks may also require the person who manages the bot’s Discord Developer Portal application.
If your bot is offline, fix that first
Do not run /diagnose until the bot is online. For a rejected token, open Developer Portal → Bot, select Reset Token, confirm the dialog, enter the 2FA code if Discord asks, then select Copy. Discord shows the new token once; the old token stops working, so paste the new one into Build Discord Bots wherever the old token was saved and start the bot again.
For refused intents, check Logs or the token check, then enable exactly the named Privileged Gateway Intent switches for the selected modules and select Save Changes before trying Start again. The token check requests Message Content Intent for every new bot, and requests Server Members Intent or Presence Intent only when the selected modules require them. Once the status is online, continue with the checks below.
Enable Permission Check and run /diagnose
Open your bot’s Modules tab and enable Permission Check. In Discord, run /diagnose in the affected server channel using an account with Manage Server. It is a standalone slash command, not a prefix command. A prefix invocation does not publish a diagnostic report. The command also refuses callers without Manage Server, even if they can reach it.
The reply is private to the caller. A long report comes as a private permission-check.txt attachment so the module and role results are not truncated. The command reads the bot member, server roles and saved module data; it does not change settings, roles or permissions.
Compare server permissions with channel overrides
For each enabled module with a declaration, the report lists required permissions with server and current-channel results. Server means the bot’s guild permissions. Current channel means its effective permissions where you ran /diagnose, including channel overrides. For example, a server yes beside a channel NO points you toward this channel’s permissions and its category overrides.
Follow the reported fix for the feature you need: grant a missing server permission to the bot’s role in Server Settings → Roles, or allow a missing channel permission in that channel’s Settings → Permissions. Server-wide checks such as Ban Members are labelled server-wide; the report directs their fixes to the bot’s server role.
Run /diagnose again in a configured output channel if it differs from your command channel. Other output and voice channels can have different permissions. An unknown channel result means the bot could not inspect those permissions; it is not a pass. Custom or unreviewed modules without declarations are identified as having unavailable requirements.
Check role order as well as Manage Roles
For modules that manage roles, Permission Check reads the target roles saved in the declared settings or supported stored data. It flags a missing role, an integration-managed role or @everyone, and a role that is at or above the bot’s highest role. When the report says to move the bot’s role above a target, review Server Settings → Roles and place the bot’s highest role strictly above that ordinary target role.
The report does not try a role assignment. Roles chosen only when a command runs are not checked. It also reminds you to inspect the target member at command time: that member might be above the bot, the server owner or an administrator. Do not treat a saved-role OK as permission to moderate every member.
Separate slash-command access from bot permissions
Slash-command permissions and the permissions for an action are separate checks. /diagnose is registered for server use with Manage Server as its default member permission, and the handler checks Manage Server again. The report checks the bot’s declared feature requirements; it does not audit Discord’s per-command access overrides. If a command is unavailable to a member, a clean bot report does not establish that the member may run it.
Private slash replies do not require the bot to have Send Messages or Embed Links. The module declarations still include those permissions where public output or prefix replies need them. That is why a report can list a missing message permission without proving that a private slash reply is blocked. Check the actual action and output channel before changing permissions.
The declarations also distinguish individual action permissions: Tickets can report Pin Messages, Events can report Create Events, and Cortex can report Create Guild Expressions. Permission Check supports these specific permission bits. Read the named permission for your enabled module rather than assuming a broader message or management permission covers every operation.
Review intent dependencies, then retest the failing feature
For each module’s privileged intent dependencies, requested means the running client declares that intent. Developer Portal switches remain unverified. If an intent is not requested, the report suggests opening Developer Portal → Bot → Privileged Gateway Intents, turning on the switch the dashboard marks, selecting Save Changes, then returning to choose Check again. Regenerate the bot with the dependent module enabled. If it is requested, you must still confirm the Portal switch yourself.
Apply only the relevant fixes, rerun /diagnose in the affected channel, and repeat the original safe test. Permission Check is Free and opt-in; adding it does not unlock Pro modules. Compare plan access on Pricing, and use the related module pages below for the feature you are troubleshooting.
Frequently asked questions
Who can run /diagnose?
A member with Manage Server in a server where Permission Check is enabled. The command checks that permission before reading the report data.
Does /diagnose fix permissions automatically?
No. The private report is read-only. It suggests fixes without changing settings, roles or permissions.
Does it check every channel and Developer Portal switch?
No. Channel permissions are checked where you run it, and Developer Portal intent switches remain unverified.
Is Permission Check a Free module?
Yes. It is opt-in on Free; other modules keep their own plan requirements.
