· 8 years ago · Dec 11, 2017, 08:20 PM
1#requirements: python 3.x and PRAW 5.x
2import praw
3import time
4import re
5import sqlite3
6
7reddit = praw.Reddit(
8 username="",
9 password="",
10 client_id="",
11 client_secret="",
12 user_agent="",
13 api_request_delay=1,
14)
15
16class Database:
17
18 """simple class to handle the database"""
19
20 def __init__(self,file=re.sub("\.\w+",".db",__file__)):
21 self.file=file
22 self.conn=sqlite3.connect(file)
23 self.cur=self.conn.cursor()
24
25 def create_tables(self):
26 self.cur.execute("CREATE TABLE IF NOT EXISTS submission (id INTEGER)")
27 self.conn.commit()
28
29 def insert(self,_id):
30 self.cur.execute("INSERT INTO submission VALUES(?)",(_id,))
31 self.conn.commit()
32
33 def has_id(self,_id):
34 return bool(self.cur.execute("SELECT * FROM submission WHERE id=?",(_id,)).fetchall())
35
36class Bot:
37
38 """create a bot object"""
39
40 def __init__(self,subreddit,keywords,instance=reddit,account="iNeverQuiteWas"):
41 self.reddit=instance
42 self.redditor=self.reddit.redditor(account)
43 self.subreddit=self.reddit.subreddit(subreddit)
44 self.keywords=list(keywords)
45 self.session=Database()
46
47 def search(self):
48 for submission in self.subreddit.stream.submissions():
49 matches=[bool(re.search(keyword,submission.body,re.IGNORECASE)) for keyword in self.keywords]
50 if (any(matches) and not self.session.has_id(submission.id)):
51 match=self.keywords[matches.index(True)]
52 self.session.insert(submission.id)
53 self.redditor.message("Keyword Notification","[Found a match for {}]({})".format(match,submission.permalink))
54
55def main(init=True):
56 session=Database()
57 if (init):
58 session.create_tables()
59 Bot("apple",["iphone"]).search()
60
61if (__name__ == "__main__"):
62 main()