-
-
Save la32094uf/e2c29715b8e6699f28a6752b120630a0 to your computer and use it in GitHub Desktop.
Delete Slack files via API. Usage: python slack_delete.py --token <apiToken> [-d <olderThanDays>] [-c <maxCount>] [s <minSizeInBytes>]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
import requests | |
import time | |
import json | |
def main(): | |
""" | |
Entry point of the application | |
:return: void | |
""" | |
parser = argparse.ArgumentParser() | |
parser.add_argument("-t", "--token", required=True, help="Specifies the OAuth token used for authentication, created at (https://api.slack.com/docs/oauth-test-tokens)") | |
parser.add_argument("-d", "--days", type=int, default=None, help="Delete files older than x days (optional)") | |
parser.add_argument("-c", "--count", type=int, default=1000, help="Max amount of files to delete at once (optional)") | |
parser.add_argument("-s", "--size", type=int, default=1, help="Min size of files to delete (default is 1 byte)") | |
options = parser.parse_args() | |
try: | |
print "[*] Fetching file list.." | |
file_ids = list_file_ids(token=options.token, count=options.count, days=options.days, size=options.size) | |
print "[*] Deleting files.." | |
delete_files(token=options.token, file_ids=file_ids) | |
print "[*] Done" | |
except KeyboardInterrupt: | |
print "\b\b[-] Aborted" | |
exit(1) | |
def calculate_days(days): | |
""" | |
Calculate days to unix time | |
:param days: int | |
:return: int | |
""" | |
return int(time.time()) - days * 24 * 60 * 60 | |
def list_file_ids(token, count, days=None, size=1): | |
""" | |
Get a list of all file id's | |
:param token: string | |
:param count: int | |
:param days: int | |
:param size: int | |
:return: list | |
""" | |
if days: | |
params = {'token': token, 'count': count, 'ts_to': calculate_days(days)} | |
else: | |
params = {'token': token, 'count': count} | |
uri = 'https://slack.com/api/files.list' | |
response = requests.get(uri, params=params) | |
files = json.loads(response.text)['files'] | |
return [f['id'] for f in files if f['size']>size] | |
def delete_files(token, file_ids): | |
""" | |
Delete a list of files by id | |
:param token: string | |
:param file_ids: list | |
:return: void | |
""" | |
count = 0 | |
num_files = len(file_ids) | |
for file_id in file_ids: | |
count += 1 | |
params = {'token': token, 'file': file_id} | |
uri = 'https://slack.com/api/files.delete' | |
response = json.loads(requests.get(uri, params=params).text) | |
if response["ok"]: | |
print "[+] Deleted", count, "of", num_files, "-", file_id | |
else: | |
print "[!] Unable to delete", count, "of", num_files, "-", file_id + ", reason:", response["error"] | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment