discord.py机器人如何排除含特定关键词的Reddit视频/图集帖
问题根因
你的代码有3个明显问题,导致过滤逻辑完全失效:
- 条件判断写法错误:
if 'v.redd.it' or 'gallery' in random_post.url:不符合Python语法逻辑,非空字符串'v.redd.it'的布尔值恒为True,这个if分支会永远触发,根本没做正确的关键词匹配。 - 过滤逻辑不完整:就算判断写对,你也只做了一次重抽,第二次抽到的帖子依然可能是视频或图集,还是会发出无法嵌入的内容。
- 索引越界风险:你拉取的250条帖子索引范围是0~249,
random.randint(0, 250)有概率抽到索引250,直接触发列表越界报错。
另外你定义的strForm变量全程没有使用,属于冗余代码可以直接删除。
修复方案
最稳妥的实现是拉取帖子后先做一次全量过滤,把所有不符合要求的视频、图集帖全部排除,再从剩余有效帖子里随机选取,从根源上避免抽到不可嵌入的内容,修复后代码如下:
elif user_message.lower() == '!dog': sub = reddit.subreddit('rarepuppers') # 拉取热帖时直接过滤:排除v.redd.it视频、gallery图集 valid_posts = [ post for post in sub.hot(limit=250) if 'v.redd.it' not in post.url and 'gallery' not in post.url ] # 直接从有效帖子列表随机选1条,不用手动计算索引,避免越界 random_post = random.choice(valid_posts) await message.channel.send(random_post.url) return
可选扩展
如果后续需要过滤更多不可嵌入的内容,直接在valid_posts的判断条件里追加规则即可:
- 要排除Reddit纯文字自评帖,新增判断条件
and not post.is_self - 要排除其他第三方平台外链,可以新增对应域名的关键词判断
- 如果担心拉取的250条里有效帖太少,可以适当调大
limit参数值
内容的提问来源于stack exchange,提问作者NeoFox
相关产品推荐
相关产品推荐

