Initial commit of OpenClaw agent Chloe
This commit is contained in:
142
skills/moltbook-interact/scripts/moltbook.sh
Normal file
142
skills/moltbook-interact/scripts/moltbook.sh
Normal file
@@ -0,0 +1,142 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user