-
-
Save jackcarter/d86808449f0d95060a40 to your computer and use it in GitHub Desktop.
import requests | |
import time | |
import json | |
token = '' | |
#Delete files older than this: | |
ts_to = int(time.time()) - 30 * 24 * 60 * 60 | |
def list_files(): | |
params = { | |
'token': token | |
,'ts_to': ts_to | |
,'count': 1000 | |
} | |
uri = 'https://slack.com/api/files.list' | |
response = requests.get(uri, params=params) | |
return json.loads(response.text)['files'] | |
def delete_files(file_ids): | |
count = 0 | |
num_files = len(file_ids) | |
for file_id in file_ids: | |
count = count + 1 | |
params = { | |
'token': token | |
,'file': file_id | |
} | |
uri = 'https://slack.com/api/files.delete' | |
response = requests.get(uri, params=params) | |
print count, "of", num_files, "-", file_id, json.loads(response.text)['ok'] | |
files = list_files() | |
file_ids = [f['id'] for f in files] | |
delete_files(file_ids) |
api.slack.com is a maze. I've tried so many tokens. Where exactly do I get the proper token? Or this user
and token
combination?
I'm not a programmer/coder, but I love tinkering with code to get stuff done more efficiently. Apologies in advance if anything below is wrong/misleading. I hope it helps others running into this problem.
We have long ago reached and passed the storage limit of our free Slack plan (>22GB). Naturally, older files were "tombstoned" or archived automatically once our storage usage passed 5.0GB. I've been trying to figure how to delete the tombstoned files using this script or its variations above (thank you for all the work, by the way!) to no avail. It seems I missed a little section in the Slack API documentation:
In order to gather information on tombstoned files in Free workspaces, so that you can delete or revoke them, pass the show_files_hidden_by_limit parameter. While the yielded files will still be redacted, you'll gain the id of the files so that you can delete or revoke them.
In @jackcarter's original code at the top, which worked fine for me except for the "hidden" files, I added the missing parameter as below. (I also used a workspace owner legacy token.)
def list_files():
params = {
'token': token,
'ts_to': ts_to,
'count': 1000,
'show_files_hidden_by_limit': 1,
}
It seems to have worked. I've deleted thousands more files older than X days. Slack analytics also showed a significant decrease in storage usage. Unfortunately, and as confirmed with Slack Support, (with a Free plan) we are unable to see or delete files shared by users in private channels or direct messages, even through the API.
Anyway, hope this still helps someone.
As of today, legacy tester tokens may no longer be created.
However, you can still use this script following this steps:
-
Create a Slack app on https://api.slack.com/apps?new_app=1 and assign that to your workspace.
-
Then within this new app, go to OAuth & Permissions and in the section Scopes > User Token Scopes add the
files:read
andfiles:write
Oauth scopes. -
Finally, you can now go to the top of the page and install the app to the workspace. After that you'll get the User OAuth Token that you can use on the script.
* Bare in mind that if you forget to add the scopes, or you need to modify them after you install the app to the workspace, you would need to reinstall it after changing the scopes.
I have also adapted the code to work with the Oauth authentication.
https://gist.github.com/IlanVivanco/d2a96abb364ccb3b59e198f1c5fdf673
@IlanVivanco good job! saved my time.
None of the scripts listed here works anymore for me. Something changed @slack?
I update this script because I want to delete file by id, this will handle case
can't not delete
because the file is not belong to another user and workaround ratelimit of Slack's API. With some default value ascount=1000
. You have to get a list of id, token, username to fill in theusers
list. Run with commandpython slack_delete.py --days 30
. Notepython 2.7