mirror of
https://git.mia.jetzt/scrubber
synced 2024-11-26 23:17:24 -07:00
47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
|
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
|