You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Reddit评论机器人代码以支持多Subreddit与多关键词?

解决Reddit机器人多Subreddit与多关键词的问题

我来帮你搞定这个问题!你的代码里有两个关键逻辑错误,我一步步给你拆解并修正:


错误1:多Subreddit的调用方式不对

你用r.subreddit(any(subreddits))是完全错误的——PRAW(Reddit的Python SDK)要求多个子reddit用加号(+)分隔的字符串来指定,比如"test+bottest"。正确的做法是把你的子reddit列表转成符合要求的格式:

subreddits = ["test", "bottest"]
# 把列表转为"test+bottest"格式
subreddits_str = "+".join(subreddits)
# 然后传入subreddit方法
r.subreddit(subreddits_str)

错误2:多关键词的判断逻辑错误

any(keywords) in comment.body这个写法逻辑完全不通:any(keywords)会直接返回True(因为你的关键词列表非空),相当于判断True in comment.body,这肯定匹配不到任何内容。

正确的逻辑是遍历每个关键词,检查是否有任意一个出现在评论内容中,建议统一转成小写来避免大小写敏感(比如用户发"Hello"也能匹配到你的"hello"关键词):

# 先把评论内容转小写,避免大小写问题
comment_body_lower = comment.body.lower()
# 检查是否有任意一个关键词在评论里
has_keyword = any(keyword.lower() in comment_body_lower for keyword in keywords)

完整修正后的代码示例

import praw
import time

# 初始化Reddit机器人(替换成你的凭证!)
r = praw.Reddit(
    client_id="你的Client ID",
    client_secret="你的Client Secret",
    username="机器人用户名",
    password="机器人密码",
    user_agent="自定义用户代理(比如:my-comment-bot/v1.0 by u/你的用户名)"
)

# 配置你的关键词和目标子reddit
keywords = ["hello", "okay"]
subreddits = ["test", "bottest"]
subreddits_str = "+".join(subreddits)  # 转成PRAW支持的格式

# 存储已回复过的评论ID,避免重复回复
comments_replied_to = set()

while True:
    try:
        # 遍历多个子reddit的最新100条评论
        for comment in r.subreddit(subreddits_str).comments(limit=100):
            comment_body_lower = comment.body.lower()
            # 三重判断:未回复过、不是机器人自己发的、包含任意关键词
            if (comment.id not in comments_replied_to 
                and comment.author != r.user.me()
                and any(keyword.lower() in comment_body_lower for keyword in keywords)):
                
                # 替换成你想回复的内容
                comment.reply("Hey, I spotted your keyword! 😊")
                print(f"已回复评论ID: {comment.id}")
                comments_replied_to.add(comment.id)
                
                # 避免触发Reddit的速率限制,回复后暂停10秒
                time.sleep(10)
        
        # 一轮扫描结束后暂停30秒再继续,减少请求频率
        time.sleep(30)
    
    # 捕获异常并打印,避免机器人崩溃
    except Exception as e:
        print(f"出错了: {str(e)}")
        time.sleep(60)

额外注意事项

  1. 一定要替换代码里的机器人凭证(Client ID、Secret等),这些可以在Reddit开发者后台申请
  2. 加入了延迟和异常处理,避免被Reddit判定为恶意请求而限制账号
  3. 用集合存储已回复的评论ID,比列表查询速度更快
  4. 统一转小写匹配关键词,能提升命中率

内容的提问来源于stack exchange,提问作者Matcha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:19:01