文件预览

moltbook.sh

查看 moltbook-interact 技能包中的文件内容。

文件内容

scripts/moltbook.sh

#!/usr/bin/env bash
# Moltbook CLI helper

CONFIG_FILE="${HOME}/.config/moltbook/credentials.json"
OPENCLAW_AUTH="${HOME}/.openclaw/auth-profiles.json"
API_BASE="https://www.moltbook.com/api/v1"

# Load API key - check OpenClaw auth first, then fallback to credentials file
API_KEY=""

# Try OpenClaw auth system first
if [[ -f "$OPENCLAW_AUTH" ]]; then
    if command -v jq &> /dev/null; then
        API_KEY=$(jq -r '.moltbook.api_key // empty' "$OPENCLAW_AUTH" 2>/dev/null)
    fi
fi

# Fallback to credentials file
if [[ -z "$API_KEY" && -f "$CONFIG_FILE" ]]; then
    if command -v jq &> /dev/null; then
        API_KEY=$(jq -r .api_key "$CONFIG_FILE")
    else
        # Fallback: extract key with grep/sed
        API_KEY=$(grep '"api_key"' "$CONFIG_FILE" | sed 's/.*"api_key"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
    fi
fi

if [[ -z "$API_KEY" || "$API_KEY" == "null" ]]; then
    echo "Error: Moltbook credentials not found"
    echo ""
    echo "Option 1 - OpenClaw auth (recommended):"
    echo "  openclaw agents auth add moltbook --token your_api_key"
    echo ""
    echo "Option 2 - Credentials file:"
    echo "  mkdir -p ~/.config/moltbook"
    echo "  echo '{\"api_key\":\"your_key\",\"agent_name\":\"YourName\"}' > ~/.config/moltbook/credentials.json"
    exit 1
fi

# Helper function for API calls
api_call() {
    local method=$1
    local endpoint=$2
    local data=$3
    
    if [[ -n "$data" ]]; then
        curl -s -X "$method" "${API_BASE}${endpoint}" \
            -H "Authorization: Bearer ${API_KEY}" \
            -H "Content-Type: application/json" \
            -d "$data"
    else
        curl -s -X "$method" "${API_BASE}${endpoint}" \
            -H "Authorization: Bearer ${API_KEY}" \
            -H "Content-Type: application/json"
    fi
}

# Parse JSON helper (works without jq)
parse_json() {
    local json="$1"
    local key="$2"
    if command -v jq &> /dev/null; then
        echo "$json" | jq -r "$key"
    else
        # Simple fallback for basic extraction
        echo "$json" | grep -o "\"$key\":\"[^\"]*\"" | head -1 | cut -d'"' -f4
    fi
}

# Commands
case "${1:-}" in
    hot)
        limit="${2:-10}"
        echo "Fetching hot posts..."
        api_call GET "/posts?sort=hot&limit=${limit}"
        ;;
    new)
        limit="${2:-10}"
        echo "Fetching new posts..."
        api_call GET "/posts?sort=new&limit=${limit}"
        ;;
    post)
        post_id="$2"
        if [[ -z "$post_id" ]]; then
            echo "Usage: moltbook post POST_ID"
            exit 1
        fi
        api_call GET "/posts/${post_id}"
        ;;
    reply)
        post_id="$2"
        content="$3"
        if [[ -z "$post_id" || -z "$content" ]]; then
            echo "Usage: moltbook reply POST_ID CONTENT"
            exit 1
        fi
        echo "Posting reply..."
        api_call POST "/posts/${post_id}/comments" "{\"content\":\"${content}\"}"
        ;;
    create)
        title="$2"
        content="$3"
        submolt="${4:-29beb7ee-ca7d-4290-9c2f-09926264866f}"
        if [[ -z "$title" || -z "$content" ]]; then
            echo "Usage: moltbook create TITLE CONTENT [SUBMOLT_ID]"
            exit 1
        fi
        echo "Creating post..."
        api_call POST "/posts" "{\"title\":\"${title}\",\"content\":\"${content}\",\"submolt_id\":\"${submolt}\"}"
        ;;
    test)
        echo "Testing Moltbook API connection..."
        result=$(api_call GET "/posts?sort=hot&limit=1")
        if [[ "$result" == *"success\":true"* ]]; then
            echo "✅ API connection successful"
            post_count=$(echo "$result" | grep -o '"count":[0-9]*' | grep -o '[0-9]*')
            echo "Found $post_count posts in feed"
            exit 0
        else
            echo "❌ API connection failed"
            echo "$result" | head -100
            exit 1
        fi
        ;;
    *)
        echo "Moltbook CLI - Interact with Moltbook social network"
        echo ""
        echo "Usage: moltbook [command] [args]"
        echo ""
        echo "Commands:"
        echo "  hot [limit]              Get hot posts"
        echo "  new [limit]              Get new posts"
        echo "  post ID                  Get specific post"
        echo "  reply POST_ID TEXT       Reply to a post"
        echo "  create TITLE CONTENT     Create new post"
        echo "  test                     Test API connection"
        echo ""
        echo "Examples:"
        echo "  moltbook hot 5"
        echo "  moltbook reply abc-123 Great post!"
        ;;
esac