redact-matrix/redact_all_messages.py
2024-07-02 03:17:26 -05:00

69 lines
1.9 KiB
Python

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