Slackのgeneralチャンネルのメッセージを全削除するスクリプトを作ったけど削除できなかった
下記のようなコードを作って実行してみたけど、削除できなかった。理由は権限不足だった。 解決策をちょっと調べたけど分からなかったのであきらめた。
const {webClient, WebClient} = require('@slack/web-api');require('dotenv').config();
const token = process.env.SLACK_TOKENconst web = new WebClient(token);const channelName = 'general';const timeInterval = 1000;
const main = async () => { const channelId = await getChannelId(); deleteMessages(channelId);}
const getChannelId = async () => { const result = await web.conversations.list(); const channel = result.channels.find(channel => channel.name === channelName); return channel.id;}
const getMessages = async channelId => { const result = await web.conversations.history({channel: channelId}); return result.messages;}
const deleteMessages = async (channelId) => { const messages = await getMessages(channelId); console.log('messages length:', messages.length); if (messages.length <= 0) return; await _delete(channelId, messages); setTimeout(function(){deleteMessages(channelId)}, timeInterval);}
const _delete = async (channelId, messages) => { const message = messages.pop(); if (!message) return false; await web.chat.delete({channel: channelId, ts: message.ts}); setTimeout(function(){_delete(channelId, messages)}, timeInterval);}
main();下記は、Slack APIのchat.deleteのドキュメントです。
日本語訳すると、下記が書いてあった。
一般的なユーザートークンと共に使用すると、そのユーザーが投稿したメッセージのみが削除される場合があります。 管理ユーザーのユーザートークンと共に使用すると、ワークスペースに投稿されたほとんどのメッセージが削除される可能性があります。 ボットユーザーのトークンと共に使用すると、そのボットユーザーが投稿したメッセージのみが削除される場合があります。
最初はボットユーザ使ってたからダメだったのだと思って、管理ユーザでやってみたつもりだったのですが、今度はmissing scope的なメッセージ出てきたよく分からないからやめた。今度調べるかも。