Agent skill

Discord Actions for OpenClaw

by smallnest in smallnest/goclaw

Reference for OpenClaw's discord tool: sending messages, reactions, stickers, emoji uploads, polls, threads and moderation in Discord channels and DMs.

MITAuto-check passedProductivity & Automation

Install Discord Actions for OpenClaw

skills CLI
$ npx skills add smallnest/goclaw --skill discord -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install smallnest/goclaw discord --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/smallnest/goclaw.git skills-src && mkdir -p .claude/skills && cp -r skills-src/internal/builtin_skills/discord .claude/skills/discord && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
discord
GitHub stars
598
Used in
1 other repo
Token cost
~2.9k tokens
SKILL.md length
824 words
Files
1
Skills in repo
6
Repo updated
First seen
Licence
MIT

At a glance

Reference for OpenClaw's discord tool: sending messages, reactions, stickers, emoji uploads, polls, threads and moderation in Discord channels and DMs.

  • Posting a message, poll or sticker to a Discord channel or DM from an agent
  • SKILL.md covers Overview, Inputs to collect, Actions and Ideas to try, plus 2 more sections
  • Reaches discord.com and twitch.tv
  • Uploading a custom emoji or sticker to a server

What it does

This skill documents the discord tool, which works through the bot token configured for OpenClaw. Action groups can be switched off with discord.actions settings; all are enabled by default except roles and moderation. Beyond what the examples show, the description lists thread, pin and search management, creating and editing channels and categories, reading permissions and member, role and channel info, setting bot presence, and moderation.

It explains which inputs each action needs. Reactions take a channelId, messageId and emoji. Sending messages, stickers and polls uses a to target of the form channel:ID or user:ID, and fetchMessage accepts a message link. Polls need a question and 2 to 10 answers, last 24 hours by default and at most 32 days. Media comes from a file:// path or an https URL.

Upload limits are spelled out: custom emoji must be PNG, JPG or GIF up to 256KB with optional role restrictions, and stickers need a name, description and tags with PNG, APNG or Lottie JSON files up to 512KB. A message can carry up to 3 stickers.

When your agent uses it

  • Posting a message, poll or sticker to a Discord channel or DM from an agent
  • Uploading a custom emoji or sticker to a server
  • Checking the bot's permissions in a channel before acting

Example prompts

  • “Post a poll in the announcements channel asking which feature to build next, with four answers.”
  • “React with a thumbs up to the message from our last release thread.”
  • “Check what permissions the bot has in the support channel.”

Requirements

  • An OpenClaw setup with the discord tool
  • A Discord bot token configured for OpenClaw

What it can do on your machine

Read from SKILL.md and the folder at commit e05c79d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • discord.com
    • twitch.tv

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Discord Actions for OpenClaw loads about 2.9k tokens when it runs. Until then it costs about 89 tokens; SKILL.md has 824 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~89
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from smallnest/goclaw at commit e05c79d, republished under its MIT licence (© smallnest). 824 words, ~2,946 tokens.

Download SKILL.mdSave it as .claude/skills/discord/SKILL.md (or your agent's skills folder).
name
discord
description
Use when you need to control Discord from OpenClaw via the discord tool: send messages, react, post or upload stickers, upload emojis, run polls, manage threads/pins/search, create/edit/delete channels and categories, fetch permissions or member/role/channel info, set bot presence/activity, or handle moderation actions in Discord DMs or channels.
metadata
{"goclaw":{"emoji":"🎮","requires":{"config":["channels.discord"]}}}

Discord Actions

Overview

Use discord to manage messages, reactions, threads, polls, and moderation. You can disable groups via discord.actions.* (defaults to enabled, except roles/moderation). The tool uses the bot token configured for OpenClaw.

Inputs to collect

  • For reactions: channelId, messageId, and an emoji.
  • For fetchMessage: guildId, channelId, messageId, or a messageLink like https://discord.com/channels/<guildId>/<channelId>/<messageId>.
  • For stickers/polls/sendMessage: a to target (channel:<id> or user:<id>). Optional content text.
  • Polls also need a question plus 2–10 answers.
  • For media: mediaUrl with file:///path for local files or https://... for remote.
  • For emoji uploads: guildId, name, mediaUrl, optional roleIds (limit 256KB, PNG/JPG/GIF).
  • For sticker uploads: guildId, name, description, tags, mediaUrl (limit 512KB, PNG/APNG/Lottie JSON).

Message context lines include discord message id and channel fields you can reuse directly.

Note: sendMessage uses to: "channel:<id>" format, not channelId. Other actions like react, readMessages, editMessage use channelId directly. Note: fetchMessage accepts message IDs or full links like https://discord.com/channels/<guildId>/<channelId>/<messageId>.

Actions

React to a message
json
{
  "action": "react",
  "channelId": "123",
  "messageId": "456",
  "emoji": "✅"
}
List reactions + users
json
{
  "action": "reactions",
  "channelId": "123",
  "messageId": "456",
  "limit": 100
}
Send a sticker
json
{
  "action": "sticker",
  "to": "channel:123",
  "stickerIds": ["9876543210"],
  "content": "Nice work!"
}
  • Up to 3 sticker IDs per message.
  • to can be user:<id> for DMs.
Upload a custom emoji
json
{
  "action": "emojiUpload",
  "guildId": "999",
  "name": "party_blob",
  "mediaUrl": "file:///tmp/party.png",
  "roleIds": ["222"]
}
  • Emoji images must be PNG/JPG/GIF and <= 256KB.
  • roleIds is optional; omit to make the emoji available to everyone.
Upload a sticker
json
{
  "action": "stickerUpload",
  "guildId": "999",
  "name": "openclaw_wave",
  "description": "OpenClaw waving hello",
  "tags": "👋",
  "mediaUrl": "file:///tmp/wave.png"
}
  • Stickers require name, description, and tags.
  • Uploads must be PNG/APNG/Lottie JSON and <= 512KB.
Create a poll
json
{
  "action": "poll",
  "to": "channel:123",
  "question": "Lunch?",
  "answers": ["Pizza", "Sushi", "Salad"],
  "allowMultiselect": false,
  "durationHours": 24,
  "content": "Vote now"
}
  • durationHours defaults to 24; max 32 days (768 hours).
Check bot permissions for a channel
json
{
  "action": "permissions",
  "channelId": "123"
}

Ideas to try

  • React with ✅/⚠️ to mark status updates.
  • Post a quick poll for release decisions or meeting times.
  • Send celebratory stickers after successful deploys.
  • Upload new emojis/stickers for release moments.
  • Run weekly “priority check” polls in team channels.
  • DM stickers as acknowledgements when a user’s request is completed.

Action gating

Use discord.actions.* to disable action groups:

  • reactions (react + reactions list + emojiList)
  • stickers, polls, permissions, messages, threads, pins, search
  • emojiUploads, stickerUploads
  • memberInfo, roleInfo, channelInfo, voiceStatus, events
  • roles (role add/remove, default false)
  • channels (channel/category create/edit/delete/move, default false)
  • moderation (timeout/kick/ban, default false)
  • presence (bot status/activity, default false)
Read recent messages
json
{
  "action": "readMessages",
  "channelId": "123",
  "limit": 20
}
Fetch a single message
json
{
  "action": "fetchMessage",
  "guildId": "999",
  "channelId": "123",
  "messageId": "456"
}
json
{
  "action": "fetchMessage",
  "messageLink": "https://discord.com/channels/999/123/456"
}
Send/edit/delete a message
json
{
  "action": "sendMessage",
  "to": "channel:123",
  "content": "Hello from OpenClaw"
}

With media attachment:

json
{
  "action": "sendMessage",
  "to": "channel:123",
  "content": "Check out this audio!",
  "mediaUrl": "file:///tmp/audio.mp3"
}
  • to uses format channel:<id> or user:<id> for DMs (not channelId!)
  • mediaUrl supports local files (file:///path/to/file) and remote URLs (https://...)
  • Optional replyTo with a message ID to reply to a specific message
json
{
  "action": "editMessage",
  "channelId": "123",
  "messageId": "456",
  "content": "Fixed typo"
}
json
{
  "action": "deleteMessage",
  "channelId": "123",
  "messageId": "456"
}
Threads
json
{
  "action": "threadCreate",
  "channelId": "123",
  "name": "Bug triage",
  "messageId": "456"
}
json
{
  "action": "threadList",
  "guildId": "999"
}
json
{
  "action": "threadReply",
  "channelId": "777",
  "content": "Replying in thread"
}
Pins
json
{
  "action": "pinMessage",
  "channelId": "123",
  "messageId": "456"
}
json
{
  "action": "listPins",
  "channelId": "123"
}
Search messages
json
{
  "action": "searchMessages",
  "guildId": "999",
  "content": "release notes",
  "channelIds": ["123", "456"],
  "limit": 10
}
Member + role info
json
{
  "action": "memberInfo",
  "guildId": "999",
  "userId": "111"
}
json
{
  "action": "roleInfo",
  "guildId": "999"
}
List available custom emojis
json
{
  "action": "emojiList",
  "guildId": "999"
}
Role changes (disabled by default)
json
{
  "action": "roleAdd",
  "guildId": "999",
  "userId": "111",
  "roleId": "222"
}
Channel info
json
{
  "action": "channelInfo",
  "channelId": "123"
}
json
{
  "action": "channelList",
  "guildId": "999"
}
Channel management (disabled by default)

Create, edit, delete, and move channels and categories. Enable via discord.actions.channels: true.

Create a text channel:

json
{
  "action": "channelCreate",
  "guildId": "999",
  "name": "general-chat",
  "type": 0,
  "parentId": "888",
  "topic": "General discussion"
}
  • type: Discord channel type integer (0 = text, 2 = voice, 4 = category; other values supported)
  • parentId: category ID to nest under (optional)
  • topic, position, nsfw: optional

Create a category:

json
{
  "action": "categoryCreate",
  "guildId": "999",
  "name": "Projects"
}

Edit a channel:

json
{
  "action": "channelEdit",
  "channelId": "123",
  "name": "new-name",
  "topic": "Updated topic"
}
  • Supports name, topic, position, parentId (null to remove from category), nsfw, rateLimitPerUser

Move a channel:

json
{
  "action": "channelMove",
  "guildId": "999",
  "channelId": "123",
  "parentId": "888",
  "position": 2
}
  • parentId: target category (null to move to top level)

Delete a channel:

json
{
  "action": "channelDelete",
  "channelId": "123"
}

Edit/delete a category:

json
{
  "action": "categoryEdit",
  "categoryId": "888",
  "name": "Renamed Category"
}
json
{
  "action": "categoryDelete",
  "categoryId": "888"
}
Voice status
json
{
  "action": "voiceStatus",
  "guildId": "999",
  "userId": "111"
}
Scheduled events
json
{
  "action": "eventList",
  "guildId": "999"
}
Moderation (disabled by default)
json
{
  "action": "timeout",
  "guildId": "999",
  "userId": "111",
  "durationMinutes": 10
}
Show full SKILL.md (349 more words)Show less
Bot presence/activity (disabled by default)

Set the bot's online status and activity. Enable via discord.actions.presence: true.

Discord bots can only set name, state, type, and url on an activity. Other Activity fields (details, emoji, assets) are accepted by the gateway but silently ignored by Discord for bots.

How fields render by activity type:

  • playing, streaming, listening, watching, competing: activityName is shown in the sidebar under the bot's name (e.g. "with fire" for type "playing" and name "with fire"). activityState is shown in the profile flyout.
  • custom: activityName is ignored. Only activityState is displayed as the status text in the sidebar.
  • streaming: activityUrl may be displayed or embedded by the client.

Set playing status:

json
{
  "action": "setPresence",
  "activityType": "playing",
  "activityName": "with fire"
}

Result in sidebar: "with fire". Flyout shows: "Playing: with fire"

With state (shown in flyout):

json
{
  "action": "setPresence",
  "activityType": "playing",
  "activityName": "My Game",
  "activityState": "In the lobby"
}

Result in sidebar: "My Game". Flyout shows: "Playing: My Game (newline) In the lobby".

Set streaming (optional URL, may not render for bots):

json
{
  "action": "setPresence",
  "activityType": "streaming",
  "activityName": "Live coding",
  "activityUrl": "https://twitch.tv/example"
}

Set listening/watching:

json
{
  "action": "setPresence",
  "activityType": "listening",
  "activityName": "Spotify"
}
json
{
  "action": "setPresence",
  "activityType": "watching",
  "activityName": "the logs"
}

Set a custom status (text in sidebar):

json
{
  "action": "setPresence",
  "activityType": "custom",
  "activityState": "Vibing"
}

Result in sidebar: "Vibing". Note: activityName is ignored for custom type.

Set bot status only (no activity/clear status):

json
{
  "action": "setPresence",
  "status": "dnd"
}

Parameters:

  • activityType: playing, streaming, listening, watching, competing, custom
  • activityName: text shown in the sidebar for non-custom types (ignored for custom)
  • activityUrl: Twitch or YouTube URL for streaming type (optional; may not render for bots)
  • activityState: for custom this is the status text; for other types it shows in the profile flyout
  • status: online (default), dnd, idle, invisible

Discord Writing Style Guide

Keep it conversational! Discord is a chat platform, not documentation.

Do
  • Short, punchy messages (1-3 sentences ideal)
  • Multiple quick replies > one wall of text
  • Use emoji for tone/emphasis 🦞
  • Lowercase casual style is fine
  • Break up info into digestible chunks
  • Match the energy of the conversation
Don't
  • No markdown tables (Discord renders them as ugly raw | text |)
  • No ## Headers for casual chat (use bold or CAPS for emphasis)
  • Avoid multi-paragraph essays
  • Don't over-explain simple things
  • Skip the "I'd be happy to help!" fluff
Formatting that works
  • bold for emphasis
  • code for technical terms
  • Lists for multiple items
  • quotes for referencing

  • Wrap multiple links in <> to suppress embeds
Example transformations

❌ Bad:

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

## Calendar Versioning
CalVer uses date-based versions like...

✅ Good:

versioning options: semver (1.2.3), calver (2026.01.04), or yolo (`latest` forever). what fits your release cadence?

© smallnest, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in internal/builtin_skills/discord of smallnest/goclaw.

Open the folder on GitHubat commit e05c79d

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in smallnest/goclaw, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Discord Actions for OpenClaw next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Discord Actions for OpenClaw compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Discord Actions for OpenClaw this skillsmallnest/goclaw5981 repos~2.9kAutomated safety check: PassMIT
Claude To Imop7418/Claude-to-IM-skill2.9k—~3.4kAutomated safety check: NotesMIT
Openloomi Connectorsmelandlabs/openloomi1k—~3.3kAutomated safety check: PassApache-2.0
Use Avibeavibe-bot/avibe620—~2.5kAutomated safety check: PassMIT
Traul Message Searchdandaka/traul113—~3.9kAutomated safety check: NotesAGPL-3.0
Discord App Setupvellum-ai/vellum-assistant1.4k—~4.2kAutomated safety check: PassMIT

Similar skills

  • Claude To Im

    op7418/Claude-to-IM-skill

    Bridge THIS Claude Code or Codex session to Telegram, Discord, Feishu/Lark, QQ, or WeChat so the user can chat with Claude from their phone.

    2.9k GitHub stars~3.4k tokensUpdated 6 mo ago
    Productivity & AutomationAuto-check: notes
  • Openloomi Connectors

    melandlabs/openloomi

    openloomi Connectors tools - manage the native 7 messaging integrations and pair with the composio skill for the 1000+ apps OAuth layer (Slack, Discord, X, Gmail, Outlook, Google…

    1k GitHub stars~3.3k tokensUpdated 15 days ago
    Productivity & AutomationAuto-check passed
  • Use Avibe

    avibe-bot/avibe

    Safely inspect and modify local Avibe configuration, routing, runtime settings, watches, scheduled tasks, Avibe Cloud remote access, and operational state.

    620 GitHub stars~2.5k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Drives the traul CLI to sync, search and monitor messages from Slack, Telegram, Discord, Linear, Gmail, WhatsApp, Claude Code sessions and Markdown files.

    113 GitHub stars~3.9k tokensUpdated 5 mo ago
    Productivity & AutomationAuto-check: notes
  • Discord App Setup

    vellum-ai/vellum-assistant

    Connect a Discord bot to the assistant via the Discord Gateway with guided application creation and intent configuration

    1.4k GitHub stars~4.2k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Easy Openclaw

    daheiai/easy-openclaw

    OpenClaw 配置优化向导。采用“第 0 层测试观测(可选)+ 前 3 轮优化 + 第 4 轮接入扩展”流程:基础推荐层(含联网搜索与权限模式)、渠道增强层(Discord/Feishu/Telegram 分支优化)、Skills 推荐层(可执行可跳过)、新增渠道接入引导(可跳过)。用于帮助用户快速完成 OpenClaw 初始化或优化配置。用户说到“优化…

    112 GitHub stars~1.7k tokensUpdated 6 mo ago
    Productivity & AutomationAuto-check: notes

More from smallnest/goclaw

  • Crawl4AI Web Scraping

    smallnest/goclaw

    Scrapes sites, handles JavaScript-heavy pages and extracts structured data with Crawl4AI, through its crwl CLI or Python SDK, including schema-based extraction without an LLM.

    598 GitHub starsUsed in 1 repo~2.5k tokens
    Auto-check passed
  • Looks up action manuals with verified selectors for multi-step website tasks, then drives the browser with the actionbook CLI in a dedicated or an existing Chrome session.

    598 GitHub starsUsed in 1 repo~4.1k tokens
    Auto-check: warnings
  • Controls an Android device over ADB in a loop of screenshot, vision analysis, tap and verification, so the agent acts on real on-screen coordinates.

    598 GitHub stars~436 tokensUpdated 6 mo ago
    Auto-check passed
  • Feishu Upload Image

    smallnest/goclaw

    Upload images to Feishu/Lark. An agent skill from smallnest/goclaw.

    598 GitHub stars~556 tokensUpdated 6 mo ago
    Auto-check passed
  • goclaw Skill Finder

    smallnest/goclaw

    Helps you find, install, update and remove skills in the goclaw agent framework, using the goclaw skills commands and outside skill sources.

    598 GitHub stars~1.2k tokensUpdated 6 mo ago
    Auto-check passed

Works with

Questions about Discord Actions for OpenClaw

What does Discord Actions for OpenClaw do?

Reference for OpenClaw's discord tool: sending messages, reactions, stickers, emoji uploads, polls, threads and moderation in Discord channels and DMs. This skill documents the discord tool, which works through the bot token configured for OpenClaw.actions settings; all are enabled by default except roles and moderation.

When should I use Discord Actions for OpenClaw?

Discord Actions for OpenClaw fits situations like: posting a message, poll or sticker to a Discord channel or DM from an agent; uploading a custom emoji or sticker to a server; checking the bot's permissions in a channel before acting.

How do I install Discord Actions for OpenClaw in Claude Code?

Run `npx skills add smallnest/goclaw --skill discord -a claude-code`. Or copy the skill folder (internal/builtin_skills/discord in smallnest/goclaw) into .claude/skills/discord in your project. Claude Code loads it when a task matches its description.

How do I install Discord Actions for OpenClaw in Codex?

Run `npx skills add smallnest/goclaw --skill discord -a codex`. Or copy the skill folder (internal/builtin_skills/discord in smallnest/goclaw) into .agents/skills/discord in your project. Codex loads it when a task matches its description.

Can I use Discord Actions for OpenClaw in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add smallnest/goclaw --skill discord -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/discord, .gemini/skills/discord, .github/skills/discord and .opencode/skills/discord in your project.

What does Discord Actions for OpenClaw need to run?

SKILL.md names no scripts, command-line tools or credentials: Discord Actions for OpenClaw is instructions for the agent only. Our summary lists: An OpenClaw setup with the discord tool; A Discord bot token configured for OpenClaw.

Does Discord Actions for OpenClaw access the network?

SKILL.md names 2 domains. In commands or code: discord.com and twitch.tv; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Discord Actions for OpenClaw safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Discord Actions for OpenClaw use?

Discord Actions for OpenClaw is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Discord Actions for OpenClaw use?

About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Discord Actions for OpenClaw?

Skills that share tags, products or a category with Discord Actions for OpenClaw: Claude To Im (op7418/Claude-to-IM-skill, 2.9k stars), Openloomi Connectors (melandlabs/openloomi, 1k stars), Use Avibe (avibe-bot/avibe, 620 stars) and Traul Message Search (dandaka/traul, 113 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Discord Actions for OpenClaw?

smallnest (a GitHub user) maintains it in smallnest/goclaw, which has 598 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on March 27, 2026.

Source: smallnest/goclaw on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.