-
-
Save anonymous/16d2ec64e6163f6d7b3e to your computer and use it in GitHub Desktop.
Greeter Bot for reddit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
AUTHOR = "Thomas1122" | |
BOT_NAME = "Greeter Bot" | |
USER_AGENT = "%s by %s" % (BOT_NAME,AUTHOR) | |
BOT_USERNAME = "" # use your own | |
BOT_PASSWORD = "" # | |
import praw,datetime,time,random | |
from requests import HTTPError | |
reddit = None | |
db = {} | |
def setup_praw(): | |
global reddit | |
reddit = praw.Reddit(user_agent=USER_AGENT) | |
reddit.login(username=BOT_USERNAME,password = BOT_PASSWORD) | |
def setup_bot(): | |
setup_praw() | |
def load_database(): | |
global db | |
with open('greeter_bot.txt','r') as f: | |
for line in f.readlines(): | |
username,lastgreet,cid = line.strip().split(",") | |
db[username] = (datetime.datetime.strptime(lastgreet, "%Y-%m-%d %H:%M:%S.%f") , cid) | |
def store_database(): | |
global db | |
with open('greeter_bot.txt','w+') as f: | |
for k in db: | |
f.write("%s,%s,%s\n" % (k,db[k][0],db[k][1])) | |
def add_entry(username,lastgreet,lastcid): | |
db[str(username)] = (lastgreet, lastcid) | |
store_database() | |
def delete_entry(username): | |
username = str(username) | |
if username in db: | |
del db[username] | |
store_database() | |
def check_new_messages(): | |
for msg in reddit.get_unread(limit=None): | |
username = str(msg.author) | |
if msg.subject.lower() == 'hi' or msg.subject.lower() == 'hello' : | |
add_entry(username,datetime.datetime.now(),'0') | |
#reddit.send_message(msg.author, 'Registered', 'Welcome! You have been registered successfully by the /u/greeter_bot. I will greet you everyday with a single comment.') | |
log( 'Recieved registration message from %s.' % username ) | |
send_greeting_to( username , '0' ) | |
msg.mark_as_read() | |
reddit.get_redditor(username).friend() | |
elif msg.subject.lower() == 'bye' and username in db: | |
delete_entry(username) | |
#reddit.send_message(msg.author, 'Unregistered', 'You have been unregistered successfully by the /u/greeter_bot. I am sorry to see you go! :(') | |
log ('%s unregistered from my service. :(' %username) | |
msg.mark_as_read() | |
reddit.get_redditor(username).unfriend() | |
setup_bot() | |
load_database() | |
def log(t): | |
print '%s - %s' % (datetime.datetime.now().time() , t) | |
def random_greeting(username): | |
username = '/u/' + username | |
g = random.choice(["Hi %s. :)", "Greetings %s. Lovely day we're having.","Hello %s! Have a nice day.","Hey %s, you look nice. :)","Good day, %s!"]) % username | |
msg = "%s\n\r%s" % (g,"^^^I ^^^am ^^^a ^^^bot. ^^^If ^^^I'm ^^^malfunctioning, ^^^report ^^^it ^^^[here](http://redd.it/2341pg).") | |
return msg | |
def send_greeting_to(username,cid): | |
for com in reddit.get_redditor(username).get_comments(limit=1): | |
if str(com.id) != cid: | |
com.reply(random_greeting(username)) | |
#log( random_greeting(username) ) | |
log( 'Sent greetings to %s.' % username) | |
return com.id | |
return cid | |
def send_greetings(): | |
now = datetime.datetime.now() | |
for k in db: | |
if (now - db[k][0]).days >= 1: | |
print '%s was last greeted %s day(s) ago' % (k,str((now - db[k][0]).days)) | |
try: | |
cid = send_greeting_to(k,db[k][1]) | |
add_entry(k, now, cid) | |
except HTTPError as err: | |
log( "Probably banned from /r/" + str(comment.subreddit) ) | |
except praw.errors.RateLimitExceeded as err: | |
log( "Rate Limit Exceeded:\n" + str(err) ) | |
#time.sleep(err.sleep_time) | |
while True: | |
log( 'Time to wakeup.' ) | |
check_new_messages() | |
log( 'Total number of registered users - %d' % len(db)) | |
send_greetings() | |
log( 'Off to sleep.' ) | |
time.sleep(10 * 60) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment