mcpField
R
reddit-cultivate

reddit-cultivate

github.com/phy041营销与增长4749 次安装17 周前更新
代码仓库

关于 reddit-cultivate

reddit-cultivate 是通过 AppleScript 操控已登录的 Chrome 浏览器来经营 Reddit 社区的技能,涵盖账号检查、热门上升帖筛选、评论撰写与发布,并提供频率限制和链接汇总。

主要功能

  1. 01通过 AppleScript 控制 Chrome
  2. 02检查 Reddit 账号状态
  3. 03查找版块上升帖
  4. 04撰写并发布评论
  5. 05通过链接追踪已发评论

适用场景

  1. 01检查 Reddit 登录状态和 karma
  2. 02查找目标版块中的早期讨论
  3. 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帖子评论链接
1r/SideProject"帖子标题"https://www.reddit.com/r/SideProject/comments/abc123/comment/xyz789/
2r/ClaudeAI"帖子标题"https://www.reddit.com/r/ClaudeAI/comments/def456/comment/uvw012/

这样用户就可以收藏评论、跟进回复,并追踪哪些评论获得了关注。


推荐的目标 Subreddit

优先级Subreddit原因
高r/SideProject发布项目,对新成员非常友好
高r/indiehackers收入和增长讨论
中r/ClaudeAIAI 工具受众
中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 = 0Chrome 多配置文件错误 → 使用方法 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