it-swarm.dev

Kendurkan semua pesan (~ 8K) di saluran

Saat ini kami memiliki saluran Slack dengan ~ 8K pesan semua berasal dari integrasi Jenkins. Apakah ada cara terprogram untuk menghapus semua pesan dari saluran itu? Antarmuka web hanya dapat menghapus 100 pesan sekaligus.

62
Hann

Saya segera menemukan ada seseorang yang telah membuat pembantu: slack-cleaner untuk ini.

Dan bagi saya itu hanya: 

slack-cleaner --token=<TOKEN> --message --channel jenkins --user "*" --perform

56
Hann

perintah clean default tidak berfungsi untuk saya memberikan kesalahan berikut:

$ slack-cleaner --token=<TOKEN> --message --channel <CHANNEL>

Running slack-cleaner v0.2.4
Channel, direct message or private group not found

tetapi mengikuti berhasil tanpa masalah untuk membersihkan pesan bot

slack-cleaner --token <TOKEN> --message --group <CHANNEL> --bot --perform --rate 1 

atau

slack-cleaner --token <TOKEN> --message --group <CHANNEL> --user "*" --perform --rate 1 

untuk membersihkan semua pesan.

Saya menggunakan rate-limit 1 detik untuk menghindari kesalahan HTTP 429 Too Many Requests karena slack api limit. Dalam kedua kasus, nama saluran diberikan tanpa tanda #

15
Samir

Saya menulis skrip simpul sederhana untuk menghapus pesan dari saluran publik/pribadi dan obrolan. Anda dapat memodifikasi dan menggunakannya.

https://Gist.github.com/firatkucuk/ee898bc919021da621689f5e47e7abac

Pertama, ubah token Anda di bagian konfigurasi skrip kemudian jalankan skrip:

node ./delete-slack-messages CHANNEL_ID

Anda dapat mempelajari token Anda dari URL berikut:

https://api.slack.com/custom-integrations/legacy-tokens

ID saluran juga ditulis di bilah URL peramban.

https://mycompany.slack.com/messages/MY_CHANNEL_ID/

14
Fırat KÜÇÜK

!! PEMBARUAN !!

sebagai @ niels-van-reijmersdal beraksi dalam komentar.

Fitur ini telah dihapus. Lihat utas ini untuk info lebih lanjut: Twitter.com/slackhq/status/467182697979588608?lang=en

!! AKHIR PEMBARUAN !!

Inilah jawaban yang bagus dari SlackHQ di Twitter, dan itu berfungsi tanpa hal-hal pihak ketiga . https://Twitter.com/slackhq/status/467182697979588608?lang=en

Anda dapat menghapus secara massal melalui arsip ( http://my.slack.com/archives ) halaman untuk saluran tertentu: cari "hapus pesan" di menu

12
Braggae

Untuk siapa pun yang tidak perlu melakukannya secara terprogram, Berikut adalah cara cepat :

(mungkin hanya untuk pengguna berbayar)

  1. Buka saluran di web atau aplikasi desktop, dan klik roda gigi (kanan atas).
  2. Pilih "Opsi tambahan ..." untuk membuka menu arsip.catatan
  3. Pilih "Tetapkan kebijakan penyimpanan pesan saluran".
  4. Setel "Simpan semua pesan untuk jumlah hari tertentu".
  5. Semua pesan yang lebih lama dari waktu ini dihapus secara permanen!

Saya biasanya mengatur opsi ini ke "1 hari" untuk meninggalkan saluran dengan beberapa konteks, kemudian saya kembali ke pengaturan di atas, dan mengatur kebijakan retensi itu kembali ke "default" untuk terus menyimpannya mulai sekarang. .

Catatan:
Luke menunjukkan: Jika opsi disembunyikan: Anda harus pergi ke pengaturan Admin ruang kerja global, Retensi Pesan & Penghapusan, dan centang "Biarkan anggota ruang kerja menimpa pengaturan ini"

8
Hicsy

Opsi 1 Anda dapat mengatur saluran Slack untuk secara otomatis menghapus pesan setelah 1 hari, tetapi agak tersembunyi. Pertama, Anda harus pergi ke Pengaturan Ruang Kerja Slack, Retensi Pesan & Penghapusan, dan centang "Biarkan anggota ruang kerja menimpa pengaturan ini". Setelah itu, di klien Slack Anda dapat membuka saluran, klik gir, dan klik "Edit retensi pesan ..."

Opsi 2 Alat baris perintah slack-cleaner yang orang lain sebutkan.

Opsi 3 Di bawah ini adalah skrip Python kecil yang saya gunakan untuk menghapus saluran pribadi. Bisa menjadi titik awal yang baik jika Anda ingin lebih banyak kontrol penghapusan terprogram. Sayangnya Slack tidak memiliki API penghapusan massal, dan mereka menilai batas penghapusan individual hingga 50 per menit, sehingga hal itu membutuhkan waktu lama.

# -*- 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.")

Perhatikan, skrip itu perlu modifikasi untuk daftar & membersihkan saluran publik. Metode API untuk itu adalah saluran. * Bukan grup. *

4
Luke

Kiat: jika Anda akan menggunakan pembersih slack https://github.com/kfei/slack-cleaner

Anda perlu membuat token: https://api.slack.com/custom-integrations/legacy-tokens

1
Helder Robalo

Berikut ini adalah ekstensi chrome yang bagus untuk menghapus secara massal saluran slack/grup/pesan im Anda - https://slackext.com/deleter , tempat Anda dapat memfilter pesan berdasarkan bintang, rentang waktu, atau pengguna . BTW, ini juga mendukung memuat semua pesan dalam versi terbaru, maka Anda dapat memuat ~ 8k pesan yang Anda butuhkan.

0
Huan

Jika Anda suka Python dan telah memperoleh legacy API token dari slack api, Anda dapat menghapus semua pesan pribadi yang Anda kirim ke pengguna dengan yang berikut:

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()
0
duhaime