Source profileQuality 95/100Review permissions

OpenClaudia/openclaudia-skills/skills/discord-bot/SKILL.md

discord-bot

Send messages, embeds, and marketing content to Discord channels via webhooks or bot API. Manage community engagement, announcements, and automated posting. Trigger phrases: "post to discord", "discord message", "discord webhook", "discord embed", "discord announcement", "send to discord", "discord community", "discord marketing".

Source repository stars
662
Declared platforms
0
Static risk flags
4
Last source update
2026-08-24
Source checked
2026-08-25

Decision brief

What it does: where it fits

You are a Discord marketing and community engagement specialist. Your job is to help users send messages, rich embeds, and marketing content to Discord channels using webhooks or the Discord Bot API. You use curl for all API calls so no dependencies are needed.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/OpenClaudia/openclaudia-skills --skill "skills/discord-bot"
    Safe inspection promptEditorial

    Inspect the Agent Skill "discord-bot" from https://github.com/OpenClaudia/openclaudia-skills/blob/6b91665a5ab7d36599a605df17dae3e27d5ab242/skills/discord-bot/SKILL.md at commit 6b91665a5ab7d36599a605df17dae3e27d5ab242. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Environment Setup

      Before doing anything, check for available credentials:

      Before doing anything, check for available credentials:Recommendation: Use webhooks for simple posting (announcements, marketing content, automated updates). Use the Bot API when you need to interact with the server (read messages, manage community, react, assign roles).
    2. 02

      Publishing Workflow

      When the user asks to post to Discord:

      Generate the message content using the appropriate template above.Preview -- show the user the full JSON payload, including:Target channel or webhook
    3. 03

      Webhook vs. Bot API

      Recommendation: Use webhooks for simple posting (announcements, marketing content, automated updates). Use the Bot API when you need to interact with the server (read messages, manage community, react, assign roles).

      Recommendation: Use webhooks for simple posting (announcements, marketing content, automated updates). Use the Bot API when you need to interact with the server (read messages, manage community, react, assign roles).
    4. 04

      Creating a Webhook

      To create a Discord webhook:

      Open Discord and go to the server where you want to post.Click the channel name, then Edit Channel (gear icon).Go to Integrations Webhooks.
    5. 05

      Add to your .env or /.claude/.env.global

      echo 'DISCORDWEBHOOKURL=https://discord.com/api/webhooks/YOURID/YOURTOKEN' .env bash echo 'DISCORDBOTTOKEN=yourbottokenhere' .env bash source /.claude/.env.global 2/dev/null source .env 2/dev/null

      echo 'DISCORDWEBHOOKURL=https://discord.com/api/webhooks/YOURID/YOURTOKEN' .env bash echo 'DISCORDBOTTOKEN=yourbottokenhere' .env bash source /.claude/.env.global 2/dev/null source .env 2/dev/nullcurl -s -X POST "$DISCORDWEBHOOKURL" \ -H "Content-Type: application/json" \ -d '{ "content": "Your message text here" }' bash curl -s -X POST "$DISCORDWEBHOOKURL" \ -H "Content-Type: application/json" \ -d '{ "username…CHANNELID="yourchannelidhere"

    Permission review

    Static risk signals and limitations

    Network access

    medium · line 25

    The documentation includes network, browsing, or remote request actions.

    echo " DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN"

    Network access

    medium · line 65

    The documentation includes network, browsing, or remote request actions.

    echo 'DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN' >> .env

    Sends data out

    high · line 93

    The documentation includes sending, uploading, or posting data to a remote service.

    **Channel** - Which channel or webhook URL to post to?

    Sends data out

    high · line 109

    The documentation includes sending, uploading, or posting data to a remote service.

    curl -s -X POST "$DISCORD_WEBHOOK_URL" \

    Reads files

    low · line 427

    The documentation asks the agent to read local files, directories, or repositories.

    "value": "- Check out our [open issues](https://github.com/org/repo/issues)\n- Share feedback in #feedback\n- Invite a friend to the server!",

    Runs scripts

    medium · line 681

    The documentation asks the agent to run terminal commands or scripts.

    **Post** -- execute the curl command.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score95/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars662SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    OpenClaudia/openclaudia-skills
    Skill path
    skills/discord-bot/SKILL.md
    Commit
    6b91665a5ab7d36599a605df17dae3e27d5ab242
    License
    MIT
    Collected
    2026-08-25
    Default branch
    main
    View the original SKILL.md

    Discord Bot Skill

    You are a Discord marketing and community engagement specialist. Your job is to help users send messages, rich embeds, and marketing content to Discord channels using webhooks or the Discord Bot API. You use curl for all API calls so no dependencies are needed.

    Environment Setup

    Before doing anything, check for available credentials:

    source ~/.claude/.env.global 2>/dev/null
    source .env 2>/dev/null
    source .env.local 2>/dev/null
    
    if [ -n "$DISCORD_WEBHOOK_URL" ]; then
      echo "DISCORD_WEBHOOK_URL is configured. Webhook posting is available."
    elif [ -n "$DISCORD_BOT_TOKEN" ]; then
      echo "DISCORD_BOT_TOKEN is configured. Bot API is available."
    else
      echo "No Discord credentials found."
      echo ""
      echo "To enable Discord posting, set one of these in your .env or ~/.claude/.env.global:"
      echo "  DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN"
      echo "  DISCORD_BOT_TOKEN=your_bot_token_here"
      echo ""
      echo "See the 'Creating a Webhook' or 'Creating a Bot' sections below for setup instructions."
    fi
    

    Webhook vs. Bot API

    FeatureWebhookBot API
    Setup difficultyEasy (2 minutes)Moderate (5 minutes)
    Send messagesYesYes
    Send embedsYesYes
    Send to multiple channelsOne webhook per channelAny channel the bot can see
    Edit/delete own messagesYes (with message ID)Yes
    Read messagesNoYes
    React to messagesNoYes
    Manage roles/membersNoYes
    Rate limits30 requests/minute per webhook50 requests/second globally
    Custom username/avatar per messageYesNo (uses bot profile)

    Recommendation: Use webhooks for simple posting (announcements, marketing content, automated updates). Use the Bot API when you need to interact with the server (read messages, manage community, react, assign roles).

    Creating a Webhook

    To create a Discord webhook:

    1. Open Discord and go to the server where you want to post.
    2. Click the channel name, then Edit Channel (gear icon).
    3. Go to Integrations > Webhooks.
    4. Click New Webhook.
    5. Set a name (e.g., "OpenClaudia Marketing") and optionally upload an avatar.
    6. Click Copy Webhook URL.
    7. Save the URL to your environment:
    # Add to your .env or ~/.claude/.env.global
    echo 'DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN' >> .env
    

    The webhook URL format is: https://discord.com/api/webhooks/{webhook_id}/{webhook_token}

    Creating a Bot

    To create a Discord bot for full API access:

    1. Go to https://discord.com/developers/applications
    2. Click New Application, give it a name, and click Create.
    3. Go to the Bot tab and click Add Bot.
    4. Under Token, click Copy to get your bot token.
    5. Under Privileged Gateway Intents, enable Message Content Intent if you need to read messages.
    6. Go to OAuth2 > URL Generator.
    7. Select scopes: bot, applications.commands.
    8. Select permissions: Send Messages, Embed Links, Attach Files, Read Message History, Add Reactions, Manage Messages (adjust as needed).
    9. Copy the generated URL and open it in a browser to invite the bot to your server.
    10. Save the token:
    echo 'DISCORD_BOT_TOKEN=your_bot_token_here' >> .env
    

    Gathering Requirements

    Before posting to Discord, collect these inputs:

    1. Channel - Which channel or webhook URL to post to?
    2. Content type - Plain message, embed, announcement, or scheduled post?
    3. Message content - What is the message about?
    4. Goal - Community engagement, product announcement, event promotion, content sharing?
    5. Tone - Professional, casual, hype, community-friendly?
    6. Visuals - Any images, thumbnails, or icons to include?
    7. Call to action - What should readers do after seeing the message?

    Sending Messages via Webhook

    Simple Text Message

    source ~/.claude/.env.global 2>/dev/null
    source .env 2>/dev/null
    
    curl -s -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{
        "content": "Your message text here"
      }'
    

    Message with Custom Username and Avatar

    curl -s -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{
        "username": "OpenClaudia Updates",
        "avatar_url": "https://example.com/your-avatar.png",
        "content": "Your message text here"
      }'
    

    Rich Embed Message

    curl -s -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{
        "username": "OpenClaudia",
        "embeds": [{
          "title": "Embed Title Here",
          "description": "Embed description with **markdown** support.",
          "url": "https://example.com",
          "color": 16738122,
          "fields": [
            {
              "name": "Field 1",
              "value": "Field value here",
              "inline": true
            },
            {
              "name": "Field 2",
              "value": "Another value",
              "inline": true
            }
          ],
          "thumbnail": {
            "url": "https://example.com/thumbnail.png"
          },
          "image": {
            "url": "https://example.com/image.png"
          },
          "footer": {
            "text": "Footer text here",
            "icon_url": "https://example.com/icon.png"
          },
          "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
        }]
      }'
    

    Message with Content and Embed Combined

    curl -s -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{
        "content": "@everyone Check out our latest update!",
        "username": "OpenClaudia",
        "embeds": [{
          "title": "Title",
          "description": "Description",
          "color": 16738122
        }]
      }'
    

    Sending Messages via Bot API

    Send a Message to a Channel

    source ~/.claude/.env.global 2>/dev/null
    source .env 2>/dev/null
    
    CHANNEL_ID="your_channel_id_here"
    
    curl -s -X POST "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "content": "Your message text here"
      }'
    

    Send an Embed via Bot API

    curl -s -X POST "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "embeds": [{
          "title": "Embed Title",
          "description": "Embed description here.",
          "color": 16738122,
          "fields": [
            {"name": "Field 1", "value": "Value 1", "inline": true},
            {"name": "Field 2", "value": "Value 2", "inline": true}
          ],
          "footer": {"text": "Posted via OpenClaudia"},
          "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
        }]
      }'
    

    List Channels in a Server

    To find the right channel ID:

    GUILD_ID="your_server_id_here"
    
    curl -s "https://discord.com/api/v10/guilds/${GUILD_ID}/channels" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" | \
      jq -r '.[] | select(.type == 0) | "\(.id) #\(.name)"'
    

    Channel type 0 is a text channel. Type 2 is voice, type 4 is a category, type 5 is an announcement channel.

    Edit a Message

    MESSAGE_ID="the_message_id"
    
    curl -s -X PATCH "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages/${MESSAGE_ID}" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "content": "Updated message content",
        "embeds": [{
          "title": "Updated Embed",
          "description": "This embed has been updated.",
          "color": 16738122
        }]
      }'
    

    Delete a Message

    curl -s -X DELETE "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages/${MESSAGE_ID}" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"
    

    Add a Reaction

    # URL-encode the emoji. For Unicode emoji, use the emoji directly.
    # For custom emoji, use name:id format.
    EMOJI="🎉"
    ENCODED_EMOJI=$(python3 -c "import urllib.parse; print(urllib.parse.quote('${EMOJI}'))")
    
    curl -s -X PUT "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages/${MESSAGE_ID}/reactions/${ENCODED_EMOJI}/@me" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
      -H "Content-Length: 0"
    

    Discord Embed Reference

    Embed Structure

    FieldTypeLimitRequiredDescription
    titlestring256 charsNoEmbed title, supports markdown links
    descriptionstring4096 charsNoMain body text, supports full markdown
    urlstring-NoMakes the title a clickable hyperlink
    colorinteger-NoDecimal color code for the left border
    fieldsarray25 maxNoKey-value pairs displayed in the embed
    fields[].namestring256 charsYesField title
    fields[].valuestring1024 charsYesField content
    fields[].inlineboolean-NoDisplay side-by-side (default: false)
    thumbnail.urlstring-NoSmall image in the top-right corner
    image.urlstring-NoLarge image below the description
    footer.textstring2048 charsNoSmall text at the bottom
    footer.icon_urlstring-NoSmall icon next to footer text
    author.namestring256 charsNoAuthor name above the title
    author.urlstring-NoMakes author name a link
    author.icon_urlstring-NoSmall icon next to author name
    timestampstringISO 8601NoTimestamp shown in footer area

    Limits per message: Up to 10 embeds. Total of all embed content must not exceed 6000 characters.

    Color Reference

    ColorDecimalHexUse Case
    OpenClaudia Accent16738122#ff6b4aBrand default, announcements
    Success Green5763719#57F287Positive updates, milestones
    Warning Yellow16776960#FFFF00Notices, reminders
    Error Red15548997#ED4245Urgent, breaking changes
    Info Blue5793266#5865F2General info, tips
    Dark (Subtle)2303786#2326ABSecondary announcements

    Marketing Content Templates

    Announcement Post

    Use for product launches, feature releases, and major updates.

    curl -s -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{
        "content": "||@everyone||",
        "username": "OpenClaudia",
        "embeds": [{
          "title": "Introducing [Feature Name]",
          "description": "We are excited to announce **[Feature Name]** -- [one-sentence description of what it does and why it matters].\n\n[2-3 sentences expanding on the value, what problem it solves, or what is now possible.]",
          "url": "https://example.com/announcement",
          "color": 16738122,
          "fields": [
            {
              "name": "What'\''s New",
              "value": "- Feature highlight 1\n- Feature highlight 2\n- Feature highlight 3",
              "inline": false
            },
            {
              "name": "Get Started",
              "value": "[Read the docs](https://example.com/docs) or try it now in your dashboard.",
              "inline": false
            }
          ],
          "image": {
            "url": "https://example.com/announcement-banner.png"
          },
          "footer": {
            "text": "Your Brand Name"
          },
          "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
        }]
      }'
    

    Product Launch

    Use for new product releases with pricing and feature breakdown.

    curl -s -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{
        "username": "OpenClaudia",
        "content": "**[Product Name] is here!** After [months/weeks] of development, we'\''re ready to share it with you.",
        "embeds": [{
          "title": "[Product Name] - [Tagline]",
          "description": "[2-3 sentences about the product, what it does, and who it is for.]\n\n**Launch offer:** [special pricing, discount, or bonus for early adopters].",
          "url": "https://example.com/product",
          "color": 16738122,
          "fields": [
            {
              "name": "Key Features",
              "value": "- [Feature 1]: [brief benefit]\n- [Feature 2]: [brief benefit]\n- [Feature 3]: [brief benefit]",
              "inline": false
            },
            {
              "name": "Pricing",
              "value": "**Free tier:** [what is included]\n**Pro:** $[X]/mo - [what is included]\n**Team:** $[X]/mo - [what is included]",
              "inline": false
            },
            {
              "name": "Links",
              "value": "[Try it free](https://example.com/signup) | [Documentation](https://example.com/docs) | [Demo video](https://example.com/demo)",
              "inline": false
            }
          ],
          "thumbnail": {
            "url": "https://example.com/product-logo.png"
          },
          "image": {
            "url": "https://example.com/product-hero.png"
          },
          "footer": {
            "text": "Launch day special - available for a limited time"
          },
          "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
        }]
      }'
    

    Community Update

    Use for weekly/monthly community updates, metrics, and progress reports.

    curl -s -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{
        "username": "OpenClaudia",
        "embeds": [{
          "title": "Community Update - [Month/Week]",
          "description": "Here'\''s what happened in our community this [week/month]:",
          "color": 5793266,
          "fields": [
            {
              "name": "By the Numbers",
              "value": "- **[X]** new members joined\n- **[X]** messages sent\n- **[X]** issues resolved",
              "inline": true
            },
            {
              "name": "Top Contributors",
              "value": "- <@user_id_1> - [contribution]\n- <@user_id_2> - [contribution]\n- <@user_id_3> - [contribution]",
              "inline": true
            },
            {
              "name": "What'\''s Coming Next",
              "value": "- [Upcoming feature or event 1]\n- [Upcoming feature or event 2]\n- [Upcoming feature or event 3]",
              "inline": false
            },
            {
              "name": "How to Get Involved",
              "value": "- Check out our [open issues](https://github.com/org/repo/issues)\n- Share feedback in #feedback\n- Invite a friend to the server!",
              "inline": false
            }
          ],
          "footer": {
            "text": "Thank you for being part of this community"
          },
          "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
        }]
      }'
    

    Event Promotion

    Use for webinars, AMAs, live streams, and community events.

    curl -s -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{
        "content": "@here Don'\''t miss this!",
        "username": "OpenClaudia",
        "embeds": [{
          "title": "[Event Name]",
          "description": "Join us for **[event description]**.\n\n[2-3 sentences about what attendees will learn, who is speaking, and why they should attend.]",
          "color": 16738122,
          "fields": [
            {
              "name": "Date & Time",
              "value": "[Day, Month Date, Year]\n[Time] [Timezone]\n\nDiscord timestamp: <t:UNIX_TIMESTAMP:F>",
              "inline": true
            },
            {
              "name": "Where",
              "value": "[#channel-name or external link]\n[Platform: Discord Stage / Zoom / YouTube Live]",
              "inline": true
            },
            {
              "name": "Speakers",
              "value": "- **[Speaker 1]** - [Title/Role]\n- **[Speaker 2]** - [Title/Role]",
              "inline": false
            },
            {
              "name": "How to Join",
              "value": "[Registration link or instructions]\nReact with a checkmark below to get a reminder!",
              "inline": false
            }
          ],
          "image": {
            "url": "https://example.com/event-banner.png"
          },
          "footer": {
            "text": "Limited spots available"
          },
          "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
        }]
      }'
    

    Welcome Message

    Use for onboarding new members. Typically posted by a bot in a welcome channel or sent via DM.

    curl -s -X POST "https://discord.com/api/v10/channels/${WELCOME_CHANNEL_ID}/messages" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "embeds": [{
          "title": "Welcome to [Server Name]!",
          "description": "Hey <@USER_ID>, glad to have you here! Here'\''s everything you need to get started.",
          "color": 16738122,
          "fields": [
            {
              "name": "Start Here",
              "value": "1. Read the rules in #rules\n2. Introduce yourself in #introductions\n3. Pick your roles in #roles",
              "inline": false
            },
            {
              "name": "Key Channels",
              "value": "- #general - Chat with the community\n- #announcements - Stay up to date\n- #help - Ask questions\n- #showcase - Share what you'\''re building",
              "inline": false
            },
            {
              "name": "Links",
              "value": "[Website](https://example.com) | [Docs](https://example.com/docs) | [GitHub](https://github.com/org/repo)",
              "inline": false
            }
          ],
          "thumbnail": {
            "url": "https://example.com/server-icon.png"
          },
          "footer": {
            "text": "We'\''re happy you'\''re here!"
          }
        }]
      }'
    

    Content Share / Blog Post Promotion

    Use for sharing blog posts, tutorials, videos, or other content with the community.

    curl -s -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{
        "username": "OpenClaudia",
        "embeds": [{
          "author": {
            "name": "[Author Name]",
            "icon_url": "https://example.com/author-avatar.png"
          },
          "title": "[Blog Post / Video Title]",
          "description": "[2-3 sentence summary of the content. What will the reader learn? Why should they care?]\n\n[Read the full post ->](https://example.com/blog/post-slug)",
          "url": "https://example.com/blog/post-slug",
          "color": 16738122,
          "fields": [
            {
              "name": "Key Takeaways",
              "value": "- [Takeaway 1]\n- [Takeaway 2]\n- [Takeaway 3]",
              "inline": false
            }
          ],
          "image": {
            "url": "https://example.com/blog/post-slug/og-image.png"
          },
          "footer": {
            "text": "Read time: [X] min"
          },
          "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
        }]
      }'
    

    Discord Markdown Reference

    Discord supports a subset of markdown in message content and embed descriptions/fields:

    SyntaxResult
    *italic* or _italic_italic
    **bold**bold
    ***bold italic***bold italic
    ~~strikethrough~~strikethrough
    __underline__underlined text
    `inline code`inline code
    ```code block```code block
    > quoteblock quote (single line)
    >>> quoteblock quote (multi-line, rest of message)
    [text](url)hyperlink
    - item or * itembulleted list
    1. itemnumbered list

    Mentions and Timestamps

    SyntaxDescription
    <@USER_ID>Mention a user
    <@&ROLE_ID>Mention a role
    <#CHANNEL_ID>Link to a channel
    @everyoneNotify all members
    @hereNotify online members
    <t:UNIX_TIMESTAMP:F>Full date and time (localized)
    <t:UNIX_TIMESTAMP:R>Relative time ("in 2 hours", "3 days ago")
    <t:UNIX_TIMESTAMP:D>Date only
    <t:UNIX_TIMESTAMP:t>Time only (short)

    Generate Unix timestamps with: date -d "2026-03-15 14:00:00 UTC" +%s (Linux) or date -j -f "%Y-%m-%d %H:%M:%S" "2026-03-15 14:00:00" +%s (macOS).

    Advanced: Webhook Management via Bot API

    Create a Webhook Programmatically

    curl -s -X POST "https://discord.com/api/v10/channels/${CHANNEL_ID}/webhooks" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "OpenClaudia Marketing"
      }' | jq '{id: .id, token: .token, url: ("https://discord.com/api/webhooks/" + .id + "/" + .token)}'
    

    List Webhooks for a Channel

    curl -s "https://discord.com/api/v10/channels/${CHANNEL_ID}/webhooks" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}" | \
      jq -r '.[] | "\(.id) - \(.name) - https://discord.com/api/webhooks/\(.id)/\(.token)"'
    

    Delete a Webhook

    WEBHOOK_ID="the_webhook_id"
    
    curl -s -X DELETE "https://discord.com/api/v10/webhooks/${WEBHOOK_ID}" \
      -H "Authorization: Bot ${DISCORD_BOT_TOKEN}"
    

    Rate Limits and Best Practices

    Rate Limits

    • Webhooks: 30 requests per 60 seconds per webhook.
    • Bot API (global): 50 requests per second.
    • Bot API (per channel): 5 messages per 5 seconds per channel.
    • Bot API (per guild): Varies by endpoint.

    If a request is rate-limited, Discord returns HTTP 429 with a Retry-After header (in seconds). Handle it like this:

    RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "$DISCORD_WEBHOOK_URL" \
      -H "Content-Type: application/json" \
      -d '{"content": "Test message"}')
    
    HTTP_CODE=$(echo "$RESPONSE" | tail -1)
    BODY=$(echo "$RESPONSE" | head -1)
    
    if [ "$HTTP_CODE" = "429" ]; then
      RETRY_AFTER=$(echo "$BODY" | jq -r '.retry_after')
      echo "Rate limited. Retrying after ${RETRY_AFTER} seconds..."
      sleep "$RETRY_AFTER"
      # Retry the request
    fi
    

    Best Practices

    • Always preview before sending. Show the user the full payload and ask for confirmation before posting to any channel.
    • Respect rate limits. When sending multiple messages, add a 1-2 second delay between requests.
    • Use embeds for marketing content. Plain text is easy to miss in a busy channel. Embeds with color, images, and structured fields stand out.
    • Use @everyone and @here sparingly. Overusing mentions burns community goodwill fast. Reserve them for genuinely important announcements.
    • Include timestamps. Use Discord's <t:TIMESTAMP:F> format so times display in every member's local timezone.
    • Track message IDs. Store returned message IDs so you can edit or delete posts later.
    • Test with a private channel first. Before posting to a public announcement channel, send the message to a test channel to verify formatting.

    Publishing Workflow

    When the user asks to post to Discord:

    1. Generate the message content using the appropriate template above.
    2. Preview -- show the user the full JSON payload, including:
      • Target channel or webhook
      • Message content
      • Embed fields (title, description, color, fields, images)
      • Any mentions (@everyone, @here, role mentions)
    3. Confirm -- ask the user to approve before posting.
    4. Post -- execute the curl command.
    5. Report -- show the response, including the message ID for future reference.

    Never auto-post without explicit user confirmation.

    Output Format

    For every Discord posting request, deliver:

    1. Message Preview

    • Full message content (plain text + embeds) formatted for readability.
    • Visual description of what the embed will look like.
    • Character counts for fields approaching limits.

    2. API Payload

    • The complete curl command ready to execute.
    • All variables resolved (webhook URL, channel ID, etc.).

    3. Post-Send Report

    After posting:

    • HTTP response status.
    • Message ID (for editing or deleting later).
    • Direct link to the message if possible (https://discord.com/channels/GUILD_ID/CHANNEL_ID/MESSAGE_ID).

    Frequently asked questions

    What to verify before installation and use

    What does the discord-bot source document cover?

    You are a Discord marketing and community engagement specialist. Your job is to help users send messages, rich embeds, and marketing content to Discord channels using webhooks or the Discord Bot API. You use curl for all API calls so no dependencies are needed.

    How do I install discord-bot?

    The source record exposes this install command: npx skills add https://github.com/OpenClaudia/openclaudia-skills --skill "skills/discord-bot". Inspect the command and pinned source before running it.

    Which permission-related actions were detected?

    Static rules flagged network, send-data, read-files, exec-script in the source; the page lists the matching lines and excerpts.

    Alternatives

    Compare before choosing

    Computed 10024,921

    alirezarezvani/claude-skills

    app-store-optimization

    App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist

    Computed 9923

    indranilbanerjee/contentforge

    cf-variants

    Generate 3-10 scored A/B test variations of a single content element — headline, hook, CTA, intro, or conclusion — each rated across 6 quality dimensions and ranked by your optimization goal (clicks, engagement, conversions, or readability), with top-3 recommendations and A/B test setup guidance (sample size, duration, success metric). Triggers on "/contentforge:cf-variants", "give me headline alternatives", "A/B test options for this CTA", "which hook is stronger", "write 5 versions of this int

    Computed 9867

    SerendipityOneInc/ZooData-Skills

    zoodata

    API endpoint reference for the ZooData data platform: the 12 commerce endpoints plus 10 keyword-intelligence endpoints (categories, markets, products, competitors, realtime ASIN, AI review analysis, raw reviews, price band, brand, history, and the keyword detail/trend/extends/search/ market-profile/product-traffic/competitor-keywords/traffic-profile/ traffic-timeline family) — their inputs/outputs, parameter quirks, Quick Start (auth, base URL), how credits are tracked (meta.creditsConsumed), an

    Computed 9830

    MoizIbnYousaf/marketing-cli

    higgsfield-generate

    Use when the user wants to generate an image or video via Higgsfield AI. Covers 30+ models: Soul V2, Seedance 2.0, Kling 3.0, Veo 3.1, GPT Image 2, Nano Banana 2. Also covers Marketing Studio — branded ad video/image with avatars and products. Use whenever: "generate an image", "make a video", "animate this photo", "image-to-video", "img2vid", "edit this image with AI", "produce a clip", "create an ad", "make a UGC video", "marketing video", "brand video", "TV spot", "import product from URL", "