Skip to content

Instantly share code, notes, and snippets.

@jshiell
Created January 27, 2022 10:20
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 jshiell/3dca78690d0d0f5ea6dc0a13df069e92 to your computer and use it in GitHub Desktop.
Save jshiell/3dca78690d0d0f5ea6dc0a13df069e92 to your computer and use it in GitHub Desktop.
Script to look up Slack user details by real name
#!/usr/bin/env ruby
# A script to find Slack user details by name
require 'uri'
require 'net/http'
require 'json'
class Auditor
def initialize(slack_token)
@slack_token = slack_token
@slack_api = Net::HTTP.new('api.slack.com', '443')
@slack_api.use_ssl = true
end
def audit(usernames)
members = []
for_each_member { |member| members << member }
usernames.each do |name|
name = name.strip
member = members.select { |member| member[:real_name] == name }.first
unless member.nil?
puts "#{name},#{member[:username]},#{member[:email]}"
else
puts "#{name},,"
end
end
end
private
def for_each_member(&block)
base_userlist_uri = "https://api.slack.com/api/users.list"
userlist_uri = URI("#{base_userlist_uri}?limit=200")
while !userlist_uri.nil?
response = @slack_api.get(userlist_uri.request_uri,
{ 'authorization' => "Bearer #{@slack_token}" }
)
case response.code
when '200'
result = JSON.parse(response.body)
result['members'].each do |member|
block.call({
username: member['name'],
real_name: member.dig('profile', 'real_name'),
email: member.dig('profile', 'email')
})
end
next_cursor = result.dig('response_metadata', 'next_cursor')
if next_cursor.nil? || next_cursor.strip.empty?
userlist_uri = nil
else
userlist_uri = URI("#{base_userlist_uri}?cursor=#{next_cursor}&limit=200")
end
else
$stderr.puts("Failed to query user list: #{response}")
end
end
end
end
def main
if ARGV.length < 1
$stderr.puts("Usage: #{$0} <slack-token> [file-of-names'")
exit(1)
end
slack_token = ARGV[0]
ARGV.shift
Auditor.new(slack_token).audit(ARGF)
end
main if __FILE__ == $0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment