Integrations
Discord
Connect Conductor to Discord via a bot application. Covers creating an application, bot tokens, privileged intents, inviting your bot, finding IDs, slash commands, and all available tools.
Creating a Discord application
- 1.Go to discord.com/developers/applications and sign in.
- 2.Click New Application. Give it a name like "Conductor Bot".
- 3.Go to the Bot tab in the sidebar. Click Add Bot.
- 4.Under Token, click Reset Token and copy the token. Store it securely — it is only shown once.
- 5.Enable any required Privileged Gateway Intents (see below).
Important: bot token vs OAuth token
Conductor requires the Bot token — found under Bot → Token. This is different from the OAuth2 client secret shown on the General Information page. Using the OAuth2 client secret as the bot token is a very common mistake and will result in an "Invalid token" error.
Gateway intents
Intents control which events the bot receives. Some are privileged and must be explicitly enabled in the Developer Portal before they work. Missing a required intent is the most common cause of empty responses from member or message tools.
// Required intents — enable in Discord Developer Portal
// Application → Bot → Privileged Gateway Intents
GUILDS — basic guild info, channels, roles (non-privileged)
GUILD_MESSAGES — receive message events in guilds (non-privileged)
GUILD_MEMBERS — member list and join/leave events (PRIVILEGED)
MESSAGE_CONTENT — read message content in guild messages (PRIVILEGED)
// Without MESSAGE_CONTENT, message.content will be empty string
// for bot messages unless the message mentions your bot directly.Enable privileged intents at Developer Portal → Your App → Bot → Privileged Gateway Intents.
Inviting the bot to a server
Use the OAuth2 URL Generator in the Developer Portal, or construct the URL manually. Go to OAuth2 → URL Generator, select the bot and applications.commands scopes, then pick the required bot permissions. Copy the generated URL and open it in a browser.
https://discord.com/api/oauth2/authorize
?client_id=YOUR_CLIENT_ID
&permissions=8
&scope=bot%20applications.commands
# Minimum permissions for most tools (instead of Administrator):
# 1024 — Read Messages / View Channels
# 2048 — Send Messages
# 16384 — Read Message History
# 268435456 — Manage Roles
# Add them together for the permissions integerFinding Guild, Channel, and User IDs
// Finding IDs — requires Developer Mode
// Settings → App Settings → Advanced → Developer Mode → ON
// Guild ID: Right-click the server icon → Copy Server ID
// Channel ID: Right-click any channel → Copy Channel ID
// User ID: Right-click any username → Copy User ID
// Message ID: Right-click any message → Copy Message IDConductor config
The guildId is optional but recommended — it scopes all tool operations to a specific server by default. You can still override the guild on a per-call basis.
{
"plugins": {
"discord": {
"token": "MTExxxxxxxxxxxxxxxxxxx.Xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"guildId": "123456789012345678"
}
}
}Slash command registration
Global commands propagate to all guilds but take up to 1 hour to update. Guild-scoped commands update instantly — use these during development. Conductor can register commands on your behalf, or you can register them directly via the Discord API.
# Register slash commands globally (takes up to 1 hour to propagate)
curl -X POST \
https://discord.com/api/v10/applications/YOUR_APP_ID/commands \
-H "Authorization: Bot YOUR_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"ping","description":"Replies with pong"}'
# Register for a single guild instantly (for development)
curl -X POST \
https://discord.com/api/v10/applications/YOUR_APP_ID/guilds/GUILD_ID/commands \
-H "Authorization: Bot YOUR_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"ping","description":"Replies with pong"}'Available tools
| Tool | Description |
|---|---|
| discord.message.send | Send a message to a channel by channel ID. Supports content, embeds, and components. |
| discord.message.list | Fetch recent messages from a channel. Returns author, content, timestamp, and attachments. |
| discord.channel.list | List all channels in a guild including type, position, and parent category. |
| discord.channel.create | Create a new text, voice, or category channel in a guild. |
| discord.guild.list | List all guilds the bot is a member of. |
| discord.member.list | List members of a guild. Requires GUILD_MEMBERS privileged intent. |
| discord.role.list | List all roles in a guild with name, color, and position. |
| discord.role.assign | Assign a role to a guild member by user ID and role ID. |
Rate limits
Discord enforces two types of rate limits. Per-route limits apply to specific endpoints (e.g., sending messages to a channel has a limit of 5 messages per 5 seconds per channel). The global rate limit is 50 requests per second across all routes for a single bot token. Conductor handles 429 responses with automatic backoff using the retry_after value from the response header.
Webhook endpoints have separate rate limits from the bot API: 30 requests per 60 seconds per webhook.
Common errors
| Error | Cause | Fix |
|---|---|---|
| 50001 Missing Access | The bot cannot see the channel or guild resource. | Ensure the bot role has View Channel permission in that channel. Check channel permission overwrites. |
| 50013 Missing Permissions | The bot can see the resource but lacks the required permission for the action. | Grant the bot role the specific permission (e.g., Send Messages, Manage Roles). Check per-channel overrides. |
| 10003 Unknown Channel | The channel ID does not exist or the bot cannot access it. | Verify the channel ID with Developer Mode. Confirm the bot is in the same guild. |
| 10007 Unknown Member | The user is not a member of the guild. | Confirm the user ID and that the user has not left the server. |
| 40060 Interaction already acknowledged | An interaction was responded to more than once. | Ensure your interaction handler only calls reply or deferReply once per interaction. |
| Invalid token | The bot token is incorrect, expired, or was regenerated. | Go to Discord Developer Portal → Your App → Bot → Reset Token. Update the Conductor config with the new token. |
| Privileged intent not enabled | GUILD_MEMBERS or MESSAGE_CONTENT intent is used but not enabled in the portal. | Go to Developer Portal → Your App → Bot → Privileged Gateway Intents. Toggle on the required intents. |
| 30001 Maximum guilds | The bot is in 100+ guilds without verification. | Apply for bot verification at discord.com/developers if your bot needs to join more than 100 guilds. |