I'm working on a bot using PRAW to generate a link from a text file. Here's my code:
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))
After running my script, I get this error message:
Traceback (most recent call last):
File "main.py", line 16, in <module>
for submission in subreddit.stream.submissions:
TypeError: 'method' object is not iterable
Any ideas?
Edit: I forgot my parentheses after this line:
for submission in subreddit.stream.submissions:
It should look like this:
for submission in subreddit.stream.submissions():
or this:
for submission in subreddit.stream.submissions(skip_existing=True):
The latter will only look for new submissions after the stream was started. If you want to reply with a random choice, but not using a file, you could do this:
import your libraries:
import praw
import random
Create reddit instance:
reddit = praw.Reddit(client_id="my client id",
client_secret="my client secret",
user_agent="my user agent",
username="my username",
password="my password")
Create a list like this:
choices = ['choice', 'choice2', 'choice3']
Then check if your trigger is in the title and reply with random choice:
for submission in subreddit.stream.submissions():
if "trigger" in submission.title:
submission.reply(random.choice(choices))
The code you posted is different than the code in your traceback. The code you posted should work; while the code in your traceback indicates you forgot to call submissions
. That line should be
for submission in subreddit.stream.submissions():
or
for submission in subreddit.stream.submissions(skip_existing=True):
but not
for submission in subreddit.stream.submissions: