mcpField
B
bluesky

bluesky

github.com/acedatacloud营销与增长1767 次安装今天更新
代码仓库

关于 bluesky

通过随附的 Python CLI 管理 Bluesky 帖子的技能,可发布文本和图片,自动处理可点击的链接、话题标签与提及,也支持列出和删除帖子。

主要功能

  1. 01发布文本帖子
  2. 02添加并缩放图片
  3. 03生成链接、话题标签和提及标记
  4. 04列出近期帖子及互动情况
  5. 05删除帖子

适用场景

  1. 01向 Bluesky 发布文本动态
  2. 02发布带替代文本的图片
  3. 03查看近期帖子和互动
  4. 04通过 URI 删除帖子

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/acedatacloud/skills --skill bluesky

安装后在 Claude Code 中输入/bluesky确认已加载。

附带文件scripts/bluesky.py

详细介绍

所有操作都通过随附的 CLI scripts/bluesky.py 完成 ——该 CLI 独立运行(依赖 requests + Pillow,两者都已预装在沙盒中)。一次调用即可创建会话,自动计算可点击的 facets(链接、#话题标签、@提及,并使用正确的 UTF-8 字节偏移量);发布图片时,还会下载文件、调整大小并重新压缩,使其符合 Bluesky 约 1 MB 的 Blob 限制、调用 uploadBlob 上传,并构建 app.bsky.embed.images 嵌入内容——因此无需手动拼装脆弱的 curl + jq + heredoc(旧的内联方案总是被 Shell 引号问题弄坏,尤其是同时涉及图片和 facets 时)。

系统会注入三个连接器凭据:$BLUESKY_HANDLE (例如 name.bsky.social)、$BLUESKY_APP_PASSWORD(从 Bluesky 设置 → 隐私与安全 → 应用密码获取的应用密码,不能使用登录密码)以及 $BLUESKY_SERVICE(PDS 基础 URL,默认为 https://bsky.social)。CLI 会从环境变量中读取这些凭据——切勿回显它们。

# $SKILL_DIR can point at another skill loaded this turn — anchor on our own
# script (re-run this at the top of every fresh-shell Bash block below).
BSKY="$SKILL_DIR/scripts/bluesky.py"; [ -f "$BSKY" ] || BSKY=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bluesky.py' 2>/dev/null | head -1)
[ -f "$BSKY" ] || { echo "bluesky script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
python3 "$BSKY" whoami          # verify the session → {did, handle, service}

如果 whoami 失败并返回 session_failed / AuthenticationRequired,则标识符或应用密码有误。最常见的原因是只提供了用户名——在默认 PDS 上,CLI 会自动为不带后缀的用户名追加 .bsky.social;但如果仍然失败,用户必须使用完整账号名(name.bsky.social、自定义域名、DID 或账号邮箱)和有效的应用密码重新连接此连接器。

发布——一次调用即可发布文本、图片和链接

发布前请先向用户确认文本(发布内容会显示在用户的真实账号下)。文本长度不得超过 300 个字素。可点击的链接 / #话题标签 / @提及会自动转换为 facets——只需直接写入文本,无需计算字节偏移量。

# 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 -),即可避免 Shell 引号问题:

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>", ...}。 url 是公开且可分享的链接——请原样提供给用户。

列出我的近期帖子和互动数据

python3 "$BSKY" list --limit 20                    # default filter: posts_no_replies
python3 "$BSKY" list --limit 50 --filter posts_with_media

--filter:posts_no_replies | posts_with_replies | posts_with_media | posts_and_author_threads。--limit 最大值为 100。

删除帖子

python3 "$BSKY" delete --uri "at://did:plc:xxxx/app.bsky.feed.post/3kabc123xyz"

传入完整的 at://… 帖子 uri(可从 list 或之前的 post 操作中获取);CLI 会提取 rkey。返回空结果或 deleted:true 即表示成功。

注意事项

  • 使用应用密码,而非账号密码: 使用真实登录密码创建会话可能会被拒绝或触发双重身份验证。请始终使用从设置 → 应用密码获取的应用密码。
  • Facets 和图片大小调整均为自动操作——CLI 会计算链接 / #标签 / @提及的字节偏移量,并替你缩小超出限制的图片,使其符合约 1 MB 的 Blob 限制。
  • 300 个字素,按用户感知到的字符计数(表情符号 = 1)。
  • 速率限制: PDS 会限制每个账号的写入频率;批量发布时请留出间隔,否则会收到 429 {"error":"RateLimitExceeded"}。
  • 自托管 PDS: 如果用户运行自己的 PDS,$BLUESKY_SERVICE 应指向该服务;所有 XRPC 调用都会发往该主机,而不是 bsky.social。
  • 每次调用 CLI 时都会创建一个新的短期会话,因此无需担心 accessJwt 过期——只需重新运行命令即可。

记录输出

成功发布并获取实际结果 URL 后,请调用一次内置的 publish_artifact 工具,让用户能在我的输出中追踪此交付内容:

publish_artifact(kind="message", channel="bluesky", title="<title>", url="<the REAL returned URL>", status="delivered")

请使用实际返回的 URL,切勿伪造 URL。每个已发布项目仅调用一次,并且只能在确认交付后调用;如果发布失败,请跳过此操作(或使用 status="failed")。 请参阅 _shared/artifacts.md。

评论

支持 Markdown