INFRA

Slackのgeneralチャンネルのメッセージを全削除するスクリプトを作ったけど削除できなかった

下記のようなコードを作って実行してみたけど、削除できなかった。理由は権限不足だった。 解決策をちょっと調べたけど分からなかったのであきらめた。

const {webClient, WebClient} = require('@slack/web-api');
require('dotenv').config();
const token = process.env.SLACK_TOKEN
const 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のドキュメントです。

chat.delete method | Slack

日本語訳すると、下記が書いてあった。

一般的なユーザートークンと共に使用すると、そのユーザーが投稿したメッセージのみが削除される場合があります。 管理ユーザーのユーザートークンと共に使用すると、ワークスペースに投稿されたほとんどのメッセージが削除される可能性があります。 ボットユーザーのトークンと共に使用すると、そのボットユーザーが投稿したメッセージのみが削除される場合があります。

最初はボットユーザ使ってたからダメだったのだと思って、管理ユーザでやってみたつもりだったのですが、今度はmissing scope的なメッセージ出てきたよく分からないからやめた。今度調べるかも。