· 5 years ago · May 16, 2020, 03:08 PM
1#!/tmp/reddit_bot_app/lib/python3.7/site-packages/
2# coding: utf-8
3#from /tmp/dumbledore-reddit-app/lib/python3.7/site-packages/praw import praw
4import praw
5#praw.path.insert(0, 'tmp/dumbledore-reddit-app/lib/python3.7/site-packages/')
6import pdb
7import re
8import os
9import time
10import random
11import sqlite3
12from sqlite3 import Error
13
14class User:
15 def __init__(self, username, galleons, sickles, knuts):
16 self.username = username
17 self.galleons = galleons
18 self.sickles = sickles
19 self.knuts = knuts
20
21def create_connection(db_file):
22 conn = None
23 try:
24 conn = sqlite3.connect(db_file)
25 return conn
26 except Error as e:
27 print(e)
28 return conn
29
30def create_table(conn, create_table_sql):
31 try:
32 c = conn.cursor()
33 c.execute(create_table_sql)
34 c.close()
35 except Error as e:
36 print(e)
37
38def insert_user(conn, user):
39 sql = ''' INSERT INTO users(username,galleons,sickles,knuts)
40 VALUES(?,?,?,?) '''
41 cur = conn.cursor()
42 cur.execute(sql, (user.username, user.galleons, user.sickles, user.knuts,))
43 conn.commit()
44 cur.close()
45
46def update_user(conn, user):
47 sql = ''' UPDATE users
48 SET galleons = ? ,
49 sickles = ? ,
50 knuts = ?
51 WHERE username = ?'''
52 cur = conn.cursor()
53 cur.execute(sql, (user.galleons, user.sickles, user.knuts, user.username,))
54 conn.commit()
55 cur.close()
56
57def get_user(conn, username):
58 try:
59 c = conn.cursor()
60 sql_select_query = """select * from users where username = ?"""
61 c.execute(sql_select_query, (username,))
62 records = c.fetchone()
63 if records is None:
64 return 0
65 user = User(records[0], records[1], records[2], records[3])
66 c.close()
67 except sqlite3.Error as error:
68 print("Failed to read data from sqlite table", error)
69 return user
70
71def get_total_awards(conn):
72 try:
73 c = conn.cursor()
74 sql_select_query = """select sum(galleons+sickles+knuts) from users"""
75 c.execute(sql_select_query)
76 records = c.fetchone()
77 if records is None:
78 return 0
79 total_awards = records[0]
80 c.close()
81 except sqlite3.Error as error:
82 print("Failed to read data from table", error)
83 return total_awards
84
85def get_total_users(conn):
86 try:
87 c = conn.cursor()
88 sql_select_query = """select count(*) from users"""
89 c.execute(sql_select_query)
90 records = c.fetchone()
91 if records is None:
92 return 0
93 total_users = records[0]
94 c.close()
95 except sqlite3.Error as error:
96 print("Failed to read data from table", error)
97 return total_users
98
99def search():
100 reddit = praw.Reddit('ww-currency-bot')
101
102 # Have we run this code before? If not, create an empty list
103 if not os.path.isfile("posts_replied_2.txt"):
104 posts_replied_to = []
105
106 # If we have run the code before, load the list of posts we have replied to
107 else:
108 # Read the file into a list and remove any empty values
109 with open("posts_replied_2.txt", "r") as f:
110 posts_replied_to = f.read()
111 posts_replied_to = posts_replied_to.split("\n")
112 posts_replied_to = list(filter(None, posts_replied_to))
113
114 for results in reddit.subreddit('harrypotter').comments(): #Grab all the Recent Comments in every subreddit. This will return 100 of the newest comments on Reddit
115 if results.id not in posts_replied_to:
116 if not results.saved:
117 body = results.body #Grab the Comment
118 body=body.lower() #Convert the comment to lowercase so we can search it no matter how it was written
119 found=body.find('!redditgalleon')
120 if found != -1:
121 try:
122 posts_replied_to.append(results.id)
123 results.save()
124 # parent = results.parent()
125 # parent.refresh()
126 # results.refresh()
127 # name = parent.author.name
128 name = results.parent().author.name
129 if results.author.name != name:
130 conn = create_connection(r"currency_sqlite.db")
131 if conn is not None:
132 create_statement = """ CREATE TABLE IF NOT EXISTS users (
133 username text PRIMARY KEY,
134 galleons integer,
135 sickles integer,
136 knuts integer
137 ); """
138 create_table(conn, create_statement)
139 else:
140 print("Error! cannot create the database connection.")
141 with conn:
142 user = get_user(conn, name)
143 if user == 0:
144 user = User(name, 0, 0, 0)
145 insert_user(conn, user)
146 galleons = user.galleons + 1
147 user.galleons = galleons
148 update_user(conn, user)
149 galleonString = " galleon, " if user.galleons == 1 else " galleons, "
150 sickleString = " sickle, and " if user.sickles == 1 else " sickles, and "
151 knutString = " knut." if user.knuts == 1 else " knuts."
152 reply = "You have given u/" + name + " a Reddit Galleon.\n\nu/" + name + " has received a total of " + str(user.galleons) + galleonString + str(user.sickles) + sickleString + str(user.knuts) + knutString
153 results.reply(reply)
154 except:
155 break
156 else:
157 found=body.find('!redditsickle')
158 if found != -1:
159 try:
160 posts_replied_to.append(results.id)
161 results.save()
162 # parent = results.parent()
163 # parent.refresh()
164 # results.refresh()
165 # name = parent.author.name
166 name = results.parent().author.name
167 if results.author.name != name:
168 conn = create_connection(r"currency_sqlite.db")
169 if conn is not None:
170 create_statement = """ CREATE TABLE IF NOT EXISTS users (
171 username text PRIMARY KEY,
172 galleons integer,
173 sickles integer,
174 knuts integer
175 ); """
176 create_table(conn, create_statement)
177 else:
178 print("Error! cannot create the database connection.")
179 with conn:
180 user = get_user(conn, name)
181 if user == 0:
182 user = User(name, 0, 0, 0)
183 insert_user(conn, user)
184 sickles = user.sickles + 1
185 if sickles == 17:
186 galleons = user.galleons + 1
187 user.galleons = galleons
188 sickles = 0
189 user.sickles = sickles
190 update_user(conn, user)
191 galleonString = " galleon, " if user.galleons == 1 else " galleons, "
192 sickleString = " sickle, and " if user.sickles == 1 else " sickles, and "
193 knutString = " knut." if user.knuts == 1 else " knuts."
194 reply = "You have given u/" + name + " a Reddit Sickle.\n\nu/" + name + " has received a total of " + str(user.galleons) + galleonString + str(user.sickles) + sickleString + str(user.knuts) + knutString
195 results.reply(reply)
196 except:
197 break
198 else:
199 found=body.find('!redditknut')
200 if found != -1:
201 try:
202 posts_replied_to.append(results.id)
203 results.save()
204 # parent = results.parent()
205 # parent.refresh()
206 # results.refresh()
207 # name = parent.author.name
208 name = results.parent().author.name
209 if results.author.name != name:
210 conn = create_connection(r"currency_sqlite.db")
211 if conn is not None:
212 create_statement = """ CREATE TABLE IF NOT EXISTS users (
213 username text PRIMARY KEY,
214 galleons integer,
215 sickles integer,
216 knuts integer
217 ); """
218 create_table(conn, create_statement)
219 else:
220 print("Error! cannot create the database connection.")
221 # user = User(name, 0, 0, 0)
222 with conn:
223 user = get_user(conn, name)
224 if user == 0:
225 user = User(name, 0, 0, 0)
226 insert_user(conn, user)
227 knuts = user.knuts + 1
228 if knuts == 29:
229 sickles = user.sickles + 1
230 user.sickles = sickles
231 knuts = 0
232 user.knuts = knuts
233 update_user(conn, user)
234 galleonString = " galleon, " if user.galleons == 1 else " galleons, "
235 sickleString = " sickle, and " if user.sickles == 1 else " sickles, and "
236 knutString = " knut." if user.knuts == 1 else " knuts."
237 reply = "You have given u/" + name + " a Reddit Knut.\n\nu/" + name + " has received a total of " + str(user.galleons) + galleonString + str(user.sickles) + sickleString + str(user.knuts) + knutString
238 results.reply(reply)
239 except:
240 break
241 else:
242 found=body.find("!gringotts")
243 if found != -1:
244 try:
245 posts_replied_to.append(results.id)
246 results.save()
247 name = results.author.name
248 conn = create_connection(r"currency_sqlite.db")
249 if conn is not None:
250 create_statement = """ CREATE TABLE IF NOT EXISTS users (
251 username text PRIMARY KEY,
252 galleons integer,
253 sickles integer,
254 knuts integer
255 ); """
256 create_table(conn, create_statement)
257 else:
258 print("Error! cannot create the database connection.")
259 with conn:
260 user = get_user(conn, name)
261 if user == 0:
262 user = User(name, 0, 0, 0)
263 insert_user(conn, user)
264 galleonString = " galleon, " if user.galleons == 1 else " galleons, "
265 sickleString = " sickle, and " if user.sickles == 1 else " sickles, and "
266 knutString = " knut." if user.knuts == 1 else " knuts."
267 total_awards = 0
268 total_users = 0
269 total_awards = get_total_awards(conn)
270 total_users = get_total_users(conn)
271 if total_awards != 0 and total_users != 0:
272 reply = "You have been given a total of " + str(user.galleons) + galleonString + str(user.sickles) + sickleString + str(user.knuts) + knutString + "\n\n____________\n\n" + "I have given " + str(total_users) + " users a total of " + str(total_awards) + " awards."
273 else:
274 reply = "You have been given a total of " + str(user.galleons) + galleonString + str(user.sickles) + sickleString + str(user.knuts) + knutString
275 results.reply(reply)
276 except:
277 break
278 # Write our updated list back to the file
279 with open("posts_replied_2.txt", "w") as f:
280 for post_id in posts_replied_to:
281 f.write(post_id + "\n")
282
283search()