Cross-Platform Social Poster

Cross-platform social media posting for X (Twitter), Telegram, and Discord. Post content simultaneously to multiple platforms, format messages for each platform's requirements, and manage multi-channel social media presence. Use when sharing updates, announcements, or content across Twitter, Telegram channels/groups, and Discord servers.

Audits

Pass

Install

openclaw skills install cross-platform-social-poster

Social Media Poster - X, Telegram, Discord

Post content simultaneously across X (Twitter), Telegram, and Discord with platform-specific formatting.

Platform Requirements

X (Twitter) Setup

Use xurl CLI or direct API calls:

# Install xurl
npm i -g xurl

# Authenticate
xurl auth

Telegram Bot Setup

  1. Create bot via @BotFather on Telegram
  2. Get your bot token
  3. Get chat ID (channel or group)

Required: Bot token + Chat ID

Discord Webhook Setup

  1. Go to Server Settings → Integrations → Webhooks
  2. Create new webhook
  3. Copy webhook URL

Required: Webhook URL


Quick Start: Post to All Three Platforms

Bash Script Template

#!/bin/bash
# cross_post.sh - Post to X, Telegram, Discord simultaneously

MESSAGE="Your message content here"
IMAGE_PATH=""  # Optional: path to image

# X (Twitter)
xurl post "$MESSAGE" ${IMAGE_PATH:+--media "$IMAGE_PATH"}

# Telegram
curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
  -d chat_id="$TELEGRAM_CHAT_ID" \
  -d text="$MESSAGE" \
  -d parse_mode="Markdown"

# Discord
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d "{\"content\": \"$MESSAGE\"}"

Platform-Specific Formatting

X (Twitter) Best Practices

  • Character limit: 280 characters
  • Hashtags: 2-3 relevant hashtags at the end
  • Mentions: @username for mentions
  • Links: Automatically shortened
  • Media: Up to 4 images, 1 GIF, or 1 video
# Post with xurl
xurl post "Check out our new update! 🚀 #AI #Tech"

# Post with image
xurl post "New feature demo" --media ./screenshot.png

# Reply to tweet
xurl reply <tweet_id> "Thanks for the mention!"

Telegram Best Practices

  • Markdown/HTML support for rich formatting
  • No character limit (for all practical purposes)
  • Supports: images, documents, polls, keyboards
  • Channels: Use @channelusername or numeric chat ID
# Send text message
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
  -d chat_id="$CHAT_ID" \
  -d text="*Bold* _Italic_ [Link](https://example.com)" \
  -d parse_mode="MarkdownV2"

# Send photo
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendPhoto" \
  -F chat_id="$CHAT_ID" \
  -F photo="@./image.jpg" \
  -F caption="Photo caption"

Discord Best Practices

  • Embeds for rich messages
  • Webhook username/avatar customization
  • Max 2000 characters per message
  • Supports: attachments, embeds, reactions
# Simple message via webhook
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Hello from webhook!",
    "username": "MyBot",
    "avatar_url": "https://example.com/avatar.png"
  }'

# Rich embed message
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "embeds": [{
      "title": "Announcement",
      "description": "New release is out!",
      "color": 5814783,
      "fields": [
        {"name": "Version", "value": "2.0", "inline": true},
        {"name": "Date", "value": "2026-01-15", "inline": true}
      ]
    }]
  }'

Multi-Platform Posting Workflow

1. Prepare Content

# Base content
TITLE="Big Announcement"
BODY="We just launched something amazing. Check it out!"
LINK="https://example.com/news"
IMAGE="./announcement.png"

2. Platform-Specific Versions

# X (Twitter) - Concise
TWEET="$TITLE: $BODY $LINK #News #Launch"

# Telegram - Detailed with markdown
TG_MSG="*$TITLE*\n\n$BODY\n\n[Read more]($LINK)"

# Discord - Rich embed format
DISCORD_JSON=$(cat <<EOF
{
  "content": "",
  "embeds": [{
    "title": "$TITLE",
    "description": "$BODY",
    "url": "$LINK",
    "color": 3447003
  }]
}
EOF
)

3. Post in Parallel

# Post to all three platforms (background for speed)
xurl post "$TWEET" --media "$IMAGE" &
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendPhoto" \
  -F chat_id="$CHAT_ID" -F photo="@$IMAGE" -F caption="$TG_MSG" &
curl -s -X POST "$DISCORD_WEBHOOK" \
  -H "Content-Type: application/json" -d "$DISCORD_JSON" &
wait
echo "Posted to all platforms!"

Environment Variables Setup

Create .env file:

# X/Twitter
X_API_KEY=your_api_key
X_API_SECRET=your_api_secret

# Telegram
TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
TELEGRAM_CHAT_ID=@yourchannel

# Discord
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...

Load with:

source .env

Common Use Cases

Product Launch

  • X: Short announcement + hashtags + image
  • Telegram: Detailed announcement + images + buttons
  • Discord: Embed with details + @everyone mention if appropriate

Blog Post Promotion

  • X: Title + excerpt + link + 2 hashtags
  • Telegram: Full snippet + link + formatted
  • Discord: Embed with author, thumbnail, description

Live Stream Announcement

  • X: "Going live now!" + link + image
  • Telegram: Pin message with reminder
  • Discord: @here + embed with countdown

Tips for Effective Cross-Posting

  1. Tailor per platform: Don't just copy-paste identically
  2. Timing matters: Post when each platform's audience is active
  3. Use platform features: Threads on X, pins on Telegram, embeds on Discord
  4. Track engagement: Use platform analytics to see what works
  5. Handle errors gracefully: If one platform fails, others should still post