conductorv2

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. 1.Go to discord.com/developers/applications and sign in.
  2. 2.Click New Application. Give it a name like "Conductor Bot".
  3. 3.Go to the Bot tab in the sidebar. Click Add Bot.
  4. 4.Under Token, click Reset Token and copy the token. Store it securely — it is only shown once.
  5. 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
// 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.

oauth2 invite url format
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 integer

Finding Guild, Channel, and User IDs

developer mode required
// 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 ID

Conductor 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.

conductor.config.json
{
  "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.

curl — register command
# 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

ToolDescription
discord.message.sendSend a message to a channel by channel ID. Supports content, embeds, and components.
discord.message.listFetch recent messages from a channel. Returns author, content, timestamp, and attachments.
discord.channel.listList all channels in a guild including type, position, and parent category.
discord.channel.createCreate a new text, voice, or category channel in a guild.
discord.guild.listList all guilds the bot is a member of.
discord.member.listList members of a guild. Requires GUILD_MEMBERS privileged intent.
discord.role.listList all roles in a guild with name, color, and position.
discord.role.assignAssign 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

ErrorCauseFix
50001 Missing AccessThe 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 PermissionsThe 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 ChannelThe 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 MemberThe user is not a member of the guild.Confirm the user ID and that the user has not left the server.
40060 Interaction already acknowledgedAn interaction was responded to more than once.Ensure your interaction handler only calls reply or deferReply once per interaction.
Invalid tokenThe 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 enabledGUILD_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 guildsThe 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.