名称: social-post
版本: 1.4.0
描述: 向 X/Twitter 和 Farcaster 发布包含文本和图片的帖子及回复。支持多账户管理、自动变体以避免重复内容检测、草稿预览、字符数验证、线程、回复和图片上传。X API 采用按量计费,Farcaster 按次付费。
作者: 0xdas
许可证: MIT
标签: [twitter, farcaster, social, posting, automation, threads, x-api, consumption-based, multi-account, anti-spam]
元数据:
openclaw:
requires:
bins: [bash, curl, jq, python3, shuf]
env: [X_CONSUMER_KEY, X_CONSUMER_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET]
向 Twitter 和/或 Farcaster 发布帖子,自动进行字符限制验证并处理图片上传。
--vary 标志避免 Twitter 的重复内容检测所需凭证(存储在 /home/phan_harry/.openclaw/.env):
X_CONSUMER_KEY=你的消费者密钥
X_CONSUMER_SECRET=你的消费者密钥密文
X_ACCESS_TOKEN=你的访问令牌
X_ACCESS_TOKEN_SECRET=你的访问令牌密文
X_USERNAME=你的用户名
X_USER_ID=你的用户ID
如何获取凭证:
申请 X 开发者账户
启用按量计费
创建应用
生成密钥
添加到 .env 文件
bash
echo "X_CONSUMER_KEY=xxx" >> ~/.openclaw/.env
echo "X_CONSUMER_SECRET=xxx" >> ~/.openclaw/.env
echo "X_ACCESS_TOKEN=xxx" >> ~/.openclaw/.env
echo "X_ACCESS_TOKEN_SECRET=xxx" >> ~/.openclaw/.env
测试你的凭证:
# 试运行(不会发布)
scripts/post.sh --twitter --dry-run "测试消息"
你可以通过添加带有自定义前缀的额外凭证来管理多个 Twitter 账户。
示例:添加第二个账户
# 添加带有自定义前缀的凭证(例如,MYACCOUNT_)
echo "MYACCOUNT_API_KEY=xxx" >> ~/.openclaw/.env
echo "MYACCOUNT_API_KEY_SECRET=xxx" >> ~/.openclaw/.env
echo "MYACCOUNT_ACCESS_TOKEN=xxx" >> ~/.openclaw/.env
echo "MYACCOUNT_ACCESS_TOKEN_SECRET=xxx" >> ~/.openclaw/.env
用法:
# 从默认账户发布(X_*)
scripts/post.sh --twitter "来自默认账户的消息"
# 从自定义账户发布
scripts/post.sh --account myaccount --twitter "来自第二个账户的消息"
# 从自定义账户回复
scripts/reply.sh --account myaccount --twitter TWEET_ID "来自第二个账户的回复"
命名约定:
- 默认账户:X_CONSUMER_KEY、X_CONSUMER_SECRET 等。
- 自定义账户:{PREFIX}_API_KEY、{PREFIX}_API_KEY_SECRET、{PREFIX}_ACCESS_TOKEN、{PREFIX}_ACCESS_TOKEN_SECRET
- 在 --account 标志中使用小写前缀名称
所需凭证(存储在 /home/phan_harry/.openclaw/farcaster-credentials.json):
{
"fid": "你的 Farcaster ID",
"custodyAddress": "0x...",
"custodyPrivateKey": "0x...",
"signerPublicKey": "0x...",
"signerPrivateKey": "0x...",
"createdAt": "2026-01-01T00:00:00.000Z"
}
如何获取凭证:
使用 farcaster-agent 技能创建账户
```bash
# 这将引导你完成:
# - 创建钱包
# - 注册 FID
# - 添加签名者密钥
# - 自动保存凭证
```
或使用现有凭证
为托管钱包注资(必需)
```bash
# 检查当前余额
scripts/check-balance.sh
```
验证设置
```bash
# 检查凭证是否存在
ls -la ~/.openclaw/farcaster-credentials.json
scripts/check-balance.sh
scripts/post.sh --farcaster --dry-run "测试消息"
```
安全注意事项:
- ⚠️ 切勿分享你的私钥
- ⚠️ 凭证以纯文本形式存储 - 请确保系统安全
- ⚠️ .env 文件应具有 600 权限(仅所有者可读写)
- ⚠️ 安全备份你的凭证
# 发布到两个平台
scripts/post.sh "你的消息"
# 仅 Twitter
scripts/post.sh --twitter "你的消息"
# 仅 Farcaster
scripts/post.sh --farcaster "你的消息"
# 带图片发布到两个平台
scripts/post.sh --image /path/to/image.jpg "你的图片说明"
# 仅 Twitter 带图片
scripts/post.sh --twitter --image /path/to/image.jpg "图片说明"
# 仅 Farcaster 带图片
scripts/post.sh --farcaster --image /path/to/image.jpg "图片说明"
# 回复一条推文
scripts/reply.sh --twitter TWEET_ID "你的回复"
# 带图片回复
scripts/reply.sh --twitter TWEET_ID --image /path/to/image.jpg "带图片的回复"
# 从 URL 获取推文 ID:twitter.com/user/status/[TWEET_ID]
scripts/reply.sh --twitter 1234567890123456789 "说得好!"
# 回复一个 Cast
scripts/reply.sh --farcaster CAST_HASH "你的回复"
# 带图片回复
scripts/reply.sh --farcaster 0xabcd1234... --image /path/to/image.jpg "带图片的回复"
# 从 URL 获取 Cast 哈希:farcaster.xyz/~/conversations/[HASH]
scripts/reply.sh --farcaster 0xa1b2c3d4e5f6... "有趣的视角!"
# 回复两个平台(如果你在两个平台都有对应的 ID)
scripts/reply.sh --twitter 123456 --farcaster 0xabcd... "精彩的讨论!"
post.sh(发布)--twitter - 仅发布到 Twitter--farcaster - 仅发布到 Farcaster--account <name> - 使用的 Twitter 账户(来自 .env 的小写前缀)--vary - 自动变体文本以避免重复内容检测--image <path> - 附加图片--thread - 将长文本拆分为带编号的线程--shorten-links - 缩短 URL 以节省字符--truncate - 如果超出限制则自动截断--dry-run - 预览而不发布-y, --yes - 跳过确认提示(自动确认)reply.sh(回复)--twitter <tweet_id> - 回复具有此 ID 的 Twitter 推文--farcaster <cast_hash> - 回复具有此哈希的 Farcaster Cast--account <name> - 使用的 Twitter 账户(来自 .env 的小写前缀)--image <path> - 附加图片到回复--shorten-links - 缩短 URL 以节省字符--truncate - 如果超出限制则自动截断--dry-run - 预览而不回复-y, --yes - 跳过确认提示(自动确认)# 快速发布到两个平台(默认账户)
scripts/post.sh "gm! 正在链上构建 🦞"
# 从特定 Twitter 账户发布
scripts/post.sh --account myaccount --twitter "来自我的第二个账户的消息"
# 自动变体文本以避免重复内容检测
scripts/post.sh --vary --twitter "相同的文本,自动添加细微变化"
# 带图片的 Twitter 公告
scripts/post.sh --twitter --image ~/screenshot.png "新功能已上线!🚀"
# 仅 Farcaster
scripts/post.sh --farcaster "刚刚将 credential-manager 发布到 ClawHub!"
# 长文本作为线程(自动编号)
scripts/post.sh --thread "这是一个非常长的公告,超出了字符限制。它将自动拆分为多个带编号的帖子。每个部分将按顺序发布以创建线程。(1/3), (2/3), (3/3)"
# 缩短 URL 以节省字符
scripts/post.sh --shorten-links "看看这个很棒的项目:https://github.com/very-long-organization-name/very-long-repository-name"
# 组合线程 + 链接缩短
scripts/post.sh --thread --shorten-links "包含多个链接的长文本,如果需要将被缩短并拆分为线程"
# 两个平台,自动截断长文本
scripts/post.sh --truncate "可能超出限制的非常长的消息..."
# 无需确认的预览(用于自动化工作流)
scripts/post.sh --yes "来自 CI/CD 的自动化帖子"
# 回复一个 Twitter 线程
scripts/reply.sh --twitter 1234567890123456789 "完全同意这个观点!💯"
# 从特定 Twitter 账户回复
scripts/reply.sh --account myaccount --twitter 1234567890 "从我的第二个账户回复"
# 回复 Farcaster Cast
scripts/reply.sh --farcaster 0xa1b2c3d4e5f6... "深刻的见解!你考虑过...吗?"
# 带缩短链接的回复
scripts/reply.sh --twitter 123456 --shorten-links "这里有更多信息:https://example.com/very-long-article-url"
# 带图片的回复
scripts/reply.sh --twitter 123456 --image ~/chart.png "这是支持这个观点的数据"
# 回复两个平台(相同消息)
scripts/reply.sh --twitter 123456 --farcaster 0xabc123 "完全正确 🎯"
# 无需确认的快速回复
scripts/reply.sh --twitter 123456 --yes "快速确认"
# 试运行以预览回复
scripts/reply.sh --twitter 123456 --dry-run "测试回复预览"
脚本在发布前会显示草稿预览:
=== 草稿预览 ===
要发布的文本:
─────────────────────────────────────────────
你的消息
─────────────────────────────────────────────
目标平台:
• Twitter
• Farcaster
是否继续发布?(y/n):
--yes 标志跳过提示--dry-run 预览而不发布.env 中的 Twitter 凭证(X_CONSUMER_KEY, X_CONSUMER_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET)/home/phan_harry/.openclaw/farcaster-credentials.json 中的 Farcaster 凭证curl、jq官方定价: https://developer.twitter.com/#pricing
关键信息: X API 已完全取消订阅层级(Basic、Pro 等)。现在的模式纯粹是按使用付费 - 你只需为你实际发出的 API 请求付费。
每个 Farcaster Cast 花费 0.001 USDC(通过 x402 协议支付):
- 从 Base 链上的托管钱包中扣除
- 发送至 Neynar Hub:0xA6a8736f18f383f1cc2d938576933E5eA7Df01A1
- ~$1 USDC = 1000 次 Cast
检查余额:
# 快速检查
scripts/check-balance.sh
# 手动检查
jq -r '.custodyAddress' ~/.openclaw/farcaster-credentials.json
# 在 basescan.org 上查看
为钱包注资:
在 Base 链上向托管地址发送 USDC。如有需要,可从其他链桥接。