关于 reddit-cultivate
reddit-cultivate 是通过 AppleScript 操控已登录的 Chrome 浏览器来经营 Reddit 社区的技能,涵盖账号检查、热门上升帖筛选、评论撰写与发布,并提供频率限制和链接汇总。
主要功能
- 01通过 AppleScript 控制 Chrome
- 02检查 Reddit 账号状态
- 03查找版块上升帖
- 04撰写并发布评论
- 05通过链接追踪已发评论
适用场景
- 01检查 Reddit 登录状态和 karma
- 02查找目标版块中的早期讨论
- 03在会话限制内发布针对性评论
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ phy041/ claude-skill-reddit --skill reddit-cultivate安装后在 Claude Code 中输入/reddit-cultivate确认已加载。
详细介绍
Reddit 培育技能(AppleScript Chrome 控制)
通过 AppleScript 控制用户真实的 Chrome 浏览器,建立并维护 Reddit 影响力。不使用 Playwright、Selenium 或 API 令牌。
工作原理
Claude Code → osascript → Chrome (real browser, logged in) → Reddit
- AppleScript 在 Chrome 当前标签页中执行 JavaScript
- Chrome 已登录 Reddit → 自动发送 Cookie
- 同源 fetch → 无 CORS、无检测、无 IP 封锁
- Reddit 无法将此操作与人工浏览区分开来
前提条件
- 仅限 macOS(AppleScript 是 macOS 技术)
- Chrome:查看 → 开发者 → 允许来自 Apple Events 的 JavaScript ✓(启用后重启 Chrome)
- 用户已在 Chrome 中登录 Reddit
方法检测(先运行)
Chrome 多配置文件可能导致 AppleScript 无法看到窗口。务必先检测:
WINDOWS=$(osascript -e 'tell application "Google Chrome" to return count of windows' 2>/dev/null)
if [ "$WINDOWS" = "0" ] || [ -z "$WINDOWS" ]; then
echo "Use Method 2 (System Events + Console)"
else
echo "Use Method 1 (execute javascript)"
fi
方法 1:AppleScript 执行 JavaScript(首选)
当 count of windows > 0 时有效。
导航
osascript -e 'tell application "Google Chrome" to tell active tab of first window to set URL to "https://www.reddit.com/r/SideProject/rising/"'
执行 JS 并读取结果(document.title 技巧)
# Run JS that writes result to document.title
osascript -e 'tell application "Google Chrome" to tell active tab of first window to execute javascript "fetch(\"/api/me.json\",{credentials:\"include\"}).then(r=>r.json()).then(d=>{document.title=\"R:\"+JSON.stringify({name:d.data.name,karma:d.data.total_karma})})"'
# Wait, then read title
sleep 2
osascript -e 'tell application "Google Chrome" to return title of active tab of first window'
使用 JXA 处理复杂 JS(避免繁琐的转义)
osascript -l JavaScript -e '
var chrome = Application("Google Chrome");
var tab = chrome.windows[0].activeTab;
tab.execute({javascript: "(" + function() {
// Complex JS here — no escaping needed
fetch("/r/SideProject/rising.json?limit=10", {credentials: "include"})
.then(r => r.json())
.then(d => {
var posts = d.data.children.map(p => ({
title: p.data.title.substring(0, 60),
score: p.data.score,
comments: p.data.num_comments,
id: p.data.name,
url: "https://reddit.com" + p.data.permalink
}));
document.title = "POSTS:" + JSON.stringify(posts);
});
} + ")();"});
'
方法 2:System Events + 控制台(多配置文件备用方案)
当 AppleScript 无法看到 Chrome 窗口时(多配置文件错误),使用键盘自动化。
第 1 步:将 JS 复制到剪贴板
python3 -c "
import subprocess
js = '''(async()=>{
let resp = await fetch('/api/me.json', {credentials: 'include'});
let data = await resp.json();
document.title = 'R:' + JSON.stringify({name: data.data.name, karma: data.data.total_karma});
})()'''
subprocess.run(['pbcopy'], input=js.encode(), check=True)
"
第 2 步:通过 Chrome 控制台键盘快捷键执行
osascript -e '
tell application "System Events"
tell process "Google Chrome"
set frontmost to true
delay 0.3
-- Cmd+Option+J = open/close Console
key code 38 using {command down, option down}
delay 1
-- Select all + Paste + Enter
keystroke "a" using {command down}
delay 0.2
keystroke "v" using {command down}
delay 0.5
key code 36
delay 0.3
-- Close Console
key code 38 using {command down, option down}
end tell
end tell'
第 3 步:通过 System Events 读取标题
sleep 3
osascript -e '
tell application "System Events"
tell process "Google Chrome"
return name of window 1
end tell
end tell'
工作流
第 1 步:检查账户状态
使用 /api/me.json 获取用户名和 karma,并验证登录状态。
第 2 步:扫描上升帖子
对每个目标 subreddit,获取上升帖子:
/r/{subreddit}/rising.json?limit=10
查找:
- 评论少于 15 条的上升帖子(越早参与,曝光度越高)
- 分数 > 2(已有一定热度)
- 你能回答的问题,或能提供真实见解的讨论
第 3 步:起草评论
规则:
- 2-4 句话,语气自然
- 提供真实价值(见解、经验、有用的信息)
- 不自我宣传、不贴链接、不使用表情符号
- 符合 subreddit 的文化
- 每条评论都必须独一无二
第 4 步:发布所有评论
获取 modhash,然后发布每条评论,帖子之间间隔 4 秒。
// Get modhash first
let me = await fetch("/api/me.json", {credentials: "include"}).then(r=>r.json());
let uh = me.data.modhash;
// Post comment
let body = new URLSearchParams({
thing_id: "t3_xxxxx", // post fullname
text: "Your comment here",
uh: uh,
api_type: "json"
});
let resp = await fetch("/api/comment", {
method: "POST",
credentials: "include",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
body: body.toString()
});
let result = await resp.json();
document.title = "POSTED:" + JSON.stringify(result);
从响应 HTML 中提取评论 ID:在结果中查找 id-t1_XXXXXXX。
第 5 步:附带链接的会话摘要
务必以一个摘要表格作为结尾,其中包含已发布的每条评论的直接链接。
评论链接格式为:
https://www.reddit.com/r/{subreddit}/comments/{post_id}/comment/{comment_id}/
其中:
{subreddit}= subreddit 名称{post_id}= 帖子 ID(取自thing_id,去掉t3_前缀){comment_id}= 从 POST 响应中提取的值(t1_XXXXXXX,去掉t1_前缀)
摘要表格示例:
| # | Sub | 帖子 | 评论链接 |
|---|---|---|---|
| 1 | r/SideProject | "帖子标题" | https://www.reddit.com/r/SideProject/comments/abc123/comment/xyz789/ |
| 2 | r/ClaudeAI | "帖子标题" | https://www.reddit.com/r/ClaudeAI/comments/def456/comment/uvw012/ |
这样用户就可以收藏评论、跟进回复,并追踪哪些评论获得了关注。
推荐的目标 Subreddit
| 优先级 | Subreddit | 原因 |
|---|---|---|
| 高 | r/SideProject | 发布项目,对新成员非常友好 |
| 高 | r/indiehackers | 收入和增长讨论 |
| 中 | r/ClaudeAI | AI 工具受众 |
| 中 | r/coolgithubprojects | 提升开源项目曝光度 |
| 中 | r/startups | 创业讨论 |
| 中 | r/entrepreneur | 商业见解 |
| 中 | r/opensource | 技术受众 |
评论指南
- 提供真实价值(见解、经验、有用的信息)
- 评论中不要自我宣传
- 符合 subreddit 的语气
- 具体,不要泛泛而谈
- 2-4 句话,语气自然
速率限制
| 操作 | 限制 |
|---|---|
| API 调用之间 | 至少 2 秒 |
| 帖子之间 | 至少 4 秒 |
| 每个会话 | 最多 5 条评论 |
| 每天 | 最多 10-15 条评论 |
Karma 里程碑
| Karma | 解锁内容 |
|---|---|
| 100+ | 可在大多数 subreddit 中发帖 |
| 500+ | 降低触发垃圾信息过滤器的概率 |
| 1000+ | 获得可信贡献者身份 |
| 5000+ | 获得社区认可 |
算法洞察
- 前 30 分钟决定帖子能否登上热门页面
- 早期点赞的权重是后期点赞的 10 倍
- 2 条早期评论 > 20 个被动点赞
- 最佳发帖时间:美国东部时间周日早上 6-8 点
- 点赞比例很重要:100↑/10↓(90%)优于 150↑/50↓(75%)
故障排除
| 问题 | 解决方案 |
|---|---|
count of windows = 0 | Chrome 多配置文件错误 → 使用方法 2 |
| “Allow JavaScript”不起作用 | 启用后重启 Chrome |
| Modhash 已过期 | 从 /api/me.json 重新获取 |
| 403 响应 | 触发了速率限制,等待 5 分钟以上 |
| 评论未显示 | 检查是否被影子封禁:在无痕模式下访问个人资料 |
为什么使用 AppleScript(而不是 Playwright/Selenium)
| 工具 | 问题 |
|---|---|
| Playwright | 设置 navigator.webdriver=true,会立即被检测到 |
| Selenium | 存在同样的检测问题 |
| Puppeteer | 存在同样的检测问题 |
| curl + API | 发出几次请求后,IP 会被 Reddit 屏蔽 |
| AppleScript | 控制真实的 Chrome,无法被检测到,并包含 Cookie |
评论
支持 Markdown