#!/usr/bin/env python3 import requests import sys from pprint import pformat from time import sleep, time # configure your session here homeserver = "matrix.domain.tld" access_token = "syt_M4dpAzM_iQdfTcDDoiGhlOTDnz1r_5HfPcV" room_id = sys.argv[1] sleep_for_seconds = 3 def get_all_encrypted_messages(homeserver, room_id, access_token): messages = [] next_batch = None while True: print("Reading messages...") # don't get throttled sleep(sleep_for_seconds) params = { "dir": "b", "limit": 50, "filter": '{"types": ["m.room.encrypted"]}' } if next_batch: params["from"] = next_batch url = f"https://{homeserver}/_matrix/client/v3/rooms/{room_id}/messages" headers = { "Authorization": f"Bearer {access_token}" } response = requests.get(url, params=params, headers=headers) response.raise_for_status() chunk = response.json()["chunk"] messages.extend(chunk) next_batch = response.json().get("end") if not next_batch: break return messages def redact_message(message): transaction_id = 'm' + str(time()).replace('.', '')[:14] + '.0' event_id = message['event_id'] h = homeserver r = room_id e = event_id t = transaction_id url = f"https://{h}/_matrix/client/r0/rooms/{r}/redact/{e}/{t}" headers = { "Authorization": f"Bearer {access_token}" } # don't get throttled sleep(sleep_for_seconds) response = requests.put(url, json={"reason":""}, headers=headers) print(pformat(response)) response.raise_for_status() all_messages = get_all_encrypted_messages(homeserver, room_id, access_token) message_count = 0 for message in all_messages: if message['content']: redact_message(message) message_count += 1 print("Redacted messages:", message_count)