#!/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")