
Discord Integration
FreeEffortlessly post messages and announcements to Discord channels.
Free · Opens the source repo
What Discord Integration does
The Discord Integration skill allows users to post messages and announcements directly to Discord channels using the REST API. This skill is ideal for developers and teams looking to streamline their communication by sending updates, releases, or team notifications without leaving their development environment. With a variety of commands, users can navigate channels, send formatted messages, manage reactions, and even create threads, making it a versatile tool for enhancing team collaboration.
To get started, users must run a setup script that authenticates their Discord account and saves the necessary API token. This process is straightforward and ensures that users can quickly begin posting messages to their desired channels. The skill supports a range of commands, such as sending plain text messages, formatted announcements with embeds, and even managing message reactions and threads. This flexibility allows users to tailor their communication style to fit the needs of their audience.
The skill is particularly useful for teams that rely heavily on Discord for communication, as it enables them to automate updates and announcements. By integrating this skill into their workflow, teams can ensure that important information reaches all members promptly and in an organized manner. Additionally, the ability to manage reactions and threads directly from the command line adds an extra layer of efficiency, allowing users to keep discussions focused and relevant.
Overall, the Discord Integration skill is a powerful tool for anyone looking to enhance their Discord communication capabilities. Whether you're a developer sharing deployment updates or a team leader announcing new features, this skill provides the functionality needed to keep your team informed and engaged.
When to use it
Use this skill when you need to send messages or announcements to Discord channels as part of your development workflow.
When not to use it
This skill may not be suitable for users who do not use Discord for team communication or prefer a graphical interface for managing messages.
What you can build with it
Automating Release Announcements
Use the skill to automatically post release announcements to a designated channel, keeping your team informed.
Managing Team Notifications
Send quick updates or notifications to specific channels, ensuring that all team members receive important information.
Creating Discussion Threads
Facilitate discussions by creating threads in channels for specific topics, helping to organize conversations.
How to install Discord Integration
View source1. Install with the skills CLI
npx skills add civitai/civitai/discord --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by civitaiDiscord
Post messages and announcements to Discord channels via the REST API. Navigate channels by name, send formatted messages with embeds, manage reactions, threads, and more.
Setup
Run the setup script to authenticate via Discord:
node .claude/skills/discord/setup.mjs https://discord-proxy.civitai.com
This will:
- Open your browser for Discord authentication
- Verify you're in the team server
- Save your personal API token to
.env
Admin Only: Direct Bot Token
If you manage the bot directly and need to bypass the proxy:
- Copy
.env.exampleto.envin this skill directory - Uncomment and set
DISCORD_BOT_TOKEN - Optionally set
DISCORD_GUILDfor auto-detection
cp .claude/skills/discord/.env.example .claude/skills/discord/.env
Running Commands
node .claude/skills/discord/query.mjs <command> [options]
Commands
| Command | Description |
|---|---|
guilds | List all guilds (servers) the bot is in |
channels [guild] | List text channels in a guild |
send <channel> "message" | Send a plain text message |
announce <channel> "message" | Send a formatted announcement embed |
me | Show bot information |
users | List all members in the guild |
user <name|id> | Get user info and mention format |
roles | List all roles in the guild |
role <name|id> | Get role info and mention format |
messages <channel> | Get recent messages from a channel |
edit <msg_link> "content" | Edit a message (bot's own only) |
delete <msg_link> | Delete a message |
reply <msg_link> "content" | Reply to a message |
rich-embed <channel> | Send embed with structured fields |
react <msg_link> <emoji> | Add reaction to a message |
unreact <msg_link> <emoji> | Remove reaction from a message |
pin <msg_link> | Pin a message |
unpin <msg_link> | Unpin a message |
pins <channel> | List pinned messages in a channel |
thread <channel> --thread "name" | Create a thread |
dm <user> "message" | Send a direct message to a user |
dm-messages <user> | Read DM history with a user |
Options
| Flag | Description |
|---|---|
--json | Output raw JSON response |
--title "text" | Set embed title |
--color <hex> | Set embed color (default: #1E88E5 blue) |
--footer "text" | Set embed footer text |
--url "link" | Add a URL to the embed title |
--limit, -n <N> | Limit results (users: default 100, messages: default 20) |
--field "Name|Value|inline" | Add field to rich embed (repeatable) |
--thumbnail "url" | Add thumbnail image to embed |
--image "url" | Add large image to embed |
--thread "name" | Thread name (for thread command) |
Examples
Send Messages
# Send to channel by name
node .claude/skills/discord/query.mjs send dev-general "Deployment complete!"
# Send to channel by ID
node .claude/skills/discord/query.mjs send 966054537880289330 "Build passed"
Send Announcements
# Basic announcement with auto-formatting
node .claude/skills/discord/query.mjs announce dev-alerts "New feature deployed!"
# Announcement with custom title and color
node .claude/skills/discord/query.mjs announce deployments "v5.0.1381 released" --title "Release" --color "#00C853"
Rich Embeds with Fields
# Structured release announcement
node .claude/skills/discord/query.mjs rich-embed dev-general "New release is live!" \
--title "Release v5.0.1382" \
--field "Version|5.0.1382|inline" \
--field "Author|@justin|inline" \
--field "Changes|3 files modified" \
--footer "Civitai" \
--color "#00C853"
Edit Messages
# Edit using message link
node .claude/skills/discord/query.mjs edit "https://discord.com/channels/955.../966.../123..." "Updated content"
# Edit using channel + message ID
node .claude/skills/discord/query.mjs edit dev-general 1234567890 "Updated content"
Delete Messages
# Delete using message link
node .claude/skills/discord/query.mjs delete "https://discord.com/channels/955.../966.../123..."
# Delete using channel + message ID
node .claude/skills/discord/query.mjs delete dev-general 1234567890
Reply to Messages
# Reply using message link
node .claude/skills/discord/query.mjs reply "https://discord.com/channels/955.../966.../123..." "Thanks for the update!"
# Reply using channel + message ID
node .claude/skills/discord/query.mjs reply dev-general 1234567890 "Got it!"
Reactions
# Add a reaction (use Unicode emoji)
node .claude/skills/discord/query.mjs react "https://discord.com/channels/..." "U+2705"
node .claude/skills/discord/query.mjs react dev-general 1234567890 "U+1F44D"
# Remove a reaction
node .claude/skills/discord/query.mjs unreact "https://discord.com/channels/..." "U+2705"
Pin/Unpin Messages
# Pin a message
node .claude/skills/discord/query.mjs pin "https://discord.com/channels/..."
# Unpin a message
node .claude/skills/discord/query.mjs unpin "https://discord.com/channels/..."
# List pinned messages
node .claude/skills/discord/query.mjs pins dev-general
Threads
# Create thread from a message
node .claude/skills/discord/query.mjs thread "https://discord.com/channels/..." --thread "Discussion"
# Create thread in channel (no parent message)
node .claude/skills/discord/query.mjs thread dev-general --thread "New Topic"
Direct Messages
# Send DM to a user by name
node .claude/skills/discord/query.mjs dm justin "Hey, can you review this PR?"
# Send DM to a user by ID
node .claude/skills/discord/query.mjs dm 303445765865603073 "Quick question about the deployment"
# Read DM history with a user
node .claude/skills/discord/query.mjs dm-messages justin
# Read last 50 DMs
node .claude/skills/discord/query.mjs dm-messages justin --limit 50
Users and Roles
# List users
node .claude/skills/discord/query.mjs users --limit 50
# Find user to get mention format
node .claude/skills/discord/query.mjs user justin
# Output: Mention: <@303445765865603073>
# List roles
node .claude/skills/discord/query.mjs roles
# Find role to get mention format
node .claude/skills/discord/query.mjs role devs
# Output: Mention: <@&955572624992382996>
Mention Users and Roles
# Mention a user in a message
node .claude/skills/discord/query.mjs send dev-general "<@303445765865603073> check this PR"
# Mention a role
node .claude/skills/discord/query.mjs announce dev-general "<@&955572624992382996> new release!" --title "Attention Devs"
Read Messages
# Get last 20 messages (default)
node .claude/skills/discord/query.mjs messages dev-general
# Get last 50 messages
node .claude/skills/discord/query.mjs messages dev-general --limit 50
Message Links
Most commands accept Discord message links directly:
- Format:
https://discord.com/channels/GUILD_ID/CHANNEL_ID/MESSAGE_ID - Right-click any message in Discord > "Copy Message Link"
Commands that accept message links: edit, delete, reply, react, unreact, pin, unpin, thread
Channel Name Matching
Channel names are matched flexibly:
- Exact match:
dev-general - Partial match:
dev-genmatchesdev-general - With or without emoji prefix:
teammatchesteam - Case insensitive:
DEV-GENERALmatchesdev-general
When to Use
- Deployments: Announce releases to
deploymentsordev-alerts - Bug fixes: Share fixes with the team in
dev-general - Feature announcements: Post to relevant channels
- Team updates: Share progress in
teamor project-specific channels - Automated notifications: Post from CI/CD or scripts
- Mentioning users: Look up user IDs with
usercommand, then @mention them - Mentioning roles: Look up role IDs with
rolecommand, then @mention them - Reading context: Check recent messages with
messagescommand - Reactions: Acknowledge messages with emoji reactions
- Organizing discussions: Create threads for focused conversations
- Direct messages: Send private DMs to team members, read DM history
Tips
- Use
announcefor important updates (creates rich embed) - Use
sendfor quick messages or automated notifications - Use
rich-embedfor structured data with multiple fields - Channel names are cached after first lookup
- Bot must have appropriate permissions in target channel
- Use
--jsonfor scripting or piping to other tools - Message links work across all message-targeting commands
Permissions Required
The bot needs these Discord permissions:
View Channels- to list and find channelsSend Messages- to post messagesEmbed Links- for rich announcementsRead Message History- to read channel messagesAdd Reactions- to add reactionsManage Messages- to pin/unpin and delete messagesCreate Public Threads- to create threads- Server Members Intent - enabled in Discord Developer Portal (for listing members)
Frequently asked questions about Discord Integration
Similar skills
Agent-Browser Core
Efficient browser automation for AI agents.
Setup My IQ
Effortlessly create and update your personal context portfolio.
CRM Maintenance
Automate HubSpot updates from your calendar and emails.
Zoom MCP
Streamline access to Zoom meeting assets and recordings.
Slack Automation
Automate tasks and extract data from Slack easily.
SMB Onboard
Guides small business owners through initial tool setup.
