Slackで発言していない人をチャンネルからkickするスクリプトを雑に書いたので置いておく。
動作としては
- 対象のチャンネルのメンバを取得
- 発言者のリストを取得(今回はBigQueryからUser IDを抽出してきたファイルを利用[下記参照])
- 1と2の差分から未発言のユーザリストを作成
- 3で作成したユーザリストのメンバを対象チャンネルからkick
require 'json' require 'slack-ruby-client' Slack::Web::Client.configure do |config| config.token = ENV['SLACK_API_TOKEN'] raise 'Missing ENV[SLACK_API_TOKEN]!' unless config.token STDOUT.sync = true config.logger = Logger.new(STDOUT) config.logger.level = Logger::INFO end CHANNEL_ID = '' # TARGET_CHANNEL_ID FILE_NAME = '' # DATA_FILE_PATH client = Slack::Web::Client.new res = client.channels_info(channel: CHANNEL_ID) channel_members = res['channel']['members'] post_members = open(FILE_NAME) do |data| members = JSON.load(data) members.map{|member| member['user']} end kick_members = channel_members - post_members kick_members.each do |member| user = client.users_info(user: member) client.channels_kick(channel: CHANNEL_ID, user: member) end
[ { "user": "U0331B9R5", }, { "user": "UEFRP7DU5", }, ... { "user": "U0DDUMYM7", }, { "user": "U3YJ3FWC9", } ]
本当は発言している人のリストをBigQueryから直接とってこればよかったのだが、 今回は雑にファイルに落とし込んだものを利用してみた。
※発言者のリストを作るための処理はこっちを参照。 mahito.hatenablog.com
無事にチャンネルのお掃除ができたのでよし!