scrubber/conf_mia.py
2024-11-20 06:52:59 -08:00

55 lines
2 KiB
Python

import math
from datetime import UTC, datetime, timedelta
from com import FilterableNote, Visibility, FilterAction
from sec import connect, tokens
user_id = "9gf2ev4ex5dflllo"
token = tokens["mia"]
api = "https://void.rehab/api"
early_exit = 0xFFF
now = datetime.now(UTC)
threshold = 2.0
def criteria(root: FilterableNote) -> FilterAction:
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 FilterAction.Ignore
# 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 FilterAction.Ignore
# get my...
most_recent_post = max(thread_self, key=lambda note: note.when) # ...most recent post...
score = lambda note: note.reactions + note.renotes*5 + 1
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
if weighted_score < threshold:
if any(map(
lambda note: note.visibility in [Visibility.public, Visibility.unlisted] or note.cw,
thread_self,
)):
return FilterAction.Obliterate
else:
return FilterAction.Delete
else:
return FilterAction.Ignore