python - 让 reddit bot 生成对提交的随机回复
问题描述
我正在开发一个使用 PRAW 从文本文件生成链接的机器人。这是我的代码:
import praw
from random import choice
import re
reddit = praw.Reddit(user_agent='XXX',
client_id='XXX',
client_secret='XXX',
username='XXX',
password='XXX')
with open("links.txt") as f:
lines = [l.rstrip() for l in f]
subreddit = reddit.subreddit('SUBREDDIT')
for submission in subreddit.stream.submissions:
if re.search("!TRIGGER WORD", submission.title, re.IGNORECASE):
submission.reply(choice(lines))
运行我的脚本后,我收到以下错误消息:
Traceback (most recent call last):
File "main.py", line 16, in <module>
for submission in subreddit.stream.submissions:
TypeError: 'method' object is not iterable
有任何想法吗?
编辑:我在这行之后忘记了括号:
for submission in subreddit.stream.submissions:
它应该如下所示:
for submission in subreddit.stream.submissions():
或这个:
for submission in subreddit.stream.submissions(skip_existing=True):
后者只会在流启动后寻找新的提交。如果您想用随机选择进行回复,但不使用文件,您可以这样做:
导入您的库:
import praw import random
创建 reddit 实例:
reddit = praw.Reddit(client_id="my client id",
client_secret="my client secret",
user_agent="my user agent",
username="my username",
password="my password")
创建一个这样的列表:
choices = ['choice', 'choice2', 'choice3']
然后检查您的触发器是否在标题中并随机选择回复:
for submission in subreddit.stream.submissions(): if "trigger" in submission.title: submission.reply(random.choice(choices))
解决方案
您发布的代码与回溯中的代码不同。您发布的代码应该可以工作;而您的回溯中的代码表明您忘记调用submissions
. 那条线应该是
for submission in subreddit.stream.submissions():
或者
for submission in subreddit.stream.submissions(skip_existing=True):
但不是
for submission in subreddit.stream.submissions:
推荐阅读
- c++ - std::fstream 需要很长时间才能将大数据写入 .csv 文件
- visual-studio - Xamarin 应用程序无法在 Android 设备上调试
- python - 如何打印循环迭代的最后一个值
- python - 使用 SavedModel 或 freeze_graph.pb 进行 Tensorflow 2.0 推理
- vue.js - vuejs 属性中的这个语法 `${k}` 是什么?
- puppeteer - 自 2019 年 8 月 15 日起,Puppeteer 下载未能安装 Chromium
- c# - 在 unity3D 中编辑或不编辑 Transform.rotation
- javascript - 使用 javascript 自动引用
- linux - 删除具有相似名称的文件,除了一个?
- oracle - 替换字符串中点后的空格