Add Scripts/unblock-bluesky.py
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"""
|
||||
Entblocke alle blockierten Accounts
|
||||
|
||||
https://atproto.blue/guides/social-graph/#blocks
|
||||
https://bsky.network/docs/bluesky-api/following/#blocking
|
||||
"""
|
||||
|
||||
from atproto import Client,AtUri
|
||||
|
||||
BSKY_HANDLE = '<Bluesky-Handle>' # Beispiel "myhandly.bsky.social"
|
||||
BSKY_PASSWORD = '<App-Passwort>' # Beispiel "a1b2-c3d4-e5f6-g7"
|
||||
|
||||
client = Client()
|
||||
client.login(BSKY_HANDLE, BSKY_PASSWORD)
|
||||
|
||||
|
||||
def get_blocked_accounts():
|
||||
"""Liest alle von deinem Account blockierten Nutzer aus."""
|
||||
|
||||
# Erstelle leeres Array für geblockte Accounts
|
||||
blocked_records = []
|
||||
|
||||
# Erstelle leren Cursor für Paginierung
|
||||
cursor = None
|
||||
|
||||
# Pagination durchlaufen, falls viele Accounts blockiert sind
|
||||
while True:
|
||||
|
||||
# app.bsky.graph.get_blocks holt die Liste aller Blockierungen
|
||||
response = client.app.bsky.graph.get_blocks(params={"cursor": cursor})
|
||||
|
||||
# Wenn Rückgabe, schreibe in Array
|
||||
if response.blocks:
|
||||
blocked_records.extend(response.blocks)
|
||||
|
||||
# Beende Loop, wenn kein Cursor mehr zurückgegeben
|
||||
cursor = response.cursor
|
||||
if not cursor:
|
||||
break
|
||||
|
||||
# Gib' Array geblockter Accounts zurück
|
||||
return blocked_records
|
||||
|
||||
|
||||
def unblock_accounts(blocked_users: list):
|
||||
"""Sucht den Block-Record für jeden User und löscht ihn."""
|
||||
|
||||
# Wenn keine blockierten Accounts übergeben, breche ab
|
||||
if not blocked_users:
|
||||
print("Keine blockierten Accounts gefunden.")
|
||||
return
|
||||
|
||||
# Um die Record-URI zu finden, holen wir die genauen Daten der Blockierungen
|
||||
# viewer.blocking enthält die URI des Block-Eintrags
|
||||
for user in blocked_users:
|
||||
try:
|
||||
# Überprüfen, ob die Record-URI im User-Objekt vorhanden ist
|
||||
if hasattr(user, "viewer") and user.viewer.blocking:
|
||||
|
||||
# URI auslesen
|
||||
block_uri = user.viewer.blocking
|
||||
|
||||
# URI hat das Format: at://did:plc:xxx/app.bsky.graph.block/rkey
|
||||
# Wir löschen den Record direkt über die API
|
||||
rkey = AtUri.from_str(block_uri).rkey
|
||||
client.app.bsky.graph.block.delete(
|
||||
repo=client.me.did,
|
||||
rkey=rkey
|
||||
)
|
||||
print(f"Erfolgreich entblockt: @{user.handle}")
|
||||
else:
|
||||
print(f"Konnte Block-Record für @{user.handle} nicht finden.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Fehler beim Entblocken von @{user.handle}: {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Blockierte Accounts auslesen
|
||||
print("Hole blockierte Accounts...")
|
||||
blocked_list = get_blocked_accounts(client)
|
||||
print(f"Anzahl blockierter Accounts: {len(blocked_list)}")
|
||||
|
||||
# Durch die Ausgabeliste iterieren und entblocken
|
||||
unblock_accounts(client, blocked_list)
|
||||
|
||||
Reference in New Issue
Block a user