Option 1 Sie können einen Slack-Kanal so einstellen, dass Nachrichten nach 1 Tag automatisch gelöscht werden. Dieser Kanal ist jedoch etwas ausgeblendet. Zunächst müssen Sie zu Ihren Einstellungen für den Slack-Arbeitsbereich, zum Speichern und Löschen von Nachrichten gehen und das Kontrollkästchen "Arbeitsbereichsmitglieder diese Einstellungen überschreiben lassen" aktivieren. Danach können Sie im Slack-Client einen Kanal öffnen, auf das Zahnrad klicken und auf "Nachrichtenaufbewahrung bearbeiten ..." klicken.
Option 2 Das von anderen erwähnte Slack-Cleaner-Befehlszeilentool.
Option 3 Unten finden Sie ein kleines Python-Skript, mit dem ich private Kanäle lösche. Kann ein guter Ausgangspunkt sein, wenn Sie eine programmgesteuerte Steuerung des Löschvorgangs wünschen. Leider hat Slack keine Bulk-Lösch-API und sie begrenzen die Rate der einzelnen Löschvorgänge auf 50 pro Minute, sodass dies unvermeidlich lange dauert.
# -*- coding: utf-8 -*-
"""
Requirement: pip install slackclient
"""
import multiprocessing.dummy, ctypes, time, traceback, datetime
from slackclient import SlackClient
legacy_token = raw_input("Enter token of an admin user. Get it from https://api.slack.com/custom-integrations/legacy-tokens >> ")
slack_client = SlackClient(legacy_token)
name_to_id = dict()
res = slack_client.api_call(
"groups.list", # groups are private channels, conversations are public channels. Different API.
exclude_members=True,
)
print ("Private channels:")
for c in res['groups']:
print(c['name'])
name_to_id[c['name']] = c['id']
channel = raw_input("Enter channel name to clear >> ").strip("#")
channel_id = name_to_id[channel]
pool=multiprocessing.dummy.Pool(4) #slack rate-limits the API, so not much benefit to more threads.
count = multiprocessing.dummy.Value(ctypes.c_int,0)
def _delete_message(message):
try:
success = False
while not success:
res= slack_client.api_call(
"chat.delete",
channel=channel_id,
ts=message['ts']
)
success = res['ok']
if not success:
if res.get('error')=='ratelimited':
# print res
time.sleep(float(res['headers']['Retry-After']))
else:
raise Exception("got error: %s"%(str(res.get('error'))))
count.value += 1
if count.value % 50==0:
print(count.value)
except:
traceback.print_exc()
retries = 3
hours_in_past = int(raw_input("How many hours in the past should messages be kept? Enter 0 to delete them all. >> "))
latest_timestamp = ((datetime.datetime.utcnow()-datetime.timedelta(hours=hours_in_past)) - datetime.datetime(1970,1,1)).total_seconds()
print("deleting messages...")
while retries > 0:
#see https://api.slack.com/methods/conversations.history
res = slack_client.api_call(
"groups.history",
channel=channel_id,
count=1000,
latest=latest_timestamp,)#important to do paging. Otherwise Slack returns a lot of already-deleted messages.
if res['messages']:
latest_timestamp = min(float(m['ts']) for m in res['messages'])
print datetime.datetime.utcfromtimestamp(float(latest_timestamp)).strftime("%r %d-%b-%Y")
pool.map(_delete_message, res['messages'])
if not res["has_more"]: #Slack API seems to lie about this sometimes
print ("No data. Sleeping...")
time.sleep(1.0)
retries -= 1
else:
retries=10
print("Done.")
Beachten Sie, dass das Skript geändert werden muss, um öffentliche Kanäle aufzulisten und zu löschen. Die API-Methoden für diese sind Kanäle. * Anstelle von Gruppen. *