diff --git a/cleanup.py b/cleanup.py index 5778ac9..c4a5d6f 100644 --- a/cleanup.py +++ b/cleanup.py @@ -6,43 +6,59 @@ from dotenv import load_dotenv from mastodon import Mastodon from os import getenv -# ----- initialization ----- # +def cleanup(limit: int = 40, id: int | None = None): + # ----- initialization ----- # -# load .env -load_dotenv() + # load .env + load_dotenv() -# initialize mastodon -mastodon = Mastodon( - access_token = getenv("MASTODON_USER_SECRET"), - api_base_url = getenv("MASTODON_URL") -) + # initialize mastodon + mastodon = Mastodon( + access_token = getenv("MASTODON_USER_SECRET"), + api_base_url = getenv("MASTODON_URL") + ) -# ----- go 200 posts into the past ----- # + # ----- go 200 posts into the past, if manual id is not set ----- # -# get latest posts -last_posts = mastodon.account_statuses(getenv("MASTODON_USER_ID"), exclude_replies=True, limit=40) -id_oldest_of_last_posts = -1 -for i in range(4): - id_oldest_of_last_posts = last_posts[-1]["id"] - last_posts = mastodon.account_statuses(getenv("MASTODON_USER_ID"), exclude_replies=True, max_id=id_oldest_of_last_posts, limit=40) + if id is None: + # get latest posts + last_posts = mastodon.account_statuses(getenv("MASTODON_USER_ID"), exclude_replies=True, limit=limit) + id_oldest_of_last_posts = -1 + for _ in range(4): + id_oldest_of_last_posts = last_posts[-1]["id"] + last_posts = mastodon.account_statuses(getenv("MASTODON_USER_ID"), exclude_replies=True, max_id=id_oldest_of_last_posts, limit=limit) + else: + id_oldest_of_last_posts = id + last_posts = mastodon.account_statuses(getenv("MASTODON_USER_ID"), exclude_replies=True, max_id=id, limit=limit) -# ----- delete old posts ----- # - -for i in range(5): # default: check 5 batches of 40 posts - # find id of the currently oldest post - last_post = last_posts[-1] - if last_post["favourites_count"] != 0 or last_post["reblogs_count"] != 0 or last_post["replies_count"] != 0: - id_oldest_of_last_posts = last_post["id"] - # get next batch of posts - last_posts = mastodon.account_statuses(getenv("MASTODON_USER_ID"), exclude_replies=True, max_id=id_oldest_of_last_posts, limit=40) - - # break if there are no more posts + # return if there are no posts to check if len(last_posts) == 0: - break + return - # delete all old posts of the current batch - for submission in last_posts: - # if post has no favorites, boosts or replies, delete it - if submission["favourites_count"] == 0 and submission["reblogs_count"] == 0 and submission["replies_count"] == 0: - print("Trying to delete post:", submission["url"]) - mastodon.status_delete(submission["id"]) + # ----- delete old posts ----- # + + # default: check 2 batches of 40 posts (and 6 batches if the id was set manually) + num_batches = 2 if id is None else 6 + for i in range(num_batches): + # skip getting new batch in the first iteration if the id was set manually + if i != 0 or id is None: + # find id of the currently oldest post + last_post = last_posts[-1] + if last_post["favourites_count"] != 0 or last_post["reblogs_count"] != 0 or last_post["replies_count"] != 0: + id_oldest_of_last_posts = last_post["id"] + # get next batch of posts + last_posts = mastodon.account_statuses(getenv("MASTODON_USER_ID"), exclude_replies=True, max_id=id_oldest_of_last_posts, limit=limit) + + # return if there are no more posts to check + if len(last_posts) == 0: + return + + # delete all old posts of the current batch + for submission in last_posts: + # if post has no favorites, boosts or replies, delete it + if submission["favourites_count"] == 0 and submission["reblogs_count"] == 0 and submission["replies_count"] == 0: + print("Trying to delete post:", submission["url"]) + mastodon.status_delete(submission["id"]) + +if __name__ == "__main__": + cleanup(limit=40, id=None)