退職のタイミングでtimes_xxxを消したくなりまして表題のスクリプトを作成しましたので共有致します。
なおコードはrubyで記述致しました。
faradayが入っていれば動く想定です。
動けばいいレベルでのコードになりますので参考程度で利用ください。
使い方
- gem install faraday
- CHANNEL_IDとSLACK_API_TOKENに値を設定する
取得・設定方法については下記に記載。
- 実行コマンド:
ruby remove_messages_in_chanel.rb
CHANNEL_IDの取得方法
- チャネルを右クリック -> コピー -> リンクをコピーから取得できます。
- https://xxx.slack.com/archives/xxx のxxx箇所
Slack Appの登録
- Slack App で任意の名前のAppを作る
この時点でtokenは発行される
- Permissions -> User Token Scopeで channels:history / channels:read / chat:write を追加
- Install App を押す
参考にしたページ
https://api.slack.com/methods
注意
本スクリプトは100件しか処理できないようにしているので何度か繰り返し実行する
コード
require "faraday"
CHANNEL_ID = "" # TODO: 値を入れる
SLACK_API_TOKEN = "" # TODO: 値を入れる
LIMIT = 100
# メインプログラム
def run
json = get_messages
json[:messages].each.with_index(1) do |message, i|
puts "message: #{message[:text]}"
puts "ts: #{message[:ts]}"
get_replies(message[:ts])
if message[:text] == "This message was deleted."
"すでに削除済"
next
else
delete_message(message[:ts])
end
end
end
# 指定したチャネルのメッセージを取得
def get_messages
req = Faraday.new(
url: 'https://slack.com/api/conversations.history',
headers: { 'Authorization' => "Bearer "+SLACK_API_TOKEN },
params: { 'channel' => CHANNEL_ID, 'limit' => LIMIT, 'include_all_metadata' => true }
)
res = req.get
json = JSON.parse(res.body, symbolize_names: true)
end
# メッセージを削除する
def delete_message(ts)
req = Faraday.new(
url: 'https://slack.com/api/chat.delete',
headers: { 'Authorization' => "Bearer "+SLACK_API_TOKEN },
params: { 'channel' => CHANNEL_ID, 'ts' => ts }
)
res = req.post
if res.status == 200
puts "削除 OK"
else
puts "削除 NG"
end
end
# スレッド内のメッセージを削除する
def get_replies(ts)
req = Faraday.new(
url: 'https://slack.com/api/conversations.replies',
headers: { 'Authorization' => "Bearer "+SLACK_API_TOKEN },
params: { 'channel' => CHANNEL_ID, 'ts' => ts }
)
res = req.get
json = JSON.parse(res.body, symbolize_names: true)
json[:messages].each.with_index(1) do |message, i|
puts "message: #{message[:text]}"
puts "ts: #{message[:ts]}"
delete_message(message[:ts])
end
end
# 実行
run
以上になります。