Skip to content

Instantly share code, notes, and snippets.

@fancyremarker
Created September 21, 2017 00:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fancyremarker/b0dae1f12f740e9d55ebd8d21aeaf0c9 to your computer and use it in GitHub Desktop.
Save fancyremarker/b0dae1f12f740e9d55ebd8d21aeaf0c9 to your computer and use it in GitHub Desktop.
Clean up deactivated Slack users from shared channels
require 'json'
BASE_URL = 'https://slack.com/api'
TOKEN = ENV['SLACK_TOKEN']
BACKOFF = 0.2
channels_url = "#{BASE_URL}/conversations.list?token=#{TOKEN}"
channels = JSON.parse(`curl -s '#{channels_url}'`)['channels']
sleep BACKOFF
users_url = "#{BASE_URL}/users.list?token=#{TOKEN}"
users = JSON.parse(`curl -s '#{users_url}'`)['members']
deleted_users = Hash[
users.select { |u| u['deleted'] }.map { |u| [u['id'], u['name']] }
]
shared_channels = channels.select { |c| c['is_shared'] }
shared_channels.each do |channel|
puts "Reviewing memberships in ##{channel['name']}..."
members_url = "#{BASE_URL}/conversations.members" \
"?token=#{TOKEN}&channel=#{channel['id']}"
member_ids = JSON.parse(`curl -s '#{members_url}'`)['members']
sleep BACKOFF
member_ids.each do |member_id|
next unless deleted_users.keys.include?(member_id)
puts " Kicking @#{deleted_users[member_id]} from ##{channel['name']}"
kick_url = "#{BASE_URL}/conversations.kick?token=#{TOKEN}" \
"&channel=#{channel['id']}&user=#{member_id}"
status = JSON.parse(`curl -s '#{kick_url}'`)
fail "Error: #{status}" unless status['ok']
sleep BACKOFF
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment