fediseer/examples/update_blacklist.py

80 lines
3.0 KiB
Python
Raw Normal View History

2023-06-21 00:07:49 +00:00
import requests
2023-09-10 16:43:08 +00:00
import os
from dotenv import load_dotenv
2023-06-21 00:07:49 +00:00
from pythorhead import Lemmy
from pythonseer import Fediseer
from pythonseer.types import FormatType
2023-06-21 00:07:49 +00:00
2023-09-10 16:43:08 +00:00
load_dotenv()
2023-06-21 00:07:49 +00:00
# Your own instance's domain
LEMMY_DOMAIN = "lemmy.dbzer0.com"
USERNAME = "username"
2023-09-10 16:43:08 +00:00
# You can write your password here, or add it to the LEMMY_PASSWORD env var, or add LEMMY_PASSWORD to a .env file
2023-06-21 00:07:49 +00:00
PASSWORD = "password"
# If there's this many registered users per local post+comments, this site will be considered suspicious
ACTIVITY_SUSPICION = 20
2023-06-25 22:53:55 +00:00
# If there's this many registered users per active monthly user, this site will be considered suspicious
MONTHLY_ACTIVITY_SUSPICION = 500
2023-06-21 00:07:49 +00:00
# Extra domains you can block. You can just delete the contents if you want to only block suspicious domains
blacklist = {
"truthsocial.com",
"threads.net",
2023-06-21 00:07:49 +00:00
}
2023-09-10 16:43:08 +00:00
# Add instances in here which want to ensure are not added in your blocklist
whitelist = {
}
# If you (don't) want to combine your own censures, with the ones from other trusted instances, adjust the list below.
# The censures will be the combined list from your own domain and any domains specified below.
trusted_instances = [
"lemmings.world",
]
# If you want to only block based on specific filters as specified by the admins who have censured them
# You can provide them in a list below. Any instance marked with that filter from your trusted instances
# Will be added. Others will be ignored
# Sample has been provided below
# reason_filters = ["loli","csam","bigotry"]
reason_filters = []
# If you want to only censure instances which have been marked by more than 1 trusted instance, then increase the number below
min_censures = 1
2023-06-21 00:07:49 +00:00
2023-09-10 16:43:08 +00:00
password = os.getenv("LEMMY_PASSWORD", PASSWORD)
2023-06-21 00:07:49 +00:00
lemmy = Lemmy(f"https://{LEMMY_DOMAIN}")
2023-09-10 16:43:08 +00:00
if lemmy.log_in(USERNAME, password) is False:
2023-06-21 00:07:49 +00:00
raise Exception("Could not log in to lemmy")
fediseer = Fediseer()
2023-06-21 00:07:49 +00:00
print("Fetching suspicions")
sus = fediseer.suspicions.get(
activity_suspicion=ACTIVITY_SUSPICION,
active_suspicion=MONTHLY_ACTIVITY_SUSPICION,
format=FormatType.LIST
)
print("Fetching censures")
trusted_instances.append(LEMMY_DOMAIN)
censures = fediseer.censure.get_given(
domain_set = set(trusted_instances),
reasons = reason_filters,
min_censures = min_censures,
format = FormatType.LIST,
)
2023-09-10 16:43:08 +00:00
defed = (blacklist | set(censures["domains"]) | set(sus["domains"])) - whitelist
2023-06-25 22:53:55 +00:00
# I need to retrieve the site info because it seems if "RequireApplication" is set
# We need to always re-set the application_question.
2023-06-25 22:53:55 +00:00
# So we retrieve it from the existing site, to set the same value
site = lemmy.site.get()
application_question = None
if site["site_view"]["local_site"]["registration_mode"] == "RequireApplication":
application_question = site["site_view"]["local_site"]["application_question"]
2023-06-21 00:07:49 +00:00
print("Editing Defederation list")
2023-06-25 22:53:55 +00:00
if application_question:
ret = lemmy.site.edit(
blocked_instances=list(defed),
application_question=application_question,
)
else:
ret = lemmy.site.edit(
blocked_instances=list(defed),
)
print("Edit Successful")