Slack清除通道中的所有消息(~8K)

Han*_*ann 74 slack-api slack

我们目前有一个Slack通道,大约8K消息都来自Jenkins集成.是否有任何编程方式删除该频道的所有邮件?Web界面一次只能删除100条消息.

Han*_*ann 66

我很快发现有人已经帮助过了:为此做了一个清洁工.

对我而言,它只是:

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

  • `--user"*"`也是必要的.此外,如果您想要实际执行删除任务,则应添加`--perform`. (6认同)
  • https://github.com/sgratzl/slack-cleaner fork更活跃,包括`--quiet`等功能,不显示stdout上删除的每条消息. (5认同)
  • 我在哪里可以找到我的令牌和频道? (3认同)

Sam*_*mir 19

default clean命令对我没有用,给出以下错误:

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

Running slack-cleaner v0.2.4
Channel, direct message or private group not found
Run Code Online (Sandbox Code Playgroud)

但是后续工作没有任何问题来清理机器人消息

slack-cleaner --token <TOKEN> --message --group <CHANNEL> --bot --perform --rate 1 
Run Code Online (Sandbox Code Playgroud)

要么

slack-cleaner --token <TOKEN> --message --group <CHANNEL> --user "*" --perform --rate 1 
Run Code Online (Sandbox Code Playgroud)

清除所有消息.

HTTP 429 Too Many Requests由于松弛的api速率限制,我使用1秒的速率限制来避免错误.在这两种情况下,通道名称都没有提供#符号


Fır*_*ÇÜK 17

我写了一个简单的节点脚本,用于删除来自公共/私人频道和聊天的消息.您可以修改并使用它.

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

首先,在脚本配置部分修改您的令牌,然后运行脚本:

node ./delete-slack-messages CHANNEL_ID
Run Code Online (Sandbox Code Playgroud)

您可以通过以下网址了解您的令牌:

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

此外,通道ID写在浏览器URL栏中.

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

  • 感谢那。我注意到的一件事是在删除了几条消息后它会变慢。 (2认同)
  • 通常,存在速率限制。这就是在一段时间后删除操作将停止或减慢的原因。 (2认同)
  • 奇迹般有效!谢谢你! (2认同)

Bra*_*gae 12

!! UPDATE!

正如@ n​​iels-van-reijmersdal在评论中提到的那样.

此功能已被删除.有关详细信息,请参阅此主题:twitter.com/slackhq/status/467182697979588608?lang=en

!!结束更新!!

这是SlackHQ在Twitter上的一个很好的答案,它没有任何第三方的东西. https://twitter.com/slackhq/status/467182697979588608?lang=en

您可以通过 特定频道的存档(http://my.slack.com/archives)页面批量删除:在菜单中查找"删除邮件"

  • 这对我来说似乎不起作用.它重定向到http:// <teamname> .slack.com/messages/<messageid>(似乎是我查看的最后一个频道) (5认同)
  • 此功能已被删除。有关更多信息,请参阅此线程:https://twitter.com/slackhq/status/467182697979588608?lang=en (2认同)

Hic*_*csy 9

对于其他不需要编程的人来说,这是一个快速的方法:

(可能仅限付费用户)

  1. 在Web或桌面应用程序中打开频道,然后单击齿轮(右上角).
  2. 选择"其他选项..."以显示存档菜单.笔记
  3. 选择"设置频道消息保留策略".
  4. 设置"保留特定天数的所有邮件".
  5. 超过此时间的所有邮件将被永久删除!

我通常将此选项设置为"1天"以使通道保留一些上下文,然后我返回上述设置,并将其保留策略设置回"默认"以继续从现在开始存储它们.

注意:
Luke指出:如果该选项被隐藏:您必须转到全局工作区管理员设置,消息保留和删除,并选中"让工作区成员覆盖这些设置"

  • 实际上它只是隐藏了.要使其显示,您必须转到全局工作区管理员设置,消息保留和删除,并选中"让工作区成员覆盖这些设置". (2认同)

Luk*_*uke 5

选项 1您可以设置 Slack 频道在 1 天后自动删除消息,但它有点隐藏。首先,您必须转到 Slack 工作区设置、消息保留和删除,然后选中“让工作区成员覆盖这些设置”。之后,在Slack客户端中您可以打开一个频道,单击齿轮,然后单击“编辑消息保留...”

选项2其他人提到的slack-cleaner命令行工具。

选项 3下面是我用来清除私人频道的一个小 Python 脚本。如果您想要对删除进行更多编程控制,这可能是一个很好的起点。不幸的是,Slack 没有批量删除 API,并且它们将单个删除的速率限制为每分钟 50 次,因此不可避免地需要很长时间。

# -*- 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.")
Run Code Online (Sandbox Code Playgroud)

请注意,该脚本需要修改才能列出并清除公共频道。这些 API 方法是通道。*而不是组。*