Discord Skill: Full Server Control for AI Agents — Messages, Polls, Threads, and Moderation
With over 17,000 downloads and 46 stars, the discord skill by @steipete is the most complete Discord integration on ClawHub. It gives Claude full control over Discord through the Clawdbot discord tool: sending and editing messages, running polls, managing threads and pins, uploading custom emojis and stickers, reading message history, and — when enabled — handling moderation actions like timeouts, kicks, and bans.
The Problem It Solves
Discord communities generate enormous operational overhead: welcoming new members, answering repeated questions, running polls for decisions, pinning important announcements, moderating rule violations, and keeping threads organized. Most community managers do this manually, one action at a time.
Discord bots exist to automate these tasks, but they require a developer to write, host, and maintain them. The discord skill inverts this: Claude becomes the Discord operator, with the bot token you've already configured in Clawdbot. No separate bot to build. No hosting required. Just describe what you want done in natural language.
Architecture
The skill uses the discord tool built into Clawdbot, which communicates with the Discord API using your server's bot token. Actions are submitted as JSON objects with an action field specifying the operation. Every action type can be enabled or disabled independently via discord.actions.* flags, so you can expose only the capabilities you want Claude to use.
Messaging
Send Messages
{
"action": "sendMessage",
"to": "channel:123456789",
"content": "release v2.1.0 is live — changelog in #releases"
}Note the to: "channel:<id>" format — sendMessage uses this instead of a raw channelId.
To a user (DM):
{
"action": "sendMessage",
"to": "user:987654321",
"content": "Hey! Your PR was merged."
}With a file or media attachment:
{
"action": "sendMessage",
"to": "channel:123456789",
"content": "This week's metrics",
"mediaUrl": "file:///tmp/report.pdf"
}Both local files (file:///path) and remote URLs (https://...) work as mediaUrl.
Reply to a specific message:
{
"action": "sendMessage",
"to": "channel:123456789",
"content": "Good catch — fixed in the latest build",
"replyTo": "111222333"
}Edit and Delete
{ "action": "editMessage", "channelId": "123", "messageId": "456", "content": "corrected text" }
{ "action": "deleteMessage", "channelId": "123", "messageId": "456" }Read Recent Messages
{
"action": "readMessages",
"channelId": "123456789",
"limit": 20
}Reactions
{ "action": "react", "channelId": "123", "messageId": "456", "emoji": "✅" }
{ "action": "reactions", "channelId": "123", "messageId": "456", "limit": 100 }Reactions are especially useful as status signals: ✅ for acknowledged, ⚠️ for needs attention, 🚀 for shipped.
Polls
{
"action": "poll",
"to": "channel:123456789",
"question": "When should we ship v3.0?",
"answers": ["This Friday", "Next Monday", "After QA pass"],
"allowMultiselect": false,
"durationHours": 48,
"content": "Team vote — please respond by EOD"
}Polls support 2–10 answer options, optional multi-select, and durations up to 32 days (768 hours). Defaults to 24 hours.
Threads
// Create a thread from a message
{ "action": "threadCreate", "channelId": "123", "messageId": "456", "name": "Bug: login redirect fails" }
// Reply inside a thread
{ "action": "threadReply", "channelId": "777", "content": "Confirmed fixed in build 1423" }
// List all active threads
{ "action": "threadList", "guildId": "999" }Threads keep conversations organized without cluttering the main channel. Creating a thread from a bug report or feature request message is a common use pattern.
Pins
{ "action": "pinMessage", "channelId": "123", "messageId": "456" }
{ "action": "listPins", "channelId": "123" }Search Messages
{
"action": "searchMessages",
"guildId": "999",
"content": "deployment issue",
"channelIds": ["123", "456"],
"limit": 10
}Cross-channel search is powerful for community managers who need to find past discussions, track down specific announcements, or audit a user's message history.
Custom Emojis and Stickers
Upload a Custom Emoji
{
"action": "emojiUpload",
"guildId": "999",
"name": "ship_it",
"mediaUrl": "file:///tmp/ship.png",
"roleIds": []
}PNG/JPG/GIF, max 256KB. roleIds restricts usage to specific roles — omit for everyone.
Upload a Sticker
{
"action": "stickerUpload",
"guildId": "999",
"name": "celebrate",
"description": "Celebration sticker",
"tags": "🎉",
"mediaUrl": "file:///tmp/celebrate.png"
}PNG/APNG/Lottie JSON, max 512KB. Requires name, description, and tags.
Send a Sticker
{
"action": "sticker",
"to": "channel:123",
"stickerIds": ["9876543210"],
"content": "Nice work!"
}Up to 3 sticker IDs per message.
Server Information
// Channel details
{ "action": "channelInfo", "channelId": "123" }
{ "action": "channelList", "guildId": "999" }
// Member and role info
{ "action": "memberInfo", "guildId": "999", "userId": "111" }
{ "action": "roleInfo", "guildId": "999" }
// Bot's permissions in a channel
{ "action": "permissions", "channelId": "123" }
// Voice channel status
{ "action": "voiceStatus", "guildId": "999", "userId": "111" }
// Scheduled events
{ "action": "eventList", "guildId": "999" }Moderation (Disabled by Default)
Moderation actions are off by default and must be explicitly enabled via discord.actions.moderation = true:
// Timeout a user for 10 minutes
{ "action": "timeout", "guildId": "999", "userId": "111", "durationMinutes": 10 }Role changes are also disabled by default (discord.actions.roles):
{ "action": "roleAdd", "guildId": "999", "userId": "111", "roleId": "222" }
{ "action": "roleRemove", "guildId": "999", "userId": "111", "roleId": "222" }Action Gating
One of the skill's more useful features is the ability to restrict which action groups Claude can use. This is important for shared bots or when you want to limit Claude's scope:
| Group | Default | Covers |
|---|---|---|
reactions | enabled | react, list reactions, emojiList |
stickers | enabled | send stickers |
polls | enabled | create polls |
messages | enabled | send/edit/delete/read |
threads | enabled | create/list/reply |
pins | enabled | pin/list |
search | enabled | searchMessages |
emojiUploads | enabled | upload custom emojis |
stickerUploads | enabled | upload stickers |
memberInfo | enabled | member lookup |
roleInfo | enabled | role listing |
channelInfo | enabled | channel details |
roles | disabled | role add/remove |
moderation | disabled | timeout/kick/ban |
The Discord Writing Style Guide
One distinctive feature of this skill: its skillMd includes a built-in writing style guide for Discord communication. Claude follows it automatically.
The core rule: Discord is a chat platform, not documentation. Short, casual messages. No markdown tables (they render as ugly raw text). No ## Headers. Multiple quick replies instead of one wall of text. Match the energy of the conversation.
Bad (what Claude avoids):
I'd be happy to help with that! Here's a comprehensive overview of the versioning strategies available:
Semantic Versioning
Semver uses MAJOR.MINOR.PATCH format where...
Good (what Claude produces):
versioning options: semver (1.2.3), calver (2026.01.04), or yolo (
latestforever). what fits your release cadence?
This style awareness makes Claude feel native to Discord rather than like a bot pasting documentation excerpts into chat.
How to Install
clawdbot install discordThe skill requires a Discord bot token configured in Clawdbot. Add your bot to the target server with the appropriate permissions, then set the token in Clawdbot's configuration.
Practical Tips
-
Use reactions as lightweight status signals. Rather than sending a message to acknowledge every post, react with ✅ (done), 👀 (reviewing), or ⚠️ (needs attention). It's lower noise and immediately scannable.
-
Create threads from messages, not from scratch. When someone posts a bug report or feature request, use
threadCreatewith the originalmessageId. This keeps discussion tied to the original context rather than creating a disconnected thread. -
Run polls before making irreversible decisions. A 24-hour poll before a release schedule change, a major policy update, or a community event takes 30 seconds to set up and surfaces disagreement before it becomes conflict.
-
Search before you ask. Before answering "has this been discussed before?" use
searchMessagesto check. Common community questions often have detailed past answers that can be linked rather than re-explained. -
Use DM stickers as acknowledgements. When a user's request is completed, send them a celebratory sticker via DM rather than a plain "Done." It's more personal and matches Discord's culture.
-
Enable moderation only when needed. Keep
discord.actions.moderationdisabled by default. Enable it temporarily when you need to handle a specific situation, then disable it again. This prevents accidental moderation actions.
Considerations
- Bot token required: The skill uses the bot token configured in Clawdbot, not a user account token. Your bot needs to be invited to the server with appropriate permissions for each action type.
- Channel ID vs
to:format inconsistency:sendMessageusesto: "channel:<id>"while other actions usechannelIddirectly. This is a known quirk — pay attention when constructing requests manually. - Discord rate limits apply: Discord's API rate limits still apply to bot actions. High-volume automation (many messages per second) will hit limits and need retry handling.
- No event listening: This skill sends and retrieves data — it doesn't set up a listener for incoming messages or events. Real-time triggers require a separate event handling setup.
The Bigger Picture
Discord has become the operating system for many online communities, open-source projects, and gaming groups. But community management at scale is repetitive, time-consuming work. The discord skill makes Claude a capable community operator — not by replacing human judgment, but by handling the mechanical parts: the acknowledgements, the polls, the thread organization, the information lookups.
Steipete's approach (also author of the popular wacli and gemini skills) is consistent: wrap a capable CLI tool with clean, Claude-friendly semantics and a built-in set of best practices. The style guide alone is worth noting — it's rare for a skill to teach Claude how to communicate on the platform it's controlling.
View the skill on ClawHub: discord