import datetime class InactiveUserManager: def __init__(self, mastodon_client, grace_period_days: int): self.mastodon_client = mastodon_client self.grace_period_days = grace_period_days self.my_id = None self.following = [] self.unfollowed_users = [] def fetch_account_id(self): account = self.mastodon_client.me() self.my_id = account['id'] def fetch_following_accounts(self): print("Lade alle Accounts, denen Du folgst...\n") accounts = self.mastodon_client.account_following(self.my_id) self.following.extend(accounts) while accounts: accounts = self.mastodon_client.fetch_next(accounts) if accounts: self.following.extend(accounts) print(f"Du folgst insgesamt {len(self.following)} Accounts.\n") def unfollow_inactive_users(self): now = datetime.datetime.now(datetime.timezone.utc) threshold_date = now - datetime.timedelta(days=self.grace_period_days) for account in self.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 = self.mastodon_client.account_statuses(account_id, limit=1) if statuses: last_activity = statuses[0]['created_at'] except Exception as e: print(f"Fehler beim Abruf der Status für {full_acct}: {e}") continue 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: self.mastodon_client.account_unfollow(account_id) self.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}") def run(self): self.fetch_account_id() self.fetch_following_accounts() self.unfollow_inactive_users() if self.unfollowed_users: print("\nZusammenfassung der entfolgten Accounts:") for acct, last in self.unfollowed_users: print(f"- {acct}: Letzte Aktivität am {last.date()}") else: print("Es wurden keine Accounts gefunden, die seit mehr als " f"{self.grace_period_days} Tagen inaktiv sind.")