Loading...
Loading...
Publish (with optional images), delete and read your own posts on Bluesky via the AT Protocol (XRPC). Use when the user wants to post to their Bluesky account (text or 带图 / with a picture), cross-post an article as a short dev-focused post, attach an image, delete a post, or list their own recent posts with engagement stats (reposts, likes, replies). Auth uses the user's handle plus an App Password.
npx skill4agent add acedatacloud/skills blueskyscripts/bluesky.pyrequestsPillowuploadBlobapp.bsky.embed.imagescurl + jq + heredoc$BLUESKY_HANDLEname.bsky.social$BLUESKY_APP_PASSWORD$BLUESKY_SERVICEhttps://bsky.socialBSKY="$SKILL_DIR/scripts/bluesky.py"
python3 "$BSKY" whoami # verify the session → {did, handle, service}whoamisession_failedAuthenticationRequired.bsky.socialname.bsky.social# plain text post
python3 "$BSKY" post --text "Hello Bluesky 👋 shipping with the AT Protocol"
# 带图发送 / post WITH an image (URL or local path) — the image is downloaded,
# resized to fit the blob limit, uploaded and embedded automatically:
python3 "$BSKY" post \
--text "Stop wiring 3 image APIs. One endpoint → posters, cards, mockups. https://platform.acedata.cloud/documents/openai-images-generations-integration #AI #API" \
--image "https://cdn.acedata.cloud/xxxx.png" --alt "AI image API hero"
# up to 4 images, each with its own --alt (paired by order)
python3 "$BSKY" post --text "gallery" --image a.png --alt "one" --image b.png --alt "two"--text-file--text -cat > /tmp/post.txt <<'EOF'
Line one 🎨
Line two with a link https://platform.acedata.cloud #AI
EOF
python3 "$BSKY" post --text-file /tmp/post.txt --image "https://cdn.acedata.cloud/xxxx.png"{"posted":true,"uri":"at://…","url":"https://bsky.app/profile/<handle>/post/<rkey>", ...}urlpython3 "$BSKY" list --limit 20 # default filter: posts_no_replies
python3 "$BSKY" list --limit 50 --filter posts_with_media--filterposts_no_repliesposts_with_repliesposts_with_mediaposts_and_author_threads--limitpython3 "$BSKY" delete --uri "at://did:plc:xxxx/app.bsky.feed.post/3kabc123xyz"at://…urilistpostrkeydeleted:true429 {"error":"RateLimitExceeded"}$BLUESKY_SERVICEbsky.socialaccessJwtpublish_artifactpublish_artifact(kind="message", channel="bluesky", title="<title>", url="<the REAL returned URL>", status="delivered")status="failed"_shared/artifacts.md