LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-20

概要

タイトル通りですが,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()

そのほか

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1