There are two separate permission questions, and mixing them up causes most "why doesn't this work" tickets:
A server appears in your dashboard when at least one of these is true:
That is it — there is no separate Cloudy role or invite list. The check runs on every single API
request, not just when the page loads, so a URL with someone else's server id gets a 403 rather
than a rendered page.
Cloudy asks for one permission set at invite time, but each plugin only uses part of it. If a feature does nothing and the dashboard shows no error, this table is the first place to look.
| Discord permission | Needed by |
|---|---|
| View Channels / Send Messages | Everything that posts: welcome, level-ups, birthdays, alerts, panels |
| Embed Links | Every embed — panels, level-ups, giveaways, stream alerts |
| Read Message History | Sticky messages, AutoMod, custom commands |
| Manage Messages | AutoMod deletions, sticky reposting, /del-msg, poll cleanup |
| Manage Roles | Reaction roles, verification, auto-roles, birthday role, automation role actions |
| Manage Channels | Temp voice, ticket channels, /channel-lock, /slowmode |
| Move Members | Temp voice (moving the owner into their new channel) |
| Ban Members | /ban, /unban, AutoMod escalation to ban |
| Kick Members | /kick, AutoMod escalation to kick |
| Moderate Members | /timeout, AutoMod timeout actions |
| Add Reactions | Reaction role panels (seeding the reactions) |
| View Audit Log | The dashboard's Audit log page |
Discord permissions are not enough on their own. A bot can only manage roles that sit below its own highest role, and can only moderate members whose highest role is below the bot's.
This is the single most common cause of "the role is not being assigned":
@Member but Cloudy's role sits under @Member in
Server Settings → Roles, nothing happens — and Discord returns a generic error the bot cannot
explain any better. Drag Cloudy's role above every role it should manage.The same applies to moderation: Cloudy cannot ban, kick or time out someone whose top role is above its own, no matter which permissions it has.
Two of Discord's privileged gateway intents are required for Cloudy to see anything beyond slash commands:
| Intent | Without it |
|---|---|
| Server Members | Joins and leaves are invisible → no welcome/goodbye, no auto-roles, no verification, no birthday role |
| Message Content | Message text is invisible → no AutoMod, no leveling, no custom commands, no sticky messages |
For the hosted Cloudy bot these are already enabled — you do not have to do anything. They only become your responsibility when you run a Custom Bot under your own Discord application; that page walks through switching them on.
For transparency, the dashboard reads exactly this from Discord on your behalf:
It never reads message content through your login, and the bot token of a custom bot is stored encrypted and never returned to any client.