コード例 #1
0
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)
コード例 #2
0
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,
            )
コード例 #3
0
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."
コード例 #4
0
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)
コード例 #5
0
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)
コード例 #6
0
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"]
コード例 #7
0
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"]