Logo
ClawHub Skills Lib
HomeCategoriesUse CasesTrendingBlog
HomeCategoriesUse CasesTrendingBlog
ClawHub Skills Lib
ClawHub Skills Lib

Browse 20,000+ community-built AI agent skills for OpenClaw. Updated daily from clawhub.ai.

Explore

  • Home
  • Trending
  • Use Cases
  • Blog

Categories

  • Development
  • AI & Agents
  • Productivity
  • Communication
  • Data & Research
  • Business
  • Platforms
  • Lifestyle
  • Education
  • Design

Use Cases

  • Security Auditing
  • Workflow Automation
  • Finance & Fintech
  • MCP Integration
  • Crypto Trading
  • Web3 & DeFi
  • Data Analysis
  • Social Media
  • 中文平台技能
  • All Use Cases →
© 2026 ClawHub Skills Lib. All rights reserved.Built with Next.js · Supabase · Prisma
Home/Blog/Discord Skill: Full Server Control for AI Agents — Messages, Polls, Threads, and Moderation
skill-spotlightmessagingdiscordclawhubopenclawcommunityautomation

Discord Skill: Full Server Control for AI Agents — Messages, Polls, Threads, and Moderation

March 10, 2026·8 min read

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:

GroupDefaultCovers
reactionsenabledreact, list reactions, emojiList
stickersenabledsend stickers
pollsenabledcreate polls
messagesenabledsend/edit/delete/read
threadsenabledcreate/list/reply
pinsenabledpin/list
searchenabledsearchMessages
emojiUploadsenabledupload custom emojis
stickerUploadsenabledupload stickers
memberInfoenabledmember lookup
roleInfoenabledrole listing
channelInfoenabledchannel details
rolesdisabledrole add/remove
moderationdisabledtimeout/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 (latest forever). 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 discord

The 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

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

  2. Create threads from messages, not from scratch. When someone posts a bug report or feature request, use threadCreate with the original messageId. This keeps discussion tied to the original context rather than creating a disconnected thread.

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

  4. Search before you ask. Before answering "has this been discussed before?" use searchMessages to check. Common community questions often have detailed past answers that can be linked rather than re-explained.

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

  6. Enable moderation only when needed. Keep discord.actions.moderation disabled 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: sendMessage uses to: "channel:<id>" while other actions use channelId directly. 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

← Back to Blog