Mastodon_DeleteInactiveUser/DeleteInactiveUser.py
2025-02-08 03:35:18 +01:00

85 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
import json
from mastodon import Mastodon
import datetime
import sys
CONFIG_FILE = "config.json"
try:
with open(CONFIG_FILE, "r") as f:
config = json.load(f)
API_BASE_URL = config["server_url"]
ACCESS_TOKEN = config["access_token"]
except Exception as e:
sys.exit(f"Fehler beim Laden der Konfigurationsdatei {CONFIG_FILE}: {e}")
try:
mastodon = Mastodon(
access_token=ACCESS_TOKEN,
api_base_url=API_BASE_URL
)
my_account = mastodon.me()
except Exception as e:
sys.exit(f"Fehler beim Verbinden mit der Instanz: {e}")
my_id = my_account['id']
print("Lade alle Accounts, denen Du folgst...\n")
following = []
accounts = mastodon.account_following(my_id)
following.extend(accounts)
while accounts:
accounts = mastodon.fetch_next(accounts)
if accounts:
following.extend(accounts)
print(f"Du folgst insgesamt {len(following)} Accounts.\n")
now = datetime.datetime.now(datetime.timezone.utc)
threshold_date = now - datetime.timedelta(days=180)
unfollowed_users = []
for account in following:
account_id = account['id']
full_acct = account.get('acct', account.get('username', 'Unbekannt'))
last_activity = None
if account.get('statuses_count', 0) > 0:
try:
statuses = mastodon.account_statuses(account_id, limit=1)
except Exception as e:
print(f"Fehler beim Abruf der Status für {full_acct}: {e}")
continue
if statuses:
last_activity = statuses[0]['created_at']
if last_activity is None:
last_activity = account.get('created_at', None)
if last_activity is None:
print(f"Keine Aktivitätsdaten für {full_acct}. Überspringe diesen Account.")
continue
if last_activity < threshold_date:
try:
mastodon.account_unfollow(account_id)
unfollowed_users.append((full_acct, last_activity))
print(f"Entfolgt: {full_acct} Letzte Aktivität: {last_activity.date()}")
except Exception as e:
print(f"Fehler beim Entfolgen von {full_acct}: {e}")
if unfollowed_users:
print("\nZusammenfassung der entfolgten Accounts:")
for acct, last in unfollowed_users:
print(f"- {acct}: Letzte Aktivität am {last.date()}")
else:
print("Es wurden keine Accounts gefunden, die seit mehr als 6 Monaten inaktiv sind.")
print("\nUnd wie der legendäre Giovanni Trapatoni einst sagte: 'Ich habe fertig!'\n")