Slack clean all messages (~8K) in a channel

后端 未结 11 662
暖寄归人
暖寄归人 2021-01-30 06:00

We currently have a Slack channel with ~8K messages all comes from Jenkins integration. Is there any programmatic way to delete all messages from that channel? The web interface

11条回答
  •  独厮守ぢ
    2021-01-30 06:42

    If you like Python and have obtained a legacy API token from the slack api, you can delete all private messages you sent to a user with the following:

    import requests
    import sys
    import time
    from json import loads
    
    # config - replace the bit between quotes with your "token"
    token = 'xoxp-854385385283-5438342854238520-513620305190-505dbc3e1c83b6729e198b52f128ad69'
    
    # replace 'Carl' with name of the person you were messaging
    dm_name = 'Carl'
    
    # helper methods
    api = 'https://slack.com/api/'
    suffix = 'token={0}&pretty=1'.format(token)
    
    def fetch(route, args=''):
      '''Make a GET request for data at `url` and return formatted JSON'''
      url = api + route + '?' + suffix + '&' + args
      return loads(requests.get(url).text)
    
    # find the user whose dm messages should be removed
    target_user = [i for i in fetch('users.list')['members'] if dm_name in i['real_name']]
    if not target_user:
      print(' ! your target user could not be found')
      sys.exit()
    
    # find the channel with messages to the target user
    channel = [i for i in fetch('im.list')['ims'] if i['user'] == target_user[0]['id']]
    if not channel:
      print(' ! your target channel could not be found')
      sys.exit()
    
    # fetch and delete all messages
    print(' * querying for channel', channel[0]['id'], 'with target user', target_user[0]['id'])
    args = 'channel=' + channel[0]['id'] + '&limit=100'
    result = fetch('conversations.history', args=args)
    messages = result['messages']
    print(' * has more:', result['has_more'], result.get('response_metadata', {}).get('next_cursor', ''))
    while result['has_more']:
      cursor = result['response_metadata']['next_cursor']
      result = fetch('conversations.history', args=args + '&cursor=' + cursor)
      messages += result['messages']
      print(' * next page has more:', result['has_more'])
    
    for idx, i in enumerate(messages):
      # tier 3 method rate limit: https://api.slack.com/methods/chat.delete
      # all rate limits: https://api.slack.com/docs/rate-limits#tiers
      time.sleep(1.05)
      result = fetch('chat.delete', args='channel={0}&ts={1}'.format(channel[0]['id'], i['ts']))
      print(' * deleted', idx+1, 'of', len(messages), 'messages', i['text'])
      if result.get('error', '') == 'ratelimited':
        print('\n ! sorry there have been too many requests. Please wait a little bit and try again.')
        sys.exit()
    

提交回复
热议问题