Skip to content

Instantly share code, notes, and snippets.

Created April 17, 2014 15:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/16d2ec64e6163f6d7b3e to your computer and use it in GitHub Desktop.
Save anonymous/16d2ec64e6163f6d7b3e to your computer and use it in GitHub Desktop.
Greeter Bot for reddit
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