def update_status_message(): subreddits = list_subreddits() body = "Current Subreddits: \n\n" body += "\n".join( [", ".join([str(val) for val in sub]) + " " for sub in subreddits]) submission = REDDIT.submission(STATUS_POST_ID) submission.edit(body)
def parse_recipient_username(recipient_text): """ Determines if a specified recipient is a nano address or a redditor :param recipient_text: :return: either {address: valid_address} or {username: user} """ # remove the /u/ or u/ if recipient_text[:3].lower() == "/u/": recipient_text = recipient_text[3:] elif recipient_text[:2].lower() == "u/": recipient_text = recipient_text[2:] if ( shared.CURRENCY == "Nano" and ( recipient_text[:5].lower() == "nano_" or recipient_text[:4].lower() == "xrb_" ) or (shared.CURRENCY == "Banano" and recipient_text[:4].lower() == "ban_") ): # check valid address success = validate_address(recipient_text) if success["valid"] == "1": return {"address": recipient_text} # if not, check if it is a redditor disguised as an address (e.g. # nano_is_awesome, nano_tipper_z) else: try: _ = getattr(REDDIT.redditor(recipient_text), "is_suspended", False) return {"username": recipient_text} except: raise TipError( "invalid address or address-like redditor does not exist", "%s is neither a valid address nor a redditor" % recipient_text, ) else: # a username was specified try: _ = getattr(REDDIT.redditor(recipient_text), "is_suspended", False) return {"username": recipient_text} except: raise TipError( "redditor does not exist", "Could not find redditor %s. Make sure you aren't writing or " "copy/pasting markdown." % recipient_text, )
def handle_subreddit(message): parsed_text = parse_text(str(message.body)) # check if there are at least 3 items (command, sub, action, option) if len(parsed_text) < 3: return "Your command seems to be missing something. Make sure it follow the format `subreddit <subreddit> <command> <option>.`" # check if the user is a moderator of the subreddit if message.author not in REDDIT.subreddit(parsed_text[1]).moderator(): return "You are not a moderator of /r/%s." % parsed_text[1] if parsed_text[2] == "minimum": return "Subreddit-specific minimums aren't enabled yet. Check back soon!" if parsed_text[2] in ("disable", "deactivate"): # disable the bot try: sql = "DELETE FROM subreddits WHERE subreddit=%s" val = (parsed_text[1], ) MYCURSOR.execute(sql, val) MYDB.commit() except: pass return ( "Within 5 minutes, tipping will be deactivated in your subreddit %s." % parsed_text[1]) if parsed_text[2] in ("enable", "activate"): # if it's at least 4 words, set the status to that one if (len(parsed_text) > 3) and (parsed_text[3] in ["full", "minimal", "silent"]): status = parsed_text[3] else: status = "full" # sql to change subreddit to that status try: sql = "INSERT INTO subreddits (subreddit, reply_to_comments, footer, status) VALUES (%s, %s, %s, %s)" val = (parsed_text[1], True, None, status) MYCURSOR.execute(sql, val) MYDB.commit() except: sql = "UPDATE subreddits SET status = %s WHERE subreddit = %s" val = (status, parsed_text[1]) MYCURSOR.execute(sql, val) MYDB.commit() return ( "Within 5 minutes, the tipbot response in your Subreddit will be set to %s." % status) # only 4 word commands after this point if len(parsed_text) < 4: return "There was something wrong with your activate or minimum command."
from time import sleep from shared import REDDIT, LOGGER, Message LOGGER.info("Starting messenger") while True: results = Message.select() for result in results: LOGGER.info( "%s %s %s" % (result.username, result.subject, repr(result.message)[:50])) try: REDDIT.redditor(str(result.username)).message( str(result.subject), str(result.message)) except: pass Message.delete().where(Message.id == result.id).execute() sleep(6)
from time import sleep from shared import MYDB, MYCURSOR, REDDIT, LOGGER while True: sql = "SELECT * FROM messages" MYCURSOR.execute(sql) results = MYCURSOR.fetchall() MYDB.commit() for result in results: LOGGER.info("%s %s %s %s" % (result[1], result[2], result[4], repr(result[3])[:50])) try: # find the message to reply to it. if result[4] is not None: msg = REDDIT.inbox.message(result[4].replace("t4_", "")) msg.reply(str(result[3])) # if it was a comment, create a new message else: REDDIT.redditor(str(result[1])).message( str(result[2]), str(result[3])) except: pass sql = "DELETE FROM messages WHERE id = %s" val = (result[0], ) MYCURSOR.execute(sql, val) MYDB.commit() sleep(6)
def handle_subreddit(message): parsed_text = parse_text(str(message.body)) # If it is just the subreddit, return all the subreddits if len(parsed_text) < 2: response = text.SUBREDDIT["all"] subreddits = Subreddit.select(Subreddit.subreddit, Subreddit.status, Subreddit.minimum) for result in subreddits: response += f"{result.subreddit}, {result.status}, {result.minimum}" response += "\n\n" return response # Return the subreddit stats if len(parsed_text) < 3: response = text.SUBREDDIT["one"] try: result = Subreddit.select( Subreddit.subreddit, Subreddit.status, Subreddit.minimum).where( Subreddit.subreddit == parsed_text[1]).get() response += f"{result.subreddit}, {result.status}, {result.minimum}" except Subreddit.DoesNotExist: pass return response % parsed_text[1] # check if the user is a moderator of the subreddit if message.author not in REDDIT.subreddit(parsed_text[1]).moderator(): return text.SUBREDDIT["not_mod"] % parsed_text[1] # change the subreddit minimum if parsed_text[2] in ["minimum", "min"]: try: float(parsed_text[3]) except: return text.NAN % parsed_text[3] Subreddit.update(minimum=parsed_text[3]).where( Subreddit.subreddit == parsed_text[1]).execute() return text.SUBREDDIT["minimum"] % (parsed_text[1], parsed_text[3]) if parsed_text[2] in ("disable", "deactivate"): # disable the bot try: Subreddit.delete().where( Subreddit.subreddit == parsed_text[1]).execute() except: pass return text.SUBREDDIT["deactivate"] % parsed_text[1] if parsed_text[2] in ("enable", "activate"): # if it's at least 4 words, set the status to that one if (len(parsed_text) > 3) and (parsed_text[3] in ["full", "minimal", "silent"]): status = parsed_text[3] else: status = "full" # sql to change subreddit to that status try: subreddit = Subreddit.get(subreddit=parsed_text[1]) Subreddit.update(status=status).where( Subreddit.subreddit == parsed_text[1]).execute() except Subreddit.DoesNotExist: subreddit = Subreddit(subreddit=parsed_text[1], reply_to_comments=True, footer="", status=status) subreddit.save(force_insert=True) return text.SUBREDDIT["activate"] % status # only 4 word commands after this point if len(parsed_text) < 4: return text.SUBREDDIT["error"]
def handle_subreddit(message): parsed_text = parse_text(str(message.body)) # If it is just the subreddit, return all the subreddits if len(parsed_text) < 2: response = text.SUBREDDIT["all"] MYCURSOR.execute("SELECT subreddit, status, minimum FROM subreddits") myresult = MYCURSOR.fetchall() for result in myresult: result = [str(i) for i in result] response += ", ".join(result) response += "\n\n" return response # Return the subreddit stats if len(parsed_text) < 3: response = text.SUBREDDIT["one"] sql = "SELECT subreddit, status, minimum FROM subreddits WHERE subreddit=%s" val = (parsed_text[1], ) MYCURSOR.execute(sql, val) myresult = MYCURSOR.fetchall() for result in myresult: result = [str(i) for i in result] response += ", ".join(result) return response % parsed_text[1] # check if the user is a moderator of the subreddit if (message.author not in REDDIT.subreddit(parsed_text[1]).moderator() and message.author != TIPBOT_OWNER): return text.SUBREDDIT["not_mod"] % parsed_text[1] # change the subreddit minimum if parsed_text[2] in ["minimum", "min"]: try: float(parsed_text[3]) except: return text.NAN % parsed_text[3] sql = "UPDATE subreddits SET minimum = %s WHERE subreddit = %s" val = (parsed_text[3], parsed_text[1]) MYCURSOR.execute(sql, val) MYDB.commit() return text.SUBREDDIT["minimum"] % (parsed_text[1], parsed_text[3]) if parsed_text[2] in ("disable", "deactivate"): # disable the bot try: sql = "DELETE FROM subreddits WHERE subreddit=%s" val = (parsed_text[1], ) MYCURSOR.execute(sql, val) MYDB.commit() except: pass return text.SUBREDDIT["deactivate"] % parsed_text[1] if parsed_text[2] in ("enable", "activate"): # if it's at least 4 words, set the status to that one if (len(parsed_text) > 3) and (parsed_text[3] in ["full", "minimal", "silent"]): status = parsed_text[3] else: status = "full" # sql to change subreddit to that status try: sql = "INSERT INTO subreddits (subreddit, reply_to_comments, footer, status, minimum) VALUES (%s, %s, %s, %s, %s)" val = (parsed_text[1], True, None, status, PROGRAM_MINIMUM) MYCURSOR.execute(sql, val) MYDB.commit() except: sql = "UPDATE subreddits SET status = %s WHERE subreddit = %s" val = (status, parsed_text[1]) MYCURSOR.execute(sql, val) MYDB.commit() return text.SUBREDDIT["activate"] % status # only 4 word commands after this point if len(parsed_text) < 4: return text.SUBREDDIT["error"]