import math from datetime import UTC, datetime, timedelta from com import FilterableNote, Visibility from sec import connect, tokens user_id = "9gf2ev4ex5dflllo" token = tokens["mia"] api = "https://void.rehab/api/" early_exit = 0xFFF now = datetime.now(UTC) threshold = 0.1 def criteria(root: FilterableNote) -> bool: thread = root.thread() thread_self = root.thread_self() # if there are dms involved... low_vis = min(thread, key=lambda note: note.visibility.value) if low_vis.visibility == Visibility.direct: is_direct = lambda note: note.visibility == Visibility.direct most_recent_direct = max(filter(is_direct, thread), key=lambda note: note.when) # ...and the dms are younger than two months... if now - most_recent_direct.when < timedelta(days=30 * 2): # ...do not delete the thread return False # get the most recent post... others_recency = max(thread, key=lambda note: note.when) # ...and bail if it's too new if now - others_recency.when < timedelta(days=14): return False # get my... most_recent_post = max(thread_self, key=lambda note: note.when) # ...most recent post... score = lambda note: note.reactions + note.renotes*5 high_score_post = max(thread_self, key=score) # ...highest scoring post... # ...and their values... most_recent = most_recent_post.when most_recent_age = now - most_recent high_score = score(high_score_post) # ...weigh it... weighted_score = high_score / math.sqrt(most_recent_age.days) # ...and check it against a threshold return weighted_score < threshold