--- title: "Discord" description: "Trigger investigations and receive findings inside a Discord server." --- OpenSRE's Discord integration lets you trigger investigations with the `/investigate` slash command and receive findings as formatted embeds in a dedicated thread — all without leaving Discord. --- ## Prerequisites - A Discord server where you can add applications (server **Manage Server** permission). - An OpenSRE host reachable from the public internet over HTTPS, so Discord can deliver interactions. For local development use a tunnel such as `ngrok`. --- ## Step 1: Create a Discord application and bot 1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click **New Application**. 2. Give it a name (e.g. `OpenSRE`) and click **Create**. 3. Open the **Bot** tab on the left sidebar. (New applications are created with a bot user automatically.) - Under **Token**, click **Reset Token** and copy the value. This is your **Bot Token** — treat it like a password. - Under **Privileged Gateway Intents**, no additional intents are required. 4. Open the **General Information** tab and copy: - **Application ID** - **Public Key** --- ## Step 2: Set bot permissions and invite to your server 1. Open the **OAuth2 → URL Generator** tab. 2. Under **Scopes**, select: - `bot` - `applications.commands` 3. Under **Bot Permissions**, select: - `Send Messages` - `Create Public Threads` - `Send Messages in Threads` - `Embed Links` - `Read Message History` 4. Copy the generated URL and open it in your browser. 5. Select the server you want to add OpenSRE to and click **Authorize**. --- ## Step 3: Set the interactions endpoint URL Discord requires your server to verify it owns the endpoint before slash commands will work. 1. In the **General Information** tab of your application, find **Interactions Endpoint URL**. 2. Set it to: ``` https:///discord/interactions ``` Replace `` with the public hostname where your OpenSRE server is running. 3. Click **Save Changes**. Discord will immediately send a `PING` to that URL and expect a valid response — OpenSRE handles this automatically. The `/discord/interactions` endpoint must be publicly reachable over HTTPS. If you are running locally, use a tunnel such as `ngrok` for testing. --- ## Step 4: Configure the integration in OpenSRE Run the setup wizard and select **Discord**: ```bash opensre onboard ``` When prompted, enter: - **Bot Token** — from Step 1 - **Application ID** — from Step 1 - **Public Key** — from Step 1 - **Default channel ID** *(optional)* — the channel where findings are posted when an investigation is triggered from the CLI rather than from a slash command. To find a channel ID, right-click the channel in Discord → **Copy Channel ID** (requires Developer Mode in Discord settings). OpenSRE then registers the `/investigate` slash command on your application by calling Discord's API with the bot token and application ID. If the call fails (for example, because the token is wrong), you'll see a warning in the wizard output but the integration will still be saved — re-run the wizard with corrected credentials to retry. The wizard writes the following environment variables to your `.env` file: | Variable | Description | |---|---| | `DISCORD_BOT_TOKEN` | Bot token for API calls | | `DISCORD_APPLICATION_ID` | Application ID for slash command registration | | `DISCORD_PUBLIC_KEY` | Ed25519 public key for signature verification | | `DISCORD_DEFAULT_CHANNEL_ID` | Fallback channel for CLI-triggered findings | --- ## Step 5: Trigger an investigation In any Discord channel the bot has access to, run: ``` /investigate alert: ``` OpenSRE will: 1. Acknowledge the command immediately (Discord's "thinking…" state). 2. Run the investigation in the background. 3. Post the findings as a rich embed in the same channel. 4. Create a thread on that message for follow-up context. --- ## Required bot permissions summary | Permission | Why it's needed | |---|---| | `Send Messages` | Post the initial investigation result embed | | `Create Public Threads` | Open a thread on the result message | | `Send Messages in Threads` | Post follow-up content into the thread | | `Embed Links` | Render structured embeds (root cause, evidence, recommendations) | | `Read Message History` | Required for thread creation on existing messages | --- ## Troubleshooting **Slash command not appearing in Discord** The `/investigate` command is registered globally and may take up to one hour to propagate. Re-running `opensre onboard` and selecting Discord will re-register the command. **`DISCORD_PUBLIC_KEY not configured` error on your server** Ensure `DISCORD_PUBLIC_KEY` is set in your environment before starting the OpenSRE server. Re-run `opensre onboard` to write it to `.env`. ``` opensre onboard ``` **Discord returns "This interaction failed"** The background investigation task encountered an error, or your server did not respond to the followup within Discord's 15-minute window. Check your OpenSRE server logs for details. **401 on the interactions endpoint** Your server's public key does not match the one Discord is signing with. Verify `DISCORD_PUBLIC_KEY` matches the value in the **General Information** tab of your Discord application.