> For the complete documentation index, see [llms.txt](https://docs.rivalryze.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rivalryze.com/for-guild-admins/bot-permissions.md).

# Bot Permissions Checklist

If the bot isn't working right in your server, 90% of the time it's a permissions issue. This page walks through every permission the bot needs, why, and how to verify everything's set up.

## Quick check: `/guild-permissions`

The fastest way to diagnose: run `/guild-permissions` in any channel.

The bot checks every permission it needs against what it actually has, and reports back:

* ✅ All good — the bot has everything it needs.
* ⚠️ Missing: \[specific permissions] — you'll need to grant these.
* ❌ Cannot send messages — the bot can't even respond; you'll need to grant **Send Messages** first.

Re-run the command after fixing anything to confirm the fix worked.

## Required permissions (must have)

These permissions are required for core functionality. If any are missing, the bot can't do its job.

| Permission                   | Why it's needed                                                                        |
| ---------------------------- | -------------------------------------------------------------------------------------- |
| **View Channel**             | To see slash commands when users invoke them.                                          |
| **Send Messages**            | To respond to commands.                                                                |
| **Embed Links**              | To send rich-formatted responses (profile cards, leaderboards, Contest announcements). |
| **Attach Files**             | To send generated images (completion cards, profile visuals).                          |
| **Use External Emojis**      | For platform icons (Steam, PSN, Xbox logos in responses).                              |
| **Read Message History**     | To resolve replies, threads, and command context.                                      |
| **Use Application Commands** | For slash commands to work at all.                                                     |

If any of these are missing, the bot can't function. Grant them in:

**Server Settings → Integrations → RivalRyze Bot → Manage**

Or per-channel under each channel's permission overrides.

## Optional permissions (nice to have)

These unlock additional features. The bot still works without them but won't be as useful.

| Permission           | What it enables                                                                                                                                      |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Add Reactions**    | Interactive responses (e.g., reacting with ✅ to confirm a Contest join).                                                                             |
| **Manage Messages**  | Letting the bot clean up its own responses on request.                                                                                               |
| **Manage Threads**   | Creating dedicated threads for active Contests.                                                                                                      |
| **Manage Roles**     | Auto-assigning roles based on rank or Contest wins. Required for [Role Automation](/for-guild-admins/guild-settings.md#permission-related-settings). |
| **Mention Everyone** | Pinging `@everyone` for Contest starts (use sparingly — most servers don't enable this for bots).                                                    |

## Channel-specific permissions

The bot may have permissions at the server level but be blocked in specific channels. This is the most common source of "bot works in #general but not #battles" issues.

### How to check

In Discord:

1. Right-click the channel → **Edit Channel**.
2. Go to **Permissions**.
3. Find the **RivalRyze Bot** role (or the bot itself if it doesn't have a role).
4. Verify the permissions match the table above.

If you don't see the bot or its role in the permission list:

* The channel uses the default server permissions (which should be fine if you granted them at the server level).
* Or there's a `@everyone` override that blocks the bot from this channel.

### Activity Feed channel

The bot must have permissions in the **Activity Feed channel** specifically. If you change the activity channel to one where the bot can't post, automatic announcements stop.

Run `/guild-permissions` after changing the activity channel to verify.

## Role hierarchy

Discord respects role hierarchy. If the bot's role is below the role of a member you want it to manage, the bot can't act on that member.

Specifically:

* For **role automation** (auto-assigning roles), the bot's role must be **above** the roles it's assigning.
* For everything else, hierarchy doesn't matter.

**To fix:** **Server Settings → Roles** → drag the RivalRyze Bot role above the roles it needs to manage.

## Privacy implications

Now that you know what permissions the bot has, here's what it actually reads or stores:

* **Channel and message content:** the bot reads **only** the content of slash commands directed at it (slash commands are filtered to the bot at the Discord layer). It does NOT read other messages in the channel.
* **Member list:** the bot reads your server's member list to sync members. It does NOT track who joins / leaves at the individual level beyond updating member sync.
* **Roles:** the bot reads members' roles for role-based Contest access checks.
* **Direct messages:** the bot can DM members **only if their privacy settings allow DMs from server members**. It will never DM a member who has DMs blocked.

The bot does **not**:

* Read your members' private DMs.
* Track or log non-command messages.
* Share your server's data with other RivalRyze guilds.

## Common permission-related errors

### "I tried to use a command but the bot didn't respond."

* Run `/guild-permissions` in the same channel. If the bot can't even respond to that, it's missing **Send Messages** or **Use Application Commands**.
* If the bot responds to `/guild-permissions` but not other commands, those specific commands may need additional permissions (see the breakdown above).

### "The bot posts in #general but not in our activity channel."

* The activity channel has channel-specific permission overrides that block the bot.
* Fix: **Edit Channel → Permissions** → grant the bot **View Channel**, **Send Messages**, **Embed Links**, **Attach Files**.

### "The bot can't assign roles."

* The bot's role is below the role it's trying to assign in the hierarchy. Drag the bot's role higher in **Server Settings → Roles**.
* Or the bot is missing **Manage Roles**. Grant it at the server level.

### "Member sync doesn't show all our members."

* Privileged intents may not be fully enabled. This is a server-size threshold thing. Below 100 servers, the bot uses standard intents; above 100, it requires Discord's approval for privileged intents.
* Contact [support](/help-and-faq/contact-support.md) if you suspect this — we can verify what's enabled at our end.

## Re-running setup vs. fixing permissions

If permissions are wrong but the bot has otherwise registered the guild correctly, you don't need to re-run `/setup`. Just fix the permissions and the bot picks up the new state immediately.

Re-run `/setup` only if:

* You changed Discord servers (rare).
* You want to change the activity channel and don't want to use `/guild-settings`.
* The setup itself failed and you need a clean retry.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.rivalryze.com/for-guild-admins/bot-permissions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
