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)
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)
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))
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)
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)
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", [])
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)))
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", [])
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)
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", [])
def re_flair(count): users = helpers.load_data("user_list") reddit = helpers.initialize_reddit() main.flair_users(users[:count], reddit, config.flair_normal)