86 lines
2.5 KiB
Python
86 lines
2.5 KiB
Python
|
#!/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")
|