概要
タイトル通りですが,Slackの特定のチャンネルの投稿を一括で削除するためのPythonスクリプトです.
もう少し工夫して,特定の条件で削除の条件を絞り込んだりbotにしたりが考えられますがとりあえず,基本的な部分だけをまとめます.
準備
Slack APIを使うためのTOKEN発行
Slackに関する記事は多いですが,最近若干仕様が変わっているっぽいです(?).
Slack Web APIこちらからアプリの作成を行なって下さい





今回の場合はこの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]

この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()
そのほか
というか,全ていらないならチャンネルごと削除しちゃうのが早いですが,何かまとめて削除したい場合の参考になれば.