72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
import requests
|
|
import sys
|
|
from pprint import pformat
|
|
from time import sleep
|
|
|
|
|
|
# configure your session here
|
|
homeserver = "matrix.thisisjoes.site"
|
|
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...")
|
|
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 = 0
|
|
try:
|
|
transaction_id = message['unsigned']['transaction_id'] + '1'
|
|
except:
|
|
pass
|
|
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 throtled
|
|
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']:
|
|
message_count += 1
|
|
print("Redacted messages:", message_count)
|
|
redact_message(message)
|