こちらはフロムスクラッチ Advent Calendar 2017の7日目の記事です。
35歳になってエンジニアに挑戦中の元PMです。
自分もエンジニアになって見たいと思っている方は、こちらもどうぞ。
slackの投稿を一括削除したい!!
そんな時って、ないでしょうか(笑)
いや、普通ないと思うんですけど、間違えてbotが大量に吐いちゃったり、黒歴史的な会話をまとめて消して見たい時があったりと、ある時急に欲しくなるのが一括削除。
確かに、slackから直接削除することもできるのですが、大量にある場合には一つ一つ消すのはなかなか面倒臭い。
以前はslack上から選択して削除することもできたようですが、現在はAPIを使わないと一括削除はできないようです。
ということで、簡単ながらrails版のslackの一覧から選択削除するアプリを作って見ました。
投稿一覧を表示して選択削除
slack-ruby-client API
使ったAPIはslack-ruby-client。bundle installする。
gem 'slack-ruby-client'
初期化用の設定をする。
APIの取得方法等はこちらの、Railsでスタンプを勝手に押してくれるSlackのbotを作ってみたをご参考。
require 'slack'
Slack.configure do |config|
config.token = ENV['SLACK_API_TOKEN']
end
Slack::Web::Client.config do |config|
config.user_agent = 'Slack Ruby Client/1.0'
end
Slack::RealTime::Client.config do |config|
config.start_method = :rtm_start
end
環境変数を設定する
export SLACK_API_TOKEN='あなたのslack api token'
controllerとviewを作るために、generateする。
rails generate scaffold home
controllerを修正する。
今回は、#generalチャンネルの1週間分を引っ張ってきています。
期間やチャンネルを指定したい場合は、適宜変数にする等してください。
channels_historyでチャンネルの投稿の履歴を取得して、chat_deleteで消すだけです。
def index
@channel_history = web_client.channels_history(
channel: '#general',
oldest: (Time.now - (60 * 60 * 24 * 7)).to_i,
count: 1000
)
end
def delete_chats
params['history'].each do |ts|
web_client.chat_delete(
channel: '#general',
ts: ts
)
end
redirect_to action: 'index'
end
private
def web_client
@web_client ||= Slack::Web::Client.new
end
routesも修正
Rails.application.routes.draw do
resources :homes
post '/delete_chats', controller: 'homes', action: 'delete_chats'
end
viewの修正。tsはslackへの投稿時間をUNIXTIMEに変更したものとなります。
<table>
<thead>
<tr>
<th></th>
<th>ts</th>
<th>text</th>
<th>user</th>
</tr>
</thead>
<tbody>
<%= form_tag('/delete_chats', :method => :post) do %>
<%= submit_tag '選択削除' %>
<% @channel_history.messages.each do |history| %>
<tr>
<td><%= check_box 'history', history.ts, {}, true, false %></td>
<td><%= history.ts %></td>
<td><%= history.text %></td>
<td><%= history.user %></td>
</tr>
<% end %>
<% end %>
</tbody>
</table>
実際に動かしてみると・・・。
10個ぐらいなら手で消した方が早そうですが、100個のメッセージを消したりすることになる場合は、ぜひ使って見てください。
githubに置いておきます。