Beispiel #1
0
def replace(old_un, new_un):
    users = helpers.load_data("user_list")
    users[users.index(old_un)] = new_un
    helpers.write_data("user_list", users)

    reddit = helpers.initialize_reddit()
    if not config.testing:
        try:
            reddit.subreddit(config.target_subreddit).flair.set(
                redditor=old_un, text="Moved to /u/{}".format(new_un)
            )
            reddit.subreddit(config.target_subreddit).contributor.remove(old_un)
        except (praw.exceptions.PRAWException, prawcore.PrawcoreException):
            # Deleted user, most likely
            pass
        main.flair_users(
            [new_un], reddit, config.flair_normal, number_adjustment=users.index(new_un)
        )
        main.add_users([new_un], reddit)
        participated = set(helpers.load_data("participated"))
        if old_un in participated:
            participated.add(new_un)
            helpers.write_data("participated", list(participated))
    else:
        print(
            "Flaired and removed /u/{}; Flaired and added /u/{}".format(old_un, new_un)
        )

    if config.update_sidebar:
        updates.update_sidebar(users)
Beispiel #2
0
def main(new_users):
    reddit = helpers.initialize_reddit()

    user_list = helpers.load_data("user_list")

    new_users = [user for user in new_users if user not in user_list]

    if not new_users:
        helpers.write_log_trash(
            "All re-adds already on the memberlist {}".format(helpers.date_string()),
            "",
        )
        sys.exit(1)

    daddy.add_users(new_users, reddit)
    daddy.flair_users(
        new_users, reddit, config.flair_normal, number_adjustment=len(user_list)
    )

    insert_users_to_userlist(new_users)
    user_list = helpers.load_data("user_list")

    title, body = build_post(new_users, len(user_list) - len(new_users) + 1)
    daddy.make_post(title, body, reddit, distinguish=True, sticky=False)

    if config.update_sidebar:
        updates.update_sidebar(user_list)
Beispiel #3
0
def _get_widget(sidebar_contents):
    reddit = helpers.initialize_reddit()
    for widget in reddit.subreddit(config.target_subreddit).widgets.sidebar:
        if widget.kind == "textarea" and widget.shortName == "Current members":
            return widget

    raise ValueError("No widget with specified contents found.")
def forward(to):
    reddit = helpers.initialize_reddit()
    to = reddit.redditor(to)

    for item in reddit.inbox.unread(limit=None):

        if not config.testing:
            item.mark_read()

        if isinstance(item, Message):
            author = item.author
            body = item.body
            subject = item.subject

            forward_subject = FORWARD_SUBJECT.format(subject=subject,
                                                     author=author)
            forward_message = FORWARD_MESSAGE.format(author=author,
                                                     subject=subject,
                                                     body=body)

            if not config.testing:
                try:
                    to.message(subject=forward_subject,
                               message=forward_message)
                except Exception:
                    # just in case, for now.
                    # todo remove this
                    to.message(
                        subject="New message",
                        message=
                        "I have a new message, but something went wrong.",
                    )
            else:
                print("Messaging {} with subject {!r} and message:\n{}".format(
                    to, forward_subject, forward_message))
Beispiel #5
0
def update_sidebar(user_list):
    path_1 = os.path.join(
        helpers.folder_path(),
        config.sidebar_text_paths[0][0],
        config.sidebar_text_paths[0][1],
    )
    path_2 = os.path.join(
        helpers.folder_path(),
        config.sidebar_text_paths[1][0],
        config.sidebar_text_paths[1][1],
    )
    with open(path_1, "r") as f:
        sidebar_1 = f.read()
    with open(path_2, "r") as f:
        sidebar_2 = f.read()

    sidebar_rows = [sidebar_1, "\n", "Number | User\n---|---"]
    for i, user in enumerate(user_list):
        sidebar_rows.append("{} | /u/{}".format(i + 1, user))
    sidebar_rows.append(sidebar_2)

    sidebar = "\n".join(sidebar_rows)

    if not config.testing:
        reddit = helpers.initialize_reddit()
        reddit.subreddit(
            config.target_subreddit).wiki['config/sidebar'].edit(sidebar)
        widget = _get_widget(sidebar_1)
        widget.mod.update(text=sidebar)
    else:
        print("Testing: description updated:\n")
        print(sidebar)
Beispiel #6
0
def main():
    if config.forward_user:
        forward_messages.forward(config.forward_user)

    reddit = helpers.initialize_reddit()
    participated = set(helpers.load_data("participated"))
    stats = helpers.load_data("stats")

    participated = participated.union(
        get_participants(reddit, stats["last_full_run"]))
    helpers.write_data("participated", list(participated))

    regulars = config.regulars_list
    warn = []

    for i in regulars:
        if i not in participated:
            warn.append(i)

    if len(warn) > 0:
        msg = "These regulars haven't participated this week: "
        aux = ""
        for i in warn:
            msg += aux + i
            aux = ", "
        print(msg)

    print("Amount of participants this week:",
          len(set(participated) - set(config.mods_list)))

    stats["last_daily_run"] = (
        time.time() - 60)  # to cover accidental gaps due to execution time
    helpers.write_data("stats", stats)
def main():
    if len(argv) != 3:
        print(f"Usage: python3 {argv[0]} <day of week (num)> <on|off>", file=stderr)
        return 1
    try:
        dow = int(argv[1])
    except ValueError:
        print(f"{argv[1]!r} is not a number", file=stderr)
        return 1

    # Monday is 1. Compatibility with crontab.
    if dow % 7 != date.today().isoweekday() % 7:
        return 0  # we just do nothing.

    if argv[2] == "on":
        link_type = "any"
    elif argv[2] == "off":
        link_type = "self"
    else:
        print(f"Unknown option {argv[1]!r}")
        return 1

    reddit = helpers.initialize_reddit()
    subreddit = reddit.subreddit(config.target_subreddit)
    subreddit.mod.update(link_type=link_type)
Beispiel #8
0
def new_sub():
    reddit = helpers.initialize_reddit()
    main.check_permissions(reddit)
    user_list = helpers.load_data("user_list")
    main.flair_users(user_list, reddit, config.flair_normal)
    if config.change_title:
        updates.change_title()
    if config.update_sidebar:
        updates.update_sidebar(user_list)
    main.add_users(user_list, reddit)
    helpers.write_data("participated", [])
Beispiel #9
0
def change_title():
    titles_path = os.path.join(helpers.folder_path(), config.titles_path[0],
                               config.titles_path[1])
    with open(titles_path) as f:
        titles = json.load(f)

    if not config.testing:
        reddit = helpers.initialize_reddit()
        reddit.subreddit(
            config.target_subreddit).mod.update(title=random.choice(titles))
    else:
        print('Testing: updated title ("{}")'.format(random.choice(titles)))
Beispiel #10
0
def main():
    user_list = helpers.load_data("user_list")
    reddit = helpers.initialize_reddit()
    stats = helpers.load_data("stats")

    if user_list and ("--ignore-active-community"
                      not in sys.argv):  # checks if the user-list is non-empty
        msg = "Userlist is non-empty. Exiting. Call with --ignore-active-community to run anyway"
        helpers.write_log_trash("Failed {}".format(helpers.date_string()), msg)
        raise ActiveCommunity(msg)

    new_users, new_user_urls = helpers.load_data("potential_adds")
    helpers.write_log_trash("New users {}".format(helpers.date_string()),
                            new_users)

    post_text_items = [daddy.build_new_text(new_users, 1), "\n"]

    if config.entry_comments:
        post_text_items.append("[Comments for entry]({})".format(
            daddy.build_and_post_gist(new_users, new_user_urls)))
    if config.stats_section:
        post_text_items.append("# Info:\n\n")
        post_text_items.append("- {} users added".format(len(new_users)))
        diff = len(new_users)
        change = "+{}".format(diff) if diff >= 0 else str(diff)
        post_text_items.append("- Membercap: {} ({})".format(
            len(new_users), change))

    post_text = "\n".join(post_text_items)

    title = config.main_log_title
    if config.title_date:
        title = helpers.date_string() + " - " + title
    if config.title_number:
        stats["log_count"] += 1
        title += " #{}".format(stats["log_count"])

    daddy.make_post(title, post_text, reddit)

    if config.change_title:
        updates.change_title()

    daddy.add_users(new_users, reddit)
    daddy.flair_users(new_users, reddit, config.flair_new)

    if config.update_sidebar:
        updates.update_sidebar(new_users)

    stats["last_full_run"] = time.time()
    helpers.write_data("stats", stats)
    helpers.write_data("user_list", new_users)
    helpers.write_data("participated", [])
Beispiel #11
0
def acquire():
    reddit = initialize_reddit()
    user_list = load_data("user_list")
    # new_users, new_user_urls = get_new_users(reddit, 1, user_list)
    user_amount = 65

    # potential_adds = load_data("potential_adds", {"users": [], "urls": []})
    potential_adds = {"users": [], "urls": []}
    # while new_users[0] in potential_adds["users"]:  # just in case!!
    new_users, new_user_urls = get_new_users(reddit, user_amount, user_list)
    print(new_users, new_user_urls)
    formatted_urls = ""
    try:
        for i in range(user_amount):
            potential_adds["users"].append(new_users[i])
            potential_adds["urls"].append(new_user_urls[i])
            formatted_urls += " u/" + new_users[i]
    except Exception as exc:
        print(
            vars(exc)
        )  # you probably deleted potential_adds.json, it needs to be {"users": [], "urls": []}
    write_data("potential_adds", potential_adds)
    helpers.write_data_txt("formatted_users", formatted_urls)
Beispiel #12
0
def main():
    if config.delay:
        time.sleep(random.randrange(0, config.max_delay * 60))

    daily.main()

    reddit = (helpers.initialize_reddit()
              )  # will exit if Reddit isn't properly initialized
    check_permissions(
        reddit
    )  # will check if bot has all needed permissions; exit on failure
    participated = set(helpers.load_data("participated"))
    stats = helpers.load_data("stats")
    user_list = helpers.load_data("user_list")
    helpers.write_log_trash("User list {}".format(helpers.date_string()),
                            user_list)

    if stats["last_full_run"] + 23 * 60 * 60 > time.time():
        if "--override_time" not in sys.argv:
            msg = 'Less than 23 hours since last run. Exiting. Run with "--override_time" as an option to disregard'
            print(msg)
            helpers.write_log_trash("Failed {}".format(helpers.date_string()),
                                    msg)
            sys.exit(1)

    updated_list, not_participated = segregate_users(user_list, participated)
    helpers.write_log_trash(
        "Not participated {}".format(helpers.date_string()), not_participated)

    flair_and_remove(not_participated, reddit)
    flair_users(updated_list, reddit, config.flair_normal)

    saved_users, saved_urls = check_saved_users()
    valid_users = []
    valid_urls = []
    for i in range(len(saved_users)):
        if (valid_user(saved_users[i], reddit)
                and saved_users[i] not in valid_users
                and saved_users[i] not in updated_list):
            valid_users.append(saved_users[i])
            valid_urls.append(saved_urls[i])

    # helpers.delete_datafile("potential_adds")
    total_needed_users = len(valid_users)
    num_still_needed_users = 0
    new_users, new_user_urls = get_new_users(reddit, num_still_needed_users,
                                             updated_list)
    new_users = valid_users + new_users
    new_user_urls = valid_urls + new_user_urls
    # new_users, new_user_urls = hack_shuffle(new_users, new_user_urls)
    new_users = new_users[:total_needed_users]
    new_user_urls = new_user_urls[:total_needed_users]

    helpers.write_log_trash("New users {}".format(helpers.date_string()),
                            new_users)

    post_text_lines = [
        build_removed_text(user_list, not_participated),
        "\n",
        build_new_text(new_users,
                       len(updated_list) + 1),
        "\n",
    ]

    if config.entry_comments:
        try:
            post_text_lines.append("\n[Comments for entry]({})".format(
                build_and_post_gist(new_users, new_user_urls)))
        except Exception:  # can fail!
            pass  # lol
    if config.stats_section:
        post_text_lines.append("\n# Info:\n")
        post_text_lines.append("- {} users kicked".format(
            len(not_participated)))
        post_text_lines.append("- {} users added".format(len(new_users)))
        diff = len(new_users) - len(not_participated)
        change = "+{}".format(diff) if diff >= 0 else str(diff)
        post_text_lines.append("- Membercap: {} ({})".format(
            (len(updated_list) + len(new_users)), change))

    post_text = "\n".join(post_text_lines)

    title = config.main_log_title
    if config.title_date:
        title = helpers.date_string() + " - " + title
    if config.title_number:
        stats["log_count"] += 1
        title += " #{}".format(stats["log_count"])

    make_post(title, post_text, reddit)

    if config.change_title:
        updates.change_title()

    add_users(new_users, reddit)
    flair_users(new_users,
                reddit,
                config.flair_new,
                number_adjustment=len(updated_list))

    updated_list_copy = updated_list[:]
    updated_list_copy.extend(new_users)
    if config.update_sidebar:
        updates.update_sidebar(updated_list_copy)

    stats["last_full_run"] = time.time()
    helpers.write_data("stats", stats)
    helpers.write_data("user_list", updated_list_copy)
    helpers.write_data("participated", [])
Beispiel #13
0
def re_flair(count):
    users = helpers.load_data("user_list")
    reddit = helpers.initialize_reddit()
    main.flair_users(users[:count], reddit, config.flair_normal)