|
#!/usr/bin/env python3 |
|
|
|
import json |
|
import sys |
|
import subprocess |
|
import time |
|
from time import sleep |
|
|
|
def list_conversations(): |
|
list_json = json.dumps({"method": "list"}) |
|
output = subprocess.check_output(["keybase", "chat", "api", "-m", list_json]) |
|
return json.loads(output)["result"]["conversations"] |
|
|
|
def delete_message(channel_name, message_id): |
|
delete_json = json.dumps( |
|
{"method": "delete", |
|
"params": { |
|
"options": { |
|
"channel": {"name": channel_name}, |
|
"message_id": message_id}}}) |
|
|
|
output = subprocess.check_output(["keybase", "chat", "api", "-m", delete_json]) |
|
return json.loads(output) |
|
|
|
def list_messages(conversation_name): |
|
messages_json = json.dumps( |
|
{"method": "read", |
|
"params": { |
|
"options": { |
|
"channel": {"name": conversation_name}}}}) |
|
output = subprocess.check_output(["keybase", "chat", "api", "-m", messages_json]) |
|
return json.loads(output)["result"]["messages"] |
|
|
|
def delete_all_my_messages(username): |
|
for c in list_conversations(): |
|
try: |
|
name = c["channel"]["name"] |
|
print("Processing channel {}".format(name)) |
|
|
|
for m in list_messages(name): |
|
message_id = m["msg"]["id"] |
|
channel_name = m["msg"]["channel"]["name"] |
|
sender_username = m["msg"]["sender"]["username"] |
|
content_type = m["msg"]["content"]["type"] |
|
|
|
# Skip messages if they were not sent by me or are already deleted |
|
if (sender_username != username) or (content_type == "delete"): |
|
print("Skipping message '{}' from channel '{}' sent by '{}' with contenct_type '{}'.".format(message_id, channel_name, sender_username, content_type)) |
|
continue |
|
|
|
print("Deleting message '{}' from channel '{}' sent by '{}' with contenct_type '{}'.".format(message_id, channel_name, sender_username, content_type)) |
|
res = delete_message(channel_name, message_id) |
|
result_message = res["result"]["message"] |
|
print("Result for '{}' '{}': '{}'.".format(message_id, channel_name, result_message)) |
|
except Exception as e: |
|
print("Error: {}".format(e)) |
|
continue |
|
|
|
def run(): |
|
if (len(sys.argv) < 2): |
|
print("Usage {} USERNAME".format(sys.argv[0])) |
|
sys.exit(1) |
|
username = sys.argv[1] |
|
delete_all_my_messages(username) |
|
|
|
run() |