> ## Documentation Index
> Fetch the complete documentation index at: https://docs.onyx.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Discord Bot

> Configure your Discord bot

## Overview

You can access Onyx Cloud or your self-hosted instance through a Discord bot.

<Note>
  If you want to use Onyx Cloud, you must use the official OnyxBot Discord app.

  Self-hosted instances must create their own Discord app in the Developer Portal.
</Note>

## Configuration

### Official OnyxBot

You'll need to be an admin of the Discord server and an admin in your Onyx instance to install and configure OnyxBot.

<Steps>
  <Step title="Install OnyxBot in your Discord server">
    Click [here](https://discord.com/oauth2/authorize?client_id=1460722463431327804)
    to install the official OnyxBot in your Discord server.

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/install_discordbot.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=5e76aa22e1b5be96b138ccecb9fc1413" alt="Install OnyxBot in Discord server" style={{maxHeight: '400px'}} width="834" height="1048" data-path="assets/admins/discord_bot/install_discordbot.png" />
  </Step>

  <Step title="Allow access to a private text channel">
    Go to the channel settings and click on the "Permissions" tab.

    Add OnyxBot to the "Allowed Users" list.

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/discord_private_channel_config.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=b7477a90cbc2715e86f8af87c71036f6" alt="Allow OnyxBot to access a private text channel" width="1996" height="1050" data-path="assets/admins/discord_bot/discord_private_channel_config.png" />
  </Step>

  <Step title="Create a registration key in Onyx">
    Create or log in to your account on [Onyx Cloud](https://cloud.onyx.app).

    Navigate to the Onyx Admin Panel > Discord Bots and click on the **Add Server** button.

    Copy the registration key.

    <Note>
      The registration key will only be shown once. If you lose it,
      delete the server configuration and create a new one.

      The key is invalidated as soon as you use it and does not allow any other access to your Onyx instance.
    </Note>
  </Step>

  <Step title="Register your Server in Onyx">
    Send your registration key in the private channel you allowed OnyxBot to access.

    OnyxBot should respond with a message confirming the server has been registered.

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/register_server.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=7666a580a4037a084924eb02ea77883e" alt="OnyxBot registered in Onyx" width="1582" height="208" data-path="assets/admins/discord_bot/register_server.png" />

    In Onyx, you should see the server status **Registered**.

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/configured_discord_server.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=0b76b71c9438c523b24977b9a5b11b0c" alt="OnyxBot registered in Onyx" width="1798" height="1146" data-path="assets/admins/discord_bot/configured_discord_server.png" />
  </Step>

  <Step title="Configure Channel behavior">
    Click the pencil icon next to the server name to configure the bot's behavior.

    <Tip>
      By default, the bot will not respond in any channels. You must select the channels you want the bot to respond in.

      We highly recommend configuring a **custom agent** with specific data access for the bot.
      Otherwise it may answer from privately indexed data.
    </Tip>

    You can customize:

    * The default agent that powers the bot's responses
    * Agent overrides for specific channels
    * Whether the bot should respond to all messages or only to messages tagged with @OnyxBot
    * Whether the bot responds in replies or threads

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/discord_channel_configs.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=d02bafba8952f94e0c65a0428738d161" alt="Configure Channel Behavior" width="2348" height="1774" data-path="assets/admins/discord_bot/discord_channel_configs.png" />
  </Step>
</Steps>

### Self-hosted Discord Bot

If you want to deploy your own Discord bot with your self-hosted Onyx instance,
you'll need to set up your own Discord app.

<Info>
  In the Developer Portal, you'll see references to "Guilds." This is Discord's internal term for servers.
</Info>

<Steps>
  <Step title="Create a new Discord app">
    Navigate to the [Discord Developer Portal](https://discord.com/developers/applications)
    and click **New Application**.

    Give your app a name and click **Create**.

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/new_discord_app.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=7891d436a57204ee0c0ac8792d68f389" alt="Create a new Discord app" width="2272" height="1070" data-path="assets/admins/discord_bot/new_discord_app.png" />
  </Step>

  <Step title="Configure permissions and installation settings">
    Navigate to the **Installation** tab.

    Uncheck **User Install**. The Discord app cannot be installed for pesronal use.
    It must be installed in servers only.

    Add the following scopes:

    ```
    - bot
    - applications.commands
    ```

    Add the following permissions:

    ```
    - View channels
    - Send messages
    - Send messages in threads
    - Create public threads
    - Create private threads
    - Read message history
    - Add reactions
    ```

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/installation_config.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=9afa1ba9d8920d6a8cafcd6d02ca2520" alt="Discord installation configuration" width="2950" height="2112" data-path="assets/admins/discord_bot/installation_config.png" />
  </Step>

  <Step title="Enable Privileged Gateway Intents">
    On the **Bot** tab, scroll to the **Privileged Gateway Intents** section and enable all 3 toggles:

    * Presence Intent
    * Server Members Intent
    * Message Content Intent

    <img className="rounded-image" src="https://mintcdn.com/danswer/jFVvBGNG63gsAytn/assets/admins/discord_bot/privileged_gateway_intents.png?fit=max&auto=format&n=jFVvBGNG63gsAytn&q=85&s=6cd71baec4120130296b825cd9bc0bb0" alt="Discord privileged gateway intents" width="4056" height="1254" data-path="assets/admins/discord_bot/privileged_gateway_intents.png" />
  </Step>

  <Step title="Install the app in your Discord server">
    Use the **Install Link** on the **Installation** tab to install the app in your Discord server.
  </Step>

  <Step title="Allow your app to access a private text channel">
    Go to the channel settings and click on the "Permissions" tab.

    Add your app to the "Allowed Users" list.

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/discord_private_channel_config.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=b7477a90cbc2715e86f8af87c71036f6" alt="Allow OnyxBot to access a private text channel" width="1996" height="1050" data-path="assets/admins/discord_bot/discord_private_channel_config.png" />
  </Step>

  <Step title="Retrieve your bot token">
    In the Developer Portal, navigate to the **Bot** tab and look for the **Token** section.

    Click **Reset Token** and copy your bot token.

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/bot_token_config.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=e13cf18f838653e427ae93404e285078" alt="Discord bot token configuration" width="2180" height="1472" data-path="assets/admins/discord_bot/bot_token_config.png" />
  </Step>

  <Step title="Configure your app in Onyx">
    Navigate to the Onyx Admin Panel > Discord Bots.

    Paste your bot token into the **Bot Token** field and click **Create!**

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/configure_discord_bot_token.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=7479f58a5db4dae1dce5209d033789cb" alt="Discord bot token" width="1798" height="1038" data-path="assets/admins/discord_bot/configure_discord_bot_token.png" />
  </Step>

  <Step title="Create a registration key in Onyx">
    Click on the **Add Server** button and copy the registration key.

    <Note>
      The registration key will only be shown once. If you lose it,
      delete the server configuration and create a new one.

      The key is invalidated as soon as you use it and does not allow any other access to your Onyx instance.
    </Note>
  </Step>

  <Step title="Register your Server in Onyx">
    Send your registration key in the private channel you allowed your app to access.

    Your Onyx bot should respond with a message confirming the server has been registered.

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/register_server.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=7666a580a4037a084924eb02ea77883e" alt="OnyxBot registered in Onyx" width="1582" height="208" data-path="assets/admins/discord_bot/register_server.png" />

    In Onyx, you should see the server status **Registered**.

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/configured_discord_server.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=0b76b71c9438c523b24977b9a5b11b0c" alt="OnyxBot registered in Onyx" width="1798" height="1146" data-path="assets/admins/discord_bot/configured_discord_server.png" />
  </Step>

  <Step title="Configure Channel behavior">
    Click the pencil icon next to the server name to configure the bot's behavior.

    <Tip>
      By default, the bot will not respond in any channels. You must select the channels you want the bot to respond in.

      We highly recommend configuring a **custom agent** with specific data access for the bot.
      Otherwise it may answer from privately indexed data.
    </Tip>

    You can customize:

    * The default agent that powers the bot's responses
    * Agent overrides for specific channels
    * Whether the bot should respond to all messages or only to messages tagged with @OnyxBot
    * Whether the bot responds in replies or threads

    <img className="rounded-image" src="https://mintcdn.com/danswer/RPTrgzSSFwhlhZJr/assets/admins/discord_bot/discord_channel_configs.png?fit=max&auto=format&n=RPTrgzSSFwhlhZJr&q=85&s=d02bafba8952f94e0c65a0428738d161" alt="Configure Channel Behavior" width="2348" height="1774" data-path="assets/admins/discord_bot/discord_channel_configs.png" />
  </Step>
</Steps>

## FAQ

### Why can't I see all of my channels in Onyx?

If you've added or removed channels from your Discord server, you'll need to sync the channels to Onyx.

Run `!sync-channels` in any text channel that OnyxBot has access to.

### `!` is already taken by another command!

`!sync-channels` is currently the only command supported for OnyxBot.

If you are self-hosting, you can set the `DISCORD_BOT_INVOKE_CHAR` environment variable to change the command prefix.

If you are using the official OnyxBot, unfortunately, we cannot change the prefix. However,
you may still be able to run the command by creating a private channel that only OnyxBot has access to.

### My Discord bot is connected but not responding to any messages

If you are seeing this behavior, you could be experiencing the following error (in background container):

```
api_client.py  182: Failed to connect to API: Cannot connect to host 127.0.0.1:8080
```

To fix this, make sure you have the latest docker-compose.yml files by running `git pull` in your Onyx repo.
Verify that `API_SERVER_PROTOCOL` and `API_SERVER_HOST` exists in your compose file.
