Python3
Slack

Slackで特定チャンネルの投稿を一括で削除する

概要

タイトル通りですが,Slackの特定のチャンネルの投稿を一括で削除するためのPythonスクリプトです.
もう少し工夫して,特定の条件で削除の条件を絞り込んだりbotにしたりが考えられますがとりあえず,基本的な部分だけをまとめます.

準備

 Slack APIを使うためのTOKEN発行

Slackに関する記事は多いですが,最近若干仕様が変わっているっぽいです(?).

Slack Web APIこちらからアプリの作成を行なって下さい

0.png

1.png

3.png

4.png

5.png

今回の場合はこの3つの権限を与える必要があると思う

CHANNELS

  • Access user’s public channels[channels:history]
  • Access information about user’s public channels[channels:read]

CHAT

  • Send messages as user[chat:write:user]

Slack_API__Applications___mdg_Slack.png

このxoxp-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX

みたいな部分がアクセストークンになります.

 環境

  • Python 3.6.3

コード

# encoding: utf-8

import requests
import json
from time import sleep

SLACK_ACCESS_TOKEN = "xoxp-ほげ-ほげ-ほげ-ほげ"

def main():
    res = requests.get('https://slack.com/api/channels.list?token=' + SLACK_ACCESS_TOKEN)
    channelsList = json.loads(res.text)
    channels = channelsList['channels']
    delete_channel_id = 0

    for c in channels:
        if c['name'] == '消したいチャンネル名':
            delete_channel_id = c['id']

    while True:
        res = requests.get('https://slack.com/api/channels.history?token=' + SLACK_ACCESS_TOKEN + '&channel=' + str(delete_channel_id) + '&count=' + '1000')
        channelMessages = json.loads(res.text)
        message_list = []
        for m in channelMessages['messages']:
            requests.post('https://slack.com/api/chat.delete?token=' + SLACK_ACCESS_TOKEN + '&channel=' + str(delete_channel_id) + '&ts=' + m['ts'])
            sleep(1)

if __name__ == "__main__":
    main()

そのほか

というか,全ていらないならチャンネルごと削除しちゃうのが早いですが,何かまとめて削除したい場合の参考になれば.