Discord Bot API via curl. Use this skill to interact with channels, guilds, users, and messages using a bot token.
Install
npx skillscat add vm0-ai/vm0-skills/discord Install via the SkillsCat registry.
This skill enables interaction with the Discord Bot API through curl commands, allowing management of channels, guilds, users, and messages using a bot token. It provides programmatic access to Discord functionality for automation and integration tasks. Developers should use it when they need to send messages, read channel content, manage server settings, or moderate Discord communities via direct API calls.
Discord Bot API
Use the Discord Bot API via direct curl calls to manage channels, guilds, messages, and users.
Official docs:
https://discord.com/developers/docs
When to Use
Use this skill when you need to:
- Send messages to specific channels
- Read messages from channels
- Manage channels (create, edit, delete)
- Get server info (guilds, members, roles)
- React to messages and moderate content
- Create webhooks programmatically
For simple message posting, use discord-webhook skill instead.
Prerequisites
1. Create Application
- Go to Discord Developer Portal
- Click "New Application" and give it a name
- Go to "Bot" section and click "Add Bot"
2. Get Bot Token
- In Bot section, click "Reset Token"
- Copy the token (shown only once)
export DISCORD_BOT_TOKEN="MTIzNDU2Nzg5MDEyMzQ1Njc4OQ.ABcDeF.xxxxx..."3. Enable Intents (if needed)
In Bot section, enable:
- Presence Intent (for user status)
- Server Members Intent (for member list)
- Message Content Intent (for reading messages)
4. Invite Bot to Server
- Go to OAuth2 → URL Generator
- Select scopes:
bot,applications.commands - Select permissions needed (e.g., Send Messages, Read Messages)
- Copy URL and open in browser to invite
5. Get IDs
Enable Developer Mode: User Settings → Advanced → Developer Mode
Right-click any channel/user/server → Copy ID
Important: When using
$VARin a command that pipes to another command, wrap the command containing$VARinbash -c '...'. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.bash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY"' | jq .
How to Use
Base URL: https://discord.com/api/v10
Authorization header: Authorization: Bot YOUR_TOKEN
1. Get Current Bot User
bash -c 'curl -s "https://discord.com/api/v10/users/@me" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"' | jq '{id, username, discriminator}'2. Send Message to Channel
Write to /tmp/discord_request.json:
{
"content": "Hello from bot!"
}Then run (replace <your-channel-id> with the actual channel ID):
bash -c 'curl -s -X POST "https://discord.com/api/v10/channels/<your-channel-id>/messages" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" -H "Content-Type: application/json" -d @/tmp/discord_request.json'3. Send Embed Message
Write to /tmp/discord_request.json:
{
"embeds": [
{
"title": "Bot Message",
"description": "This is from the bot API",
"color": 5793266
}
]
}Then run (replace <your-channel-id> with the actual channel ID):
bash -c 'curl -s -X POST "https://discord.com/api/v10/channels/<your-channel-id>/messages" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" -H "Content-Type: application/json" -d @/tmp/discord_request.json'4. Get Channel Info
Replace <your-channel-id> with the actual channel ID:
bash -c 'curl -s "https://discord.com/api/v10/channels/<your-channel-id>" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"' | jq '{id, name, type, guild_id}'5. Get Channel Messages
Replace <your-channel-id> with the actual channel ID:
bash -c 'curl -s "https://discord.com/api/v10/channels/<your-channel-id>/messages?limit=10" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"' | jq '.[] | {id, author: .author.username, content}'6. Get Specific Message
Replace <your-channel-id> and <your-message-id> with the actual IDs:
bash -c 'curl -s "https://discord.com/api/v10/channels/<your-channel-id>/messages/<your-message-id>" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"' | jq '{id, content, author: .author.username}'7. Delete Message
Replace <your-channel-id> and <your-message-id> with the actual IDs:
bash -c 'curl -s -X DELETE "https://discord.com/api/v10/channels/<your-channel-id>/messages/<your-message-id>" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"'8. Add Reaction
Replace <your-channel-id> and <your-message-id> with the actual IDs:
bash -c 'curl -s -X PUT "https://discord.com/api/v10/channels/<your-channel-id>/messages/<your-message-id>/reactions/%F0%9F%91%8D/@me" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" -H "Content-Length: 0"'Note: Emoji must be URL encoded (👍 = %F0%9F%91%8D)
9. Get Guild (Server) Info
Replace <your-guild-id> with the actual guild ID:
bash -c 'curl -s "https://discord.com/api/v10/guilds/<your-guild-id>" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"' | jq '{id, name, member_count, owner_id}'10. List Guild Channels
Replace <your-guild-id> with the actual guild ID:
bash -c 'curl -s "https://discord.com/api/v10/guilds/<your-guild-id>/channels" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"' | jq '.[] | {id, name, type}'11. Get Guild Members
Replace <your-guild-id> with the actual guild ID:
bash -c 'curl -s "https://discord.com/api/v10/guilds/<your-guild-id>/members?limit=10" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"' | jq '.[] | {user: .user.username, nick, joined_at}'12. Get Guild Roles
Replace <your-guild-id> with the actual guild ID:
bash -c 'curl -s "https://discord.com/api/v10/guilds/<your-guild-id>/roles" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"' | jq '.[] | {id, name, color, position}'13. Create Webhook
Write to /tmp/discord_request.json:
{
"name": "My Webhook"
}Then run (replace <your-channel-id> with the actual channel ID):
bash -c 'curl -s -X POST "https://discord.com/api/v10/channels/<your-channel-id>/webhooks" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" -H "Content-Type: application/json" -d @/tmp/discord_request.json' | jq '{id, token, url: "https://discord.com/api/webhooks/\(.id)/\(.token)"}'14. List Channel Webhooks
Replace <your-channel-id> with the actual channel ID:
bash -c 'curl -s "https://discord.com/api/v10/channels/<your-channel-id>/webhooks" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"' | jq '.[] | {id, name, token}'15. Create Text Channel
Write to /tmp/discord_request.json:
{
"name": "new-channel",
"type": 0
}Then run (replace <your-guild-id> with the actual guild ID):
bash -c 'curl -s -X POST "https://discord.com/api/v10/guilds/<your-guild-id>/channels" -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" -H "Content-Type: application/json" -d @/tmp/discord_request.json' | jq '{id, name}'Channel Types
| Type | Description |
|---|---|
| 0 | Text channel |
| 2 | Voice channel |
| 4 | Category |
| 5 | Announcement |
| 13 | Stage |
| 15 | Forum |
Guidelines
- Rate limits: Check
X-RateLimit-*headers; implement backoff - Token security: Never expose bot tokens
- Permissions: Bot needs appropriate permissions for each action
- Intents: Enable required intents in Developer Portal
- API version: Use
/v10for latest stable API