From 7c83b4f6f996778f42ad9cf214df9ed3b46420a5 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Wed, 11 Mar 2020 14:59:31 -0700 Subject: [PATCH 01/41] set up connection to API --- lib/slack.rb | 13 ++++++++++++- test/test_helper.rb | 4 +++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 8a0b659b..83c0822d 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,10 +1,21 @@ #!/usr/bin/env ruby +require 'dotenv' +require 'httparty' +require_relative 'workspace' + +Dotenv.load +BASE_URL = "https://slack.com/api/conversations.list" +SLACK_TOKEN = ENV["SLACK_TOKEN"] def main puts "Welcome to the Ada Slack CLI!" workspace = Workspace.new - # TODO project + response = HTTParty.get(BASE_URL, query: {token: SLACK_TOKEN}) + + # response["channels"].each do |channel| + # puts channel["name"] + # end puts "Thank you for using the Ada Slack CLI" end diff --git a/test/test_helper.rb b/test/test_helper.rb index 1fcf2bab..749097b1 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -25,5 +25,7 @@ } # Don't leave our token lying around in a cassette file. - + config.filter_sensitive_data("") do + ENV["SLACK_TOKEN"] + end end From c9aae5ebfa7e9bbc9e36dbcc37de77f8eccff72f Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Wed, 11 Mar 2020 14:59:38 -0700 Subject: [PATCH 02/41] initialize files --- lib/channel.rb | 17 +++++++++++++++++ lib/recipient.rb | 20 ++++++++++++++++++++ lib/user.rb | 18 ++++++++++++++++++ lib/workspace.rb | 22 ++++++++++++++++++++++ test/channel_test.rb | 0 test/recipient_test.rb | 14 ++++++++++++++ test/user_test.rb | 0 test/workspace_test.rb | 0 8 files changed, 91 insertions(+) create mode 100644 lib/channel.rb create mode 100644 lib/recipient.rb create mode 100644 lib/user.rb create mode 100644 lib/workspace.rb create mode 100644 test/channel_test.rb create mode 100644 test/recipient_test.rb create mode 100644 test/user_test.rb create mode 100644 test/workspace_test.rb diff --git a/lib/channel.rb b/lib/channel.rb new file mode 100644 index 00000000..0fb5b2ff --- /dev/null +++ b/lib/channel.rb @@ -0,0 +1,17 @@ +class Channel < Recipient + attr_reader :topic, :member_count + + def initialize + @topic = topic + @member_count = member_count + end + + def details + end + + # When I type list channels, I should see a list of all the channels for that workspace. This list should include the channel's name, topic, member count, and Slack ID. + + def self.list_all + end + +end \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb new file mode 100644 index 00000000..12bcd7d6 --- /dev/null +++ b/lib/recipient.rb @@ -0,0 +1,20 @@ +class Recipient + attr_reader :slack_id, :name + + def initialize(slack_id, name) + @slack_id = slack_id + @name = name + end + + def send_message(message) + end + + def self.get(url, params) + end + + def details + end + + def self.list_all + end +end \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb new file mode 100644 index 00000000..9ff8dd26 --- /dev/null +++ b/lib/user.rb @@ -0,0 +1,18 @@ +class User < Recipient + attr_reader :topic, :member_count + + def initialize + @real_name = real_name + @status_text = status_text + @status_emoji = status_emoji + end + + def details + end + + # When I type list users, I should see a list of all the users in the Slack workspace. This list should include username, real name, and Slack ID. + + def self.list_all + end + +end \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb new file mode 100644 index 00000000..2d06e55e --- /dev/null +++ b/lib/workspace.rb @@ -0,0 +1,22 @@ +class Workspace + attr_reader :users, :channels + + def initialize + @users = [] + @channels = [] + @selected + end + + def select_channel + end + + def select_user + end + + def show_details + + end + + def send_message + end +end \ No newline at end of file diff --git a/test/channel_test.rb b/test/channel_test.rb new file mode 100644 index 00000000..e69de29b diff --git a/test/recipient_test.rb b/test/recipient_test.rb new file mode 100644 index 00000000..721d55fc --- /dev/null +++ b/test/recipient_test.rb @@ -0,0 +1,14 @@ +require_relative 'test_helper' +require "./lib/recipient" + +describe "Recipient" do + before do + slack_id = "abcdefg123" + name = "Jessica" + @recipient = Recipient.new(slack_id, name) + end + + it "can create a Recipient class" do + expect(@recipient).must_be_kind_of Recipient + end +end diff --git a/test/user_test.rb b/test/user_test.rb new file mode 100644 index 00000000..e69de29b diff --git a/test/workspace_test.rb b/test/workspace_test.rb new file mode 100644 index 00000000..e69de29b From 4a13baa129fe149a6399f9ccfe6af5b34ffcfa91 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Wed, 11 Mar 2020 22:05:50 -0700 Subject: [PATCH 03/41] add details method to User --- lib/user.rb | 23 +++++++++++++++++++---- test/user_test.rb | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/lib/user.rb b/lib/user.rb index 9ff8dd26..62f3f5fb 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,17 +1,32 @@ class User < Recipient - attr_reader :topic, :member_count + attr_reader :real_name, :status_text, :status_emoji - def initialize + BASE_URL = "https://slack.com/api/users.list" + API_KEY = ENV["SLACK_TOKEN"] + + def initialize(slack_id) + super(slack_id, name) @real_name = real_name @status_text = status_text @status_emoji = status_emoji end def details - end + # This list should include username, real name, and Slack ID. + response = HTTParty.get(BASE_URL, query: {token: API_KEY}) + member = {} - # When I type list users, I should see a list of all the users in the Slack workspace. This list should include username, real name, and Slack ID. + response["members"].each do |member| + if member["id"] == @slack_id + @real_name = member["real_name"] + @name = member["name"] + @status_text = member["status_text"] + @status_emoji = member["status_emoji"] + end + end + end + # When I type list users, I should see a list of all the users in the Slack workspace def self.list_all end diff --git a/test/user_test.rb b/test/user_test.rb index e69de29b..54834352 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -0,0 +1,32 @@ +require_relative 'test_helper' +require "./lib/user" + +describe "Recipient" do + before do + slack_id = "USLACKBOT" + @user = User.new(slack_id) + end + + describe "initialize" do + it "can create a User class" do + expect(@user).must_be_kind_of User + end + end + + describe "details" do + it "should update to correct details" do + VCR.use_cassette("user-details") do + response = @user.details + expect(@user.real_name).must_equal "Slackbot" + expect(@user.name).must_equal "slackbot" + end + end + end + + + describe "self.list_all" do + # loop through each user + + end + +end From bc2d02641ce85894783e12f09257424178d27ce0 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Thu, 12 Mar 2020 16:07:29 -0700 Subject: [PATCH 04/41] add self.list_all method to Channel and User --- lib/channel.rb | 17 +++++++++++++++++ lib/user.rb | 41 ++++++++++++++++++++++++++--------------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 0fb5b2ff..267193bf 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,6 +1,10 @@ +require_relative "recipient" + class Channel < Recipient attr_reader :topic, :member_count + @all_channels = [] + def initialize @topic = topic @member_count = member_count @@ -12,6 +16,19 @@ def details # When I type list channels, I should see a list of all the channels for that workspace. This list should include the channel's name, topic, member count, and Slack ID. def self.list_all + response = HTTParty.get(BASE_URL + "conversations.list", query: QUERY) + all_channels = [] + + response["channels"].each do |channel| + all_channels << { + name: channel["name"], + topic: channel["topic"]["value"], + member_count: channel["num_members"], + id: channel["id"] + } + end + + return all_channels end end \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index 62f3f5fb..90460370 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,10 +1,9 @@ -class User < Recipient - attr_reader :real_name, :status_text, :status_emoji +require_relative 'recipient' - BASE_URL = "https://slack.com/api/users.list" - API_KEY = ENV["SLACK_TOKEN"] +class User < Recipient + attr_reader :real_name, :status_text, :status_emoji, :all_users - def initialize(slack_id) + def initialize(slack_id, name) super(slack_id, name) @real_name = real_name @status_text = status_text @@ -13,21 +12,33 @@ def initialize(slack_id) def details # This list should include username, real name, and Slack ID. - response = HTTParty.get(BASE_URL, query: {token: API_KEY}) - member = {} + # response = HTTParty.get(BASE_URL, query: {token: API_KEY}) + # member = {} - response["members"].each do |member| - if member["id"] == @slack_id - @real_name = member["real_name"] - @name = member["name"] - @status_text = member["status_text"] - @status_emoji = member["status_emoji"] - end - end + # response["members"].each do |member| + # if member["id"] == @slack_id + # @real_name = member["real_name"] + # @name = member["name"] + # @status_text = member["status_text"] + # @status_emoji = member["status_emoji"] + # end + # end end # When I type list users, I should see a list of all the users in the Slack workspace def self.list_all + response = HTTParty.get(BASE_URL + "users.list", query: QUERY) + all_users = [] + + response["members"].each do |member| + all_users << { + name: member["name"], + real_name: member["real_name"], + id: member["id"] + } + end + + return all_users end end \ No newline at end of file From 1c4b9be1bc00d9b681e1daf8b9a0d1eba1b4ec4b Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 12:56:26 -0700 Subject: [PATCH 05/41] add self.get method to Recipient --- lib/recipient.rb | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 12bcd7d6..989ed124 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1,3 +1,11 @@ +require 'httparty' + +BASE_URL = "https://slack.com/api/" +QUERY = { + token: ENV["SLACK_TOKEN"], + pretty: 1 +} + class Recipient attr_reader :slack_id, :name @@ -7,14 +15,39 @@ def initialize(slack_id, name) end def send_message(message) + # response + # send a message end - def self.get(url, params) + # Recipient.get("conservations.list", QUERY) + + def self.get(endpoint) + response = HTTParty.get(BASE_URL + endpoint, query: QUERY) + if response.code != 200 || response["ok"] == false + raise SlackApiError, "We encountered a problem: #{response["error"]}" + end + + return response end + def details end def self.list_all + # abstract method + # endpoint = "" + # if self == User + # endpoint = "users.list" + # elsif self == Channel + # endpoint = "conversations.list" + # end + + # response = User.get(endpoint, QUERY) + # all = [] + end +end + +class SlackApiError < Exception end \ No newline at end of file From 0109b067b5125e97f372dfeba41c5177f2546a92 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 12:56:59 -0700 Subject: [PATCH 06/41] update to use self.get inherited from Recipient --- lib/channel.rb | 12 ++++++------ lib/user.rb | 17 +++++++++++------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 267193bf..9b9b718a 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -16,19 +16,19 @@ def details # When I type list channels, I should see a list of all the channels for that workspace. This list should include the channel's name, topic, member count, and Slack ID. def self.list_all - response = HTTParty.get(BASE_URL + "conversations.list", query: QUERY) - all_channels = [] + response = Channel.get("conversations.list", QUERY) + all = [] response["channels"].each do |channel| - all_channels << { + all << { name: channel["name"], + id: channel["id"], topic: channel["topic"]["value"], - member_count: channel["num_members"], - id: channel["id"] + member_count: channel["num_members"] } end - return all_channels + return all end end \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index 90460370..d9514f01 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -27,18 +27,23 @@ def details # When I type list users, I should see a list of all the users in the Slack workspace def self.list_all - response = HTTParty.get(BASE_URL + "users.list", query: QUERY) - all_users = [] + response = self.get("users.list", QUERY) + all = [] + + # if response.code != 200 || response[‘message’] != ‘success’ + # raise IssLocationError, “API call failed with code #{response.code} and reason ’#{response[‘reason’]}” + # end + response["members"].each do |member| - all_users << { + all << { name: member["name"], - real_name: member["real_name"], - id: member["id"] + id: member["id"], + real_name: member["real_name"] } end - return all_users + return all end end \ No newline at end of file From 23ce4515875d52f28cd199a13a4c867e433c80ab Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 12:57:30 -0700 Subject: [PATCH 07/41] add user options for CLI --- lib/slack.rb | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 83c0822d..8b4c1e11 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,21 +1,57 @@ #!/usr/bin/env ruby -require 'dotenv' -require 'httparty' require_relative 'workspace' +require 'dotenv' Dotenv.load -BASE_URL = "https://slack.com/api/conversations.list" -SLACK_TOKEN = ENV["SLACK_TOKEN"] def main puts "Welcome to the Ada Slack CLI!" workspace = Workspace.new - response = HTTParty.get(BASE_URL, query: {token: SLACK_TOKEN}) + puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" + + # given three options for how to interact with the program: + input = "" + until input == "quit" + puts "\nWhat would you like to do?" + options = ["list users", "list channels", "select user", "select channel", "details", "quit"] + + options.each_with_index do |option, i| + puts "#{i + 1}. #{option}" + end + + input = gets.chomp.downcase + + case input + when "1", "list users" + puts workspace.users + when "2", "list channels" + puts workspace.channels + when "3", "select user" + print "\nProvide the username or Slack ID of the user you want to select: " + user = gets.chomp.upcase + + when "4", "select channel" + print "\nprovide the channel name or Slack ID of the channel you want to select: " + channel = gets.chomp.upcase + + when "5", "details" + + when "6", "quit" + input = "quit" + else + puts "That's not a valid option, please try again." + end + end + + # list users + # list channels + # quit + # As a user who is at the program's input prompt... + + # When I type quit, the program should exit. + # After completing any command other than quit, the program should reprint the list of commands and ask for another input. - # response["channels"].each do |channel| - # puts channel["name"] - # end puts "Thank you for using the Ada Slack CLI" end From 05be3b54a6c74d8e823c1ec3a082aae5853eb73d Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 12:58:20 -0700 Subject: [PATCH 08/41] add select_channel method to Workspace --- lib/workspace.rb | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 2d06e55e..988fe1f8 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -1,20 +1,30 @@ +require_relative "user" +require_relative "channel" + class Workspace attr_reader :users, :channels + attr_writer :selected def initialize - @users = [] - @channels = [] - @selected + @users = User.list_all + @channels = Channel.list_all + @selected = "" end - def select_channel + def select_channel(input) + @channels.each do |channel| + if channel["id"].upcase == input || channel["name"].upcase == input + @selected = channel + end + end + end def select_user end def show_details - + return @selected.details end def send_message From 8e6d195da18c01086be7f703c40c7990920c92c8 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:14:51 -0700 Subject: [PATCH 09/41] add tests for Recipient class --- test/recipient_test.rb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 721d55fc..dc556c8c 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -8,7 +8,20 @@ @recipient = Recipient.new(slack_id, name) end - it "can create a Recipient class" do - expect(@recipient).must_be_kind_of Recipient + describe "initialize" do + it "can create a Recipient class" do + expect(@recipient).must_be_kind_of Recipient + end end + + describe "self.get" do + it "should get correct details" do + VCR.use_cassette("user-details") do + response = @user.details + expect(@user.real_name).must_equal "Slackbot" + expect(@user.name).must_equal "slackbot" + end + end + end + end From 863efbc79c1af6f709da716ee9b6400518fdd40e Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:15:12 -0700 Subject: [PATCH 10/41] require dotenv gem in test_helper --- test/test_helper.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/test_helper.rb b/test/test_helper.rb index 749097b1..476a82a1 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -9,6 +9,10 @@ require 'minitest/skip_dsl' require 'vcr' +require 'dotenv' + +Dotenv.load + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new VCR.configure do |config| From 1d3a5fb3d691839fb669598f2d752434250b614d Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:15:52 -0700 Subject: [PATCH 11/41] add tests for User class --- test/user_test.rb | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/test/user_test.rb b/test/user_test.rb index 54834352..0d9aa071 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -1,32 +1,37 @@ require_relative 'test_helper' require "./lib/user" -describe "Recipient" do - before do - slack_id = "USLACKBOT" - @user = User.new(slack_id) - end +describe "User" do + describe "details" do + end + + describe "self.get" do + it "gets a list of users" do + result = {} + VCR.use_cassette("users-list") do + result = User.get("users.list") + end - describe "initialize" do - it "can create a User class" do - expect(@user).must_be_kind_of User + expect(result).must_be_kind_of HTTParty::Response + expect(result["ok"]).must_equal true end - end - describe "details" do - it "should update to correct details" do - VCR.use_cassette("user-details") do - response = @user.details - expect(@user.real_name).must_equal "Slackbot" - expect(@user.name).must_equal "slackbot" + it "raises an error when the call fails" do + VCR.use_cassette("users-list-fail") do + expect{User.get("usersfail.list")}.must_raise SlackApiError end - end + end end - describe "self.list_all" do - # loop through each user - + it "returns a list all users" do + VCR.use_cassette("user-details") do + response = User.list_all + response.each do |user| + expect(user).must_be_kind_of User + expect(user).must_respond_to :slack_id + end + end + end end - end From d3999584d6f4a92bb7216dfa66a2c7ee9343b84b Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:21:52 -0700 Subject: [PATCH 12/41] update Channel.list_all to return array of Channel objects --- lib/channel.rb | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 9b9b718a..5d7d393e 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -3,9 +3,8 @@ class Channel < Recipient attr_reader :topic, :member_count - @all_channels = [] - - def initialize + def initialize(slack_id, name, topic, member_count) + super(slack_id, name) @topic = topic @member_count = member_count end @@ -13,19 +12,17 @@ def initialize def details end - # When I type list channels, I should see a list of all the channels for that workspace. This list should include the channel's name, topic, member count, and Slack ID. - def self.list_all - response = Channel.get("conversations.list", QUERY) + response = Channel.get("conversations.list") all = [] response["channels"].each do |channel| - all << { - name: channel["name"], - id: channel["id"], - topic: channel["topic"]["value"], - member_count: channel["num_members"] - } + all << Channel.new( + channel["name"], + channel["id"], + channel["topic"]["value"], + channel["num_members"] + ) end return all From 893571240e78be3ce7f81d8c0b670c13897fa928 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:22:20 -0700 Subject: [PATCH 13/41] update User.list_all to return array of User objects --- lib/user.rb | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/lib/user.rb b/lib/user.rb index d9514f01..5adf6de9 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -3,7 +3,7 @@ class User < Recipient attr_reader :real_name, :status_text, :status_emoji, :all_users - def initialize(slack_id, name) + def initialize(slack_id, name, real_name, status_text, status_emoji) super(slack_id, name) @real_name = real_name @status_text = status_text @@ -27,20 +27,17 @@ def details # When I type list users, I should see a list of all the users in the Slack workspace def self.list_all - response = self.get("users.list", QUERY) + response = self.get("users.list") all = [] - # if response.code != 200 || response[‘message’] != ‘success’ - # raise IssLocationError, “API call failed with code #{response.code} and reason ’#{response[‘reason’]}” - # end - - response["members"].each do |member| - all << { - name: member["name"], - id: member["id"], - real_name: member["real_name"] - } + all << User.new( + member["id"], + member["name"], + member["real_name"], + member["profile"]["status_text"], + member["profile"]["status_emoji"] + ) end return all From a43b9e8513c28be29efc40ae6d577ef4a6ce1138 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:22:36 -0700 Subject: [PATCH 14/41] add tests for Channel class --- test/channel_test.rb | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/channel_test.rb b/test/channel_test.rb index e69de29b..ce2693b6 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -0,0 +1,37 @@ +require_relative 'test_helper' +require "./lib/channel" + +describe "Channel" do + describe "details" do + end + + describe "self.get" do + it "gets a list of channels" do + result = {} + VCR.use_cassette("channels-list") do + result = Channel.get("channels.list") + end + + expect(result).must_be_kind_of HTTParty::Response + expect(result["ok"]).must_equal true + end + + it "raises an error when the call fails" do + VCR.use_cassette("channels-list-fail") do + expect{Channel.get("channelsfail.list")}.must_raise SlackApiError + end + end + end + + describe "self.list_all" do + it "returns a list all channels" do + VCR.use_cassette("channel-details") do + response = Channel.list_all + response.each do |channel| + expect(channel).must_be_kind_of Channel + expect(channel).must_respond_to :slack_id + end + end + end + end +end From ae74de144a048919b4796210494adcbc66850706 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:23:36 -0700 Subject: [PATCH 15/41] remove unnecessary test from Recipient --- test/recipient_test.rb | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/test/recipient_test.rb b/test/recipient_test.rb index dc556c8c..9e57cdf8 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -13,15 +13,4 @@ expect(@recipient).must_be_kind_of Recipient end end - - describe "self.get" do - it "should get correct details" do - VCR.use_cassette("user-details") do - response = @user.details - expect(@user.real_name).must_equal "Slackbot" - expect(@user.name).must_equal "slackbot" - end - end - end - end From a2503a677fd431f824a533a5eee76c93d875f3ec Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:36:01 -0700 Subject: [PATCH 16/41] add dotenv --- lib/recipient.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/recipient.rb b/lib/recipient.rb index 989ed124..337da3ae 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1,4 +1,7 @@ require 'httparty' +require 'dotenv' + +Dotenv.load BASE_URL = "https://slack.com/api/" QUERY = { From c67e0151920854a384565ac17097bbd096358530 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:36:33 -0700 Subject: [PATCH 17/41] create list_options method and add table_print gem --- lib/slack.rb | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 8b4c1e11..b3db52a5 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,8 +1,6 @@ #!/usr/bin/env ruby require_relative 'workspace' -require 'dotenv' - -Dotenv.load +require 'table_print' def main puts "Welcome to the Ada Slack CLI!" @@ -14,19 +12,15 @@ def main input = "" until input == "quit" puts "\nWhat would you like to do?" - options = ["list users", "list channels", "select user", "select channel", "details", "quit"] - - options.each_with_index do |option, i| - puts "#{i + 1}. #{option}" - end + list_options input = gets.chomp.downcase case input when "1", "list users" - puts workspace.users + tp workspace.users, :slack_id, :name, :real_name when "2", "list channels" - puts workspace.channels + tp workspace.channels, :slack_id, :name, :topic, :member_count when "3", "select user" print "\nProvide the username or Slack ID of the user you want to select: " user = gets.chomp.upcase @@ -44,16 +38,16 @@ def main end end - # list users - # list channels - # quit - # As a user who is at the program's input prompt... - - # When I type quit, the program should exit. - # After completing any command other than quit, the program should reprint the list of commands and ask for another input. - puts "Thank you for using the Ada Slack CLI" end +def list_options + options = ["list users", "list channels", "select user", "select channel", "details", "quit"] + + options.each_with_index do |option, i| + puts "#{i + 1}. #{option}" + end +end + main if __FILE__ == $PROGRAM_NAME \ No newline at end of file From 362a177ae959454c53b9189a8ed524ab77bbfffe Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 13:36:49 -0700 Subject: [PATCH 18/41] add cassettes --- test/cassettes/channel-details.yml | 199 ++++++++ test/cassettes/channels-list-fail.yml | 72 +++ test/cassettes/channels-list.yml | 188 +++++++ test/cassettes/user-details.yml | 688 ++++++++++++++++++++++++++ test/cassettes/users-list-fail.yml | 279 +++++++++++ test/cassettes/users-list.yml | 604 ++++++++++++++++++++++ 6 files changed, 2030 insertions(+) create mode 100644 test/cassettes/channel-details.yml create mode 100644 test/cassettes/channels-list-fail.yml create mode 100644 test/cassettes/channels-list.yml create mode 100644 test/cassettes/user-details.yml create mode 100644 test/cassettes/users-list-fail.yml create mode 100644 test/cassettes/users-list.yml diff --git a/test/cassettes/channel-details.yml b/test/cassettes/channel-details.yml new file mode 100644 index 00000000..2864e076 --- /dev/null +++ b/test/cassettes/channel-details.yml @@ -0,0 +1,199 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/conversations.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '668' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:20:36 GMT + Server: + - Apache + X-Slack-Req-Id: + - 7d6c28e9dae8f408ad2a9f5136e6c285 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-4tm2 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 f126db770f21f288439f44d357978a27.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - f7xXM4dW9re0nqGuQ0gavNy0oNccRGmW1_U73PaYfiyA_Q-SBV08mA== + body: + encoding: ASCII-8BIT + string: | + { + "ok": true, + "channels": [ + { + "id": "CV5KNMDKN", + "name": "slack-cli", + "is_channel": true, + "is_group": false, + "is_im": false, + "created": 1583868526, + "is_archived": false, + "is_general": false, + "unlinked": 0, + "name_normalized": "slack-cli", + "is_shared": false, + "parent_conversation": null, + "creator": "UV5KNL1UL", + "is_ext_shared": false, + "is_org_shared": false, + "shared_team_ids": [ + "TV5KNL1LL" + ], + "pending_shared": [], + "pending_connected_team_ids": [], + "is_pending_ext_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "topic": { + "value": "", + "creator": "", + "last_set": 0 + }, + "purpose": { + "value": "", + "creator": "", + "last_set": 0 + }, + "previous_names": [], + "num_members": 4 + }, + { + "id": "CV63MEVG8", + "name": "general", + "is_channel": true, + "is_group": false, + "is_im": false, + "created": 1583868525, + "is_archived": false, + "is_general": true, + "unlinked": 0, + "name_normalized": "general", + "is_shared": false, + "parent_conversation": null, + "creator": "UV5KNL1UL", + "is_ext_shared": false, + "is_org_shared": false, + "shared_team_ids": [ + "TV5KNL1LL" + ], + "pending_shared": [], + "pending_connected_team_ids": [], + "is_pending_ext_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "topic": { + "value": "Company-wide announcements and work-based matters", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "purpose": { + "value": "This channel is for workspace-wide communication and announcements. All members are in this channel.", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "previous_names": [], + "num_members": 5 + }, + { + "id": "CV63MEZTJ", + "name": "random", + "is_channel": true, + "is_group": false, + "is_im": false, + "created": 1583868525, + "is_archived": false, + "is_general": false, + "unlinked": 0, + "name_normalized": "random", + "is_shared": false, + "parent_conversation": null, + "creator": "UV5KNL1UL", + "is_ext_shared": false, + "is_org_shared": false, + "shared_team_ids": [ + "TV5KNL1LL" + ], + "pending_shared": [], + "pending_connected_team_ids": [], + "is_pending_ext_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "topic": { + "value": "Non-work banter and water cooler conversation", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "purpose": { + "value": "A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you'd prefer to keep out of more focused work-related channels.", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "previous_names": [], + "num_members": 4 + } + ], + "response_metadata": { + "next_cursor": "" + } + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:20:36 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/channels-list-fail.yml b/test/cassettes/channels-list-fail.yml new file mode 100644 index 00000000..5bed17f4 --- /dev/null +++ b/test/cassettes/channels-list-fail.yml @@ -0,0 +1,72 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/channelsfail.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '91' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:20:01 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - '09d8d6443d613950d10f7e457df7ee0f' + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-cexh + X-Cache: + - Miss from cloudfront + Via: + - 1.1 e66162aafd55b64ba1478ff7105150fb.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - _IfAJ7hQFpFcssgYE_nd6E2OZJ7BGhkRcTAshVliO7aWd5GfL4XbUQ== + body: + encoding: ASCII-8BIT + string: | + { + "ok": false, + "error": "unknown_method", + "req_method": "channelsfail.list" + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:20:01 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/channels-list.yml b/test/cassettes/channels-list.yml new file mode 100644 index 00000000..f2eb30e1 --- /dev/null +++ b/test/cassettes/channels-list.yml @@ -0,0 +1,188 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/channels.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '654' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:20:01 GMT + Server: + - Apache + X-Slack-Req-Id: + - 1d808829f68ad96d86ccce52f9b7b9d9 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-suv8 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 36810aa1793ee589dc8c194860296079.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - BlB-kdgKMB62mAFYGofmTGmw0OA9AozLTyPRX2v1WEd9jikeJCMyAA== + body: + encoding: ASCII-8BIT + string: | + { + "ok": true, + "channels": [ + { + "id": "CV5KNMDKN", + "name": "slack-cli", + "is_channel": true, + "created": 1583868526, + "is_archived": false, + "is_general": false, + "unlinked": 0, + "creator": "UV5KNL1UL", + "name_normalized": "slack-cli", + "is_shared": false, + "is_org_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "members": [ + "UV5KWEASY", + "UV5KNL1UL", + "UV66MLLSH", + "UV66H40LV" + ], + "topic": { + "value": "", + "creator": "", + "last_set": 0 + }, + "purpose": { + "value": "", + "creator": "", + "last_set": 0 + }, + "previous_names": [], + "num_members": 4 + }, + { + "id": "CV63MEVG8", + "name": "general", + "is_channel": true, + "created": 1583868525, + "is_archived": false, + "is_general": true, + "unlinked": 0, + "creator": "UV5KNL1UL", + "name_normalized": "general", + "is_shared": false, + "is_org_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "members": [ + "UV5KWEASY", + "UV5KNL1UL", + "UV66MLLSH", + "UV66H40LV", + "UUV2F0L67" + ], + "topic": { + "value": "Company-wide announcements and work-based matters", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "purpose": { + "value": "This channel is for workspace-wide communication and announcements. All members are in this channel.", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "previous_names": [], + "num_members": 5 + }, + { + "id": "CV63MEZTJ", + "name": "random", + "is_channel": true, + "created": 1583868525, + "is_archived": false, + "is_general": false, + "unlinked": 0, + "creator": "UV5KNL1UL", + "name_normalized": "random", + "is_shared": false, + "is_org_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "members": [ + "UV5KWEASY", + "UV5KNL1UL", + "UV66MLLSH", + "UV66H40LV" + ], + "topic": { + "value": "Non-work banter and water cooler conversation", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "purpose": { + "value": "A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you'd prefer to keep out of more focused work-related channels.", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "previous_names": [], + "num_members": 4 + } + ], + "response_metadata": { + "next_cursor": "" + } + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:20:01 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/user-details.yml b/test/cassettes/user-details.yml new file mode 100644 index 00000000..c420db57 --- /dev/null +++ b/test/cassettes/user-details.yml @@ -0,0 +1,688 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '1990' + Connection: + - keep-alive + Date: + - Thu, 12 Mar 2020 04:57:21 GMT + Server: + - Apache + X-Slack-Req-Id: + - 10bbb2f652e93bacc96d18dddd500a21 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-zk2s + X-Cache: + - Miss from cloudfront + Via: + - 1.1 995664ee945c06fc706b5cb8e0e650dc.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - yxA4lsXImBdlzvHgJq5AVuIH-Qp1XlEiLgar76bPLKJVrN3eeJc7pw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TV5KNL1LL","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UUTE7TU58","team_id":"TV5KNL1LL","name":"time_ross_api_project","deleted":false,"color":"e0a729","real_name":"time_ross_api_project","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"time_ross_api_project","real_name_normalized":"time_ross_api_project","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gde749a9a5c8","api_app_id":"AV5PEF4JG","always_active":false,"bot_id":"BUTE7TQ0J","image_24":"https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1583872726},{"id":"UUV2F0L67","team_id":"TV5KNL1LL","name":"space_jessica_api_pro","deleted":false,"color":"5b89d5","real_name":"space_jessica_api_pro","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"space_jessica_api_pro","real_name_normalized":"space_jessica_api_pro","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ga3ae7173902","api_app_id":"AV8C3U6A3","always_active":false,"bot_id":"BUWDPRGQH","image_24":"https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1583883147},{"id":"UUVR12XJ6","team_id":"TV5KNL1LL","name":"jeta","deleted":false,"color":"2b6836","real_name":"jeta","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"jeta","real_name_normalized":"jeta","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g25d2f18ae89","api_app_id":"AVAEDFTTR","always_active":false,"bot_id":"BV85DAQP6","image_24":"https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1583959127},{"id":"UV5KNL1UL","team_id":"TV5KNL1LL","name":"jstone4815","deleted":false,"color":"9f69e7","real_name":"Jessica + Stone","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Jessica + Stone","real_name_normalized":"Jessica Stone","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g3f062ade197","first_name":"Jessica","last_name":"Stone","image_24":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1583952236,"has_2fa":false},{"id":"UV5KWEASY","team_id":"TV5KNL1LL","name":"syrosalynyu","deleted":false,"color":"4bbe2e","real_name":"Ross","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Ross","real_name_normalized":"Ross","display_name":"Ross","display_name_normalized":"Ross","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g1d2dde50ccd","image_24":"https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1583868729,"has_2fa":false},{"id":"UV66H40LV","team_id":"TV5KNL1LL","name":"jeta.bajrami","deleted":false,"color":"e7392d","real_name":"Jeta","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Jeta","real_name_normalized":"Jeta","display_name":"Jeta","display_name_normalized":"Jeta","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g8bc5d18fcd8","image_24":"https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1583870734,"has_2fa":false},{"id":"UV66MLLSH","team_id":"TV5KNL1LL","name":"quinruby0","deleted":false,"color":"3c989f","real_name":"quin","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"quin","real_name_normalized":"quin","display_name":"quin","display_name_normalized":"quin","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ge32b4d91cd0","image_24":"https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1583870863,"has_2fa":false},{"id":"UV678M5JL","team_id":"TV5KNL1LL","name":"space_jessica_stone_a","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"space_jessica_stone_a","real_name_normalized":"space_jessica_stone_a","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gb05f6b63392","api_app_id":"AV66BRT7A","always_active":false,"bot_id":"BV67TC6GM","image_24":"https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_bot":true,"is_app_user":false,"updated":1583880597},{"id":"UV69D9Z1B","team_id":"TV5KNL1LL","name":"space_jeta_api_projec","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"space_jeta_api_projec","real_name_normalized":"space_jeta_api_projec","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ga3f6f6c4f3a","api_app_id":"AUTECGKJN","always_active":false,"bot_id":"BV84UJ3RD","image_24":"https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_bot":true,"is_app_user":false,"updated":1583957762},{"id":"UV8DATUPQ","team_id":"TV5KNL1LL","name":"time_quin_api_project","deleted":false,"color":"674b1b","real_name":"time_quin_api_project","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"time_quin_api_project","real_name_normalized":"time_quin_api_project","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g180c140de8a","api_app_id":"AV8D2QGFQ","always_active":false,"bot_id":"BUUNT1ZMZ","image_24":"https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1583871903}],"cache_ts":1583989041,"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Thu, 12 Mar 2020 04:57:21 GMT +- request: + method: get + uri: https://slack.com/api/users.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '60' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:09:35 GMT + Server: + - Apache + X-Slack-Req-Id: + - c441976914bdf471cf7746f916b49e7c + Referrer-Policy: + - no-referrer + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + X-Accepted-Oauth-Scopes: + - users:read + X-Slack-Backend: + - r + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-vmz3 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 4d8620b80ebe37d366388e117039aa8e.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - 9K90F8yhfnRcmD1XPUi0cas1fcM9xXj_VJxCXcn2NSW4oZYdITucOg== + body: + encoding: ASCII-8BIT + string: | + { + "ok": false, + "error": "not_authed" + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:09:35 GMT +- request: + method: get + uri: https://slack.com/api/users.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2149' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:10:18 GMT + Server: + - Apache + X-Slack-Req-Id: + - ff0ed9cc929928fa81efef2c1285b2ef + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-7jn1 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 1f6e68152880a39d72e6bf2996cd6a61.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - KmfOxF1TNNuUNG1JJBDTnwP3PnEXUUKGtNOor_Y1afBYWTsPtRuOfg== + body: + encoding: ASCII-8BIT + string: | + { + "ok": true, + "members": [ + { + "id": "USLACKBOT", + "team_id": "TV5KNL1LL", + "name": "slackbot", + "deleted": false, + "color": "757575", + "real_name": "Slackbot", + "tz": null, + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Slackbot", + "real_name_normalized": "Slackbot", + "display_name": "Slackbot", + "display_name_normalized": "Slackbot", + "fields": null, + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "sv41d8cd98f0", + "always_active": true, + "first_name": "slackbot", + "last_name": "", + "image_24": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png", + "image_32": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png", + "image_48": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png", + "image_72": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png", + "image_192": "https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png", + "image_512": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 0 + }, + { + "id": "UUTE7TU58", + "team_id": "TV5KNL1LL", + "name": "time_ross_api_project", + "deleted": false, + "color": "e0a729", + "real_name": "time_ross_api_project", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "time_ross_api_project", + "real_name_normalized": "time_ross_api_project", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "gde749a9a5c8", + "api_app_id": "AV5PEF4JG", + "always_active": false, + "bot_id": "BUTE7TQ0J", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583872726 + }, + { + "id": "UUV2F0L67", + "team_id": "TV5KNL1LL", + "name": "space_jessica_api_pro", + "deleted": false, + "color": "5b89d5", + "real_name": "space_jessica_api_pro", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jessica_api_pro", + "real_name_normalized": "space_jessica_api_pro", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ga3ae7173902", + "api_app_id": "AV8C3U6A3", + "always_active": false, + "bot_id": "BUWDPRGQH", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583883147 + }, + { + "id": "UUVR12XJ6", + "team_id": "TV5KNL1LL", + "name": "jeta", + "deleted": false, + "color": "2b6836", + "real_name": "jeta", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "jeta", + "real_name_normalized": "jeta", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g25d2f18ae89", + "api_app_id": "AVAEDFTTR", + "always_active": false, + "bot_id": "BV85DAQP6", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583959127 + }, + { + "id": "UV5KNL1UL", + "team_id": "TV5KNL1LL", + "name": "jstone4815", + "deleted": false, + "color": "9f69e7", + "real_name": "Jessica Stone", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Jessica Stone", + "real_name_normalized": "Jessica Stone", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g3f062ade197", + "first_name": "Jessica", + "last_name": "Stone", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": true, + "is_owner": true, + "is_primary_owner": true, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583952236, + "has_2fa": false + }, + { + "id": "UV5KWEASY", + "team_id": "TV5KNL1LL", + "name": "syrosalynyu", + "deleted": false, + "color": "4bbe2e", + "real_name": "Ross", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Ross", + "real_name_normalized": "Ross", + "display_name": "Ross", + "display_name_normalized": "Ross", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g1d2dde50ccd", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583868729, + "has_2fa": false + }, + { + "id": "UV66H40LV", + "team_id": "TV5KNL1LL", + "name": "jeta.bajrami", + "deleted": false, + "color": "e7392d", + "real_name": "Jeta", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Jeta", + "real_name_normalized": "Jeta", + "display_name": "Jeta", + "display_name_normalized": "Jeta", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g8bc5d18fcd8", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583870734, + "has_2fa": false + }, + { + "id": "UV66MLLSH", + "team_id": "TV5KNL1LL", + "name": "quinruby0", + "deleted": false, + "color": "3c989f", + "real_name": "quin", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "quin", + "real_name_normalized": "quin", + "display_name": "quin", + "display_name_normalized": "quin", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ge32b4d91cd0", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583870863, + "has_2fa": false + }, + { + "id": "UV678M5JL", + "team_id": "TV5KNL1LL", + "name": "space_jessica_stone_a", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jessica_stone_a", + "real_name_normalized": "space_jessica_stone_a", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "gb05f6b63392", + "api_app_id": "AV66BRT7A", + "always_active": false, + "bot_id": "BV67TC6GM", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1583880597 + }, + { + "id": "UV69D9Z1B", + "team_id": "TV5KNL1LL", + "name": "space_jeta_api_projec", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jeta_api_projec", + "real_name_normalized": "space_jeta_api_projec", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ga3f6f6c4f3a", + "api_app_id": "AUTECGKJN", + "always_active": false, + "bot_id": "BV84UJ3RD", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1583957762 + }, + { + "id": "UV8DATUPQ", + "team_id": "TV5KNL1LL", + "name": "time_quin_api_project", + "deleted": false, + "color": "674b1b", + "real_name": "time_quin_api_project", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "time_quin_api_project", + "real_name_normalized": "time_quin_api_project", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g180c140de8a", + "api_app_id": "AV8D2QGFQ", + "always_active": false, + "bot_id": "BUUNT1ZMZ", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583871903 + } + ], + "cache_ts": 1584216618, + "response_metadata": { + "next_cursor": "" + } + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:10:18 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/users-list-fail.yml b/test/cassettes/users-list-fail.yml new file mode 100644 index 00000000..64b90e99 --- /dev/null +++ b/test/cassettes/users-list-fail.yml @@ -0,0 +1,279 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/usersfail.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '87' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:07:52 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - a33d6eaec123b5c97cbe4ece9f7f39c7 + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-0b65 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 112d82578d402a38d8d02e8b857617e1.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - EUDL9rVuWtif27Y2kvjdDaT3e_-N2TgxVIOz1W7SD58x6YUeANgTMQ== + body: + encoding: ASCII-8BIT + string: | + { + "ok": false, + "error": "unknown_method", + "req_method": "usersfail.list" + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:07:52 GMT +- request: + method: get + uri: https://slack.com/api/usersfail.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '87' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:07:52 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 8ad3c5d05254e2c973607f16a8d69ed5 + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-dr0n + X-Cache: + - Miss from cloudfront + Via: + - 1.1 9046e5a276a05e60ee34c8475e92b8e7.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - bhWBj9qIMlBCglOXJZnZY1KM4KfgmvPbkyCN4Bg0uispV1Kh2MQe9g== + body: + encoding: ASCII-8BIT + string: | + { + "ok": false, + "error": "unknown_method", + "req_method": "usersfail.list" + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:07:52 GMT +- request: + method: get + uri: https://slack.com/api/usersfail.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '87' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:10:18 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 8e976dc532f6306abf4fc14c3d935ddd + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-2zn9 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 0bb842bd5868b86440983b936bb0adef.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - aVIeom56Q3zP0v23S3cVLNWZEJ58J3KZRj4ofhBZ2rY6DRCz72eN8Q== + body: + encoding: ASCII-8BIT + string: | + { + "ok": false, + "error": "unknown_method", + "req_method": "usersfail.list" + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:10:18 GMT +- request: + method: get + uri: https://slack.com/api/usersfail.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '87' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:10:18 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - fc08f2f137042fe7515fb2fb5db642cd + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-9hkc + X-Cache: + - Miss from cloudfront + Via: + - 1.1 ef6538ee7be7b17c84d06edb0f4c0a1a.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - G7myacKuYBA8MrZSOOiz2mhldhhJb4yZH-VCUqr51mqA7vDWag5KRQ== + body: + encoding: ASCII-8BIT + string: | + { + "ok": false, + "error": "unknown_method", + "req_method": "usersfail.list" + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:10:18 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/users-list.yml b/test/cassettes/users-list.yml new file mode 100644 index 00000000..9e8f84a6 --- /dev/null +++ b/test/cassettes/users-list.yml @@ -0,0 +1,604 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '60' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:07:52 GMT + Server: + - Apache + X-Slack-Req-Id: + - 592bab4514d9fe8845be56cbb872febc + Referrer-Policy: + - no-referrer + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + X-Accepted-Oauth-Scopes: + - users:read + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-g1md + X-Cache: + - Miss from cloudfront + Via: + - 1.1 d8792dbd3191bbe722eba5b536b979c8.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - 3muMg12AtbgqdFv7Ey8z56OzjEJ1Ma9lJaUk7DgIEI9WhXRqnXpo4g== + body: + encoding: ASCII-8BIT + string: | + { + "ok": false, + "error": "not_authed" + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:07:52 GMT +- request: + method: get + uri: https://slack.com/api/users.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2149' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:10:18 GMT + Server: + - Apache + X-Slack-Req-Id: + - 01efe195e5386da8ebbcae1d5e23e0d9 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-y98o + X-Cache: + - Miss from cloudfront + Via: + - 1.1 8275ae3e861a04a309ec8b466cdc4a26.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - ykFefgAiIRhtLbhu9ruEJg6AIhLEuH0-04oG78RuCZe64BU3hvaIVA== + body: + encoding: ASCII-8BIT + string: | + { + "ok": true, + "members": [ + { + "id": "USLACKBOT", + "team_id": "TV5KNL1LL", + "name": "slackbot", + "deleted": false, + "color": "757575", + "real_name": "Slackbot", + "tz": null, + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Slackbot", + "real_name_normalized": "Slackbot", + "display_name": "Slackbot", + "display_name_normalized": "Slackbot", + "fields": null, + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "sv41d8cd98f0", + "always_active": true, + "first_name": "slackbot", + "last_name": "", + "image_24": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png", + "image_32": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png", + "image_48": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png", + "image_72": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png", + "image_192": "https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png", + "image_512": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 0 + }, + { + "id": "UUTE7TU58", + "team_id": "TV5KNL1LL", + "name": "time_ross_api_project", + "deleted": false, + "color": "e0a729", + "real_name": "time_ross_api_project", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "time_ross_api_project", + "real_name_normalized": "time_ross_api_project", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "gde749a9a5c8", + "api_app_id": "AV5PEF4JG", + "always_active": false, + "bot_id": "BUTE7TQ0J", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583872726 + }, + { + "id": "UUV2F0L67", + "team_id": "TV5KNL1LL", + "name": "space_jessica_api_pro", + "deleted": false, + "color": "5b89d5", + "real_name": "space_jessica_api_pro", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jessica_api_pro", + "real_name_normalized": "space_jessica_api_pro", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ga3ae7173902", + "api_app_id": "AV8C3U6A3", + "always_active": false, + "bot_id": "BUWDPRGQH", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583883147 + }, + { + "id": "UUVR12XJ6", + "team_id": "TV5KNL1LL", + "name": "jeta", + "deleted": false, + "color": "2b6836", + "real_name": "jeta", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "jeta", + "real_name_normalized": "jeta", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g25d2f18ae89", + "api_app_id": "AVAEDFTTR", + "always_active": false, + "bot_id": "BV85DAQP6", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583959127 + }, + { + "id": "UV5KNL1UL", + "team_id": "TV5KNL1LL", + "name": "jstone4815", + "deleted": false, + "color": "9f69e7", + "real_name": "Jessica Stone", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Jessica Stone", + "real_name_normalized": "Jessica Stone", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g3f062ade197", + "first_name": "Jessica", + "last_name": "Stone", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": true, + "is_owner": true, + "is_primary_owner": true, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583952236, + "has_2fa": false + }, + { + "id": "UV5KWEASY", + "team_id": "TV5KNL1LL", + "name": "syrosalynyu", + "deleted": false, + "color": "4bbe2e", + "real_name": "Ross", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Ross", + "real_name_normalized": "Ross", + "display_name": "Ross", + "display_name_normalized": "Ross", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g1d2dde50ccd", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583868729, + "has_2fa": false + }, + { + "id": "UV66H40LV", + "team_id": "TV5KNL1LL", + "name": "jeta.bajrami", + "deleted": false, + "color": "e7392d", + "real_name": "Jeta", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Jeta", + "real_name_normalized": "Jeta", + "display_name": "Jeta", + "display_name_normalized": "Jeta", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g8bc5d18fcd8", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583870734, + "has_2fa": false + }, + { + "id": "UV66MLLSH", + "team_id": "TV5KNL1LL", + "name": "quinruby0", + "deleted": false, + "color": "3c989f", + "real_name": "quin", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "quin", + "real_name_normalized": "quin", + "display_name": "quin", + "display_name_normalized": "quin", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ge32b4d91cd0", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583870863, + "has_2fa": false + }, + { + "id": "UV678M5JL", + "team_id": "TV5KNL1LL", + "name": "space_jessica_stone_a", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jessica_stone_a", + "real_name_normalized": "space_jessica_stone_a", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "gb05f6b63392", + "api_app_id": "AV66BRT7A", + "always_active": false, + "bot_id": "BV67TC6GM", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1583880597 + }, + { + "id": "UV69D9Z1B", + "team_id": "TV5KNL1LL", + "name": "space_jeta_api_projec", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jeta_api_projec", + "real_name_normalized": "space_jeta_api_projec", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ga3f6f6c4f3a", + "api_app_id": "AUTECGKJN", + "always_active": false, + "bot_id": "BV84UJ3RD", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1583957762 + }, + { + "id": "UV8DATUPQ", + "team_id": "TV5KNL1LL", + "name": "time_quin_api_project", + "deleted": false, + "color": "674b1b", + "real_name": "time_quin_api_project", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "time_quin_api_project", + "real_name_normalized": "time_quin_api_project", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g180c140de8a", + "api_app_id": "AV8D2QGFQ", + "always_active": false, + "bot_id": "BUUNT1ZMZ", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583871903 + } + ], + "cache_ts": 1584216618, + "response_metadata": { + "next_cursor": "" + } + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:10:18 GMT +recorded_with: VCR 5.1.0 From f776ffef59aad72e2d388367a48feab8197dc488 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 14:17:59 -0700 Subject: [PATCH 19/41] fix comparison to upcase input & add select_user method --- lib/workspace.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 988fe1f8..a4317626 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -3,7 +3,7 @@ class Workspace attr_reader :users, :channels - attr_writer :selected + attr_accessor :selected def initialize @users = User.list_all @@ -13,14 +13,18 @@ def initialize def select_channel(input) @channels.each do |channel| - if channel["id"].upcase == input || channel["name"].upcase == input + if channel.slack_id.upcase == input.upcase || channel.name.upcase == input.upcase @selected = channel end end - end - def select_user + def select_user(input) + @users.each do |user| + if user.slack_id.upcase == input.upcase || user.name.upcase == input.upcase + @selected = user + end + end end def show_details From f2ea83e960e5bb672a717ed135e9344c2c2f2671 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 14:18:42 -0700 Subject: [PATCH 20/41] add init test to Channel and remove from Recipient --- test/channel_test.rb | 10 ++++++++++ test/recipient_test.rb | 11 ----------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/test/channel_test.rb b/test/channel_test.rb index ce2693b6..5bc3061e 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -2,6 +2,16 @@ require "./lib/channel" describe "Channel" do + describe "initialize" do + it "creates a Channel object" do + channel = Channel.new("slack-channel", "123456", "slack cli", 5) + expect(channel).must_respond_to :slack_id + expect(channel).must_respond_to :name + expect(channel).must_respond_to :topic + expect(channel).must_respond_to :member_count + end + end + describe "details" do end diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 9e57cdf8..e5c94611 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -2,15 +2,4 @@ require "./lib/recipient" describe "Recipient" do - before do - slack_id = "abcdefg123" - name = "Jessica" - @recipient = Recipient.new(slack_id, name) - end - - describe "initialize" do - it "can create a Recipient class" do - expect(@recipient).must_be_kind_of Recipient - end - end end From 58968f42c910a3e9e9c56f7888ba57669f3f69ad Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 14:19:13 -0700 Subject: [PATCH 21/41] add tests for Workspace - initialize, select_channel, select_user --- test/workspace_test.rb | 57 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/test/workspace_test.rb b/test/workspace_test.rb index e69de29b..c589145d 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -0,0 +1,57 @@ +require_relative 'test_helper' +require "./lib/workspace" + +describe "Workspace" do + before do + workspace = '' + VCR.use_cassette("workspace-data") do + @workspace = Workspace.new + end + end + + describe "initialize" do + it "initializes Workspace object with an array of users and channels" do + + expect(@workspace).must_be_kind_of Workspace + expect(@workspace.users).must_be_kind_of Array + expect(@workspace.channels).must_be_kind_of Array + end + end + + describe "select_channel" do + it "sets @selected to correct Channel instance when given an ID" do + @workspace.select_channel("slack-cli") + + expect(@workspace.selected).must_be_kind_of Channel + expect(@workspace.selected.slack_id).must_equal "slack-cli" + end + + it "sets @selected to correct Channel instance when given a username" do + @workspace.select_channel("CV5KNMDKN") + + expect(@workspace.selected).must_be_kind_of Channel + expect(@workspace.selected.name).must_equal "CV5KNMDKN" + end + end + + describe "select_user" do + it "sets @selected to correct User instance when given an ID" do + @workspace.select_user("USLACKBOT") + + expect(@workspace.selected).must_be_kind_of User + expect(@workspace.selected.slack_id).must_equal "USLACKBOT" + end + + it "sets @selected to correct User instance when given a username" do + @workspace.select_user("slackbot") + + expect(@workspace.selected).must_be_kind_of User + expect(@workspace.selected.name).must_equal "slackbot" + end + + end + + describe "show_details" do + + end +end From 5fb346b7e3df0b52a7d90f661f609e25e9b86931 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 14:29:00 -0700 Subject: [PATCH 22/41] add logic for no match found to select_channel and select_user --- lib/workspace.rb | 6 ++++++ test/workspace_test.rb | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/lib/workspace.rb b/lib/workspace.rb index a4317626..00e6cb02 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -15,6 +15,9 @@ def select_channel(input) @channels.each do |channel| if channel.slack_id.upcase == input.upcase || channel.name.upcase == input.upcase @selected = channel + break + else + @selected = "" end end end @@ -23,6 +26,9 @@ def select_user(input) @users.each do |user| if user.slack_id.upcase == input.upcase || user.name.upcase == input.upcase @selected = user + break + else + @selected = "" end end end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index c589145d..e4fa04dc 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -32,6 +32,13 @@ expect(@workspace.selected).must_be_kind_of Channel expect(@workspace.selected.name).must_equal "CV5KNMDKN" end + + it "sets @selected to empty if no match is found" do + @workspace.select_channel("CV5KNMDKN") + @workspace.select_channel("abcdef") + + expect(@workspace.selected).must_equal "" + end end describe "select_user" do @@ -49,6 +56,13 @@ expect(@workspace.selected.name).must_equal "slackbot" end + it "sets @selected to empty if no match is found" do + @workspace.select_user("slackbot") + @workspace.select_user("abcdef") + + expect(@workspace.selected).must_equal "" + end + end describe "show_details" do From a83802303666d2be22f86d0a2d4bd6654c6f51a8 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 14:51:32 -0700 Subject: [PATCH 23/41] add details method to User and Channel --- lib/channel.rb | 1 + lib/user.rb | 14 ++------------ test/channel_test.rb | 4 ++++ test/user_test.rb | 4 ++++ 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 5d7d393e..8ad9f95d 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -10,6 +10,7 @@ def initialize(slack_id, name, topic, member_count) end def details + return tp self, :slack_id, :name, :topic, :member_count end def self.list_all diff --git a/lib/user.rb b/lib/user.rb index 5adf6de9..236f6db8 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,4 +1,5 @@ require_relative 'recipient' +require 'table_print' class User < Recipient attr_reader :real_name, :status_text, :status_emoji, :all_users @@ -11,18 +12,7 @@ def initialize(slack_id, name, real_name, status_text, status_emoji) end def details - # This list should include username, real name, and Slack ID. - # response = HTTParty.get(BASE_URL, query: {token: API_KEY}) - # member = {} - - # response["members"].each do |member| - # if member["id"] == @slack_id - # @real_name = member["real_name"] - # @name = member["name"] - # @status_text = member["status_text"] - # @status_emoji = member["status_emoji"] - # end - # end + return tp self, :slack_id, :name, :real_name, :status_text, :status_emoji end # When I type list users, I should see a list of all the users in the Slack workspace diff --git a/test/channel_test.rb b/test/channel_test.rb index 5bc3061e..9ad94bc8 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -13,6 +13,10 @@ end describe "details" do + it "returns table of data" do + channel = Channel.new("123456", "bobberts-channel", "bob's stuff", 1) + expect(channel.details).must_be_kind_of TablePrint::Returnable + end end describe "self.get" do diff --git a/test/user_test.rb b/test/user_test.rb index 0d9aa071..7cf03464 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -3,6 +3,10 @@ describe "User" do describe "details" do + it "returns table of data" do + user = User.new("123456", "Bobbert", "Robert", "Hi", ":)") + expect(user.details).must_be_kind_of TablePrint::Returnable + end end describe "self.get" do From 505066d34b401ca494d87d9b5b3bec83021c429c Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 14:57:20 -0700 Subject: [PATCH 24/41] add logic for show_details when @selected is empty --- lib/workspace.rb | 1 + test/workspace_test.rb | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 00e6cb02..44dc9097 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -34,6 +34,7 @@ def select_user(input) end def show_details + return nil if @selected == "" return @selected.details end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index e4fa04dc..3e3a1ea7 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -66,6 +66,15 @@ end describe "show_details" do - + it "returns details for selected user or channel" do + @workspace.selected = @workspace.users[0] + selected = @workspace.show_details + expect(selected).must_be_kind_of TablePrint::Returnable + end + + it "returns nil if @selected is empty" do + @workspace.selected = "" + expect(@workspace.show_details).must_equal nil + end end end From bfe927e5062c72398d28881b3b58a9c90e52f598 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 15:00:06 -0700 Subject: [PATCH 25/41] add options for select user, select channel, and details --- lib/slack.rb | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index b3db52a5..2a87f286 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -22,15 +22,17 @@ def main when "2", "list channels" tp workspace.channels, :slack_id, :name, :topic, :member_count when "3", "select user" - print "\nProvide the username or Slack ID of the user you want to select: " - user = gets.chomp.upcase - + print "\nProvide the name or Slack ID of the user you want to select: " + workspace.select_user(gets.chomp.upcase) + puts "No match found." if workspace.selected == "" when "4", "select channel" - print "\nprovide the channel name or Slack ID of the channel you want to select: " - channel = gets.chomp.upcase - + print "\nProvide the name or Slack ID of the channel you want to select: " + workspace.select_channel(gets.chomp.upcase) + puts "No match found." if workspace.selected == "" when "5", "details" - + if !workspace.show_details + puts "Please make a selection first" + end when "6", "quit" input = "quit" else @@ -38,7 +40,6 @@ def main end end - puts "Thank you for using the Ada Slack CLI" end From 3fa40098ab1fd9686038ddf803afff3257bef2e1 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sat, 14 Mar 2020 15:00:26 -0700 Subject: [PATCH 26/41] add cassettes --- test/cassettes/workspace-data.yml | 730 ++++++++++++++++++++++++++++++ 1 file changed, 730 insertions(+) create mode 100644 test/cassettes/workspace-data.yml diff --git a/test/cassettes/workspace-data.yml b/test/cassettes/workspace-data.yml new file mode 100644 index 00000000..5475335e --- /dev/null +++ b/test/cassettes/workspace-data.yml @@ -0,0 +1,730 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2150' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:47:59 GMT + Server: + - Apache + X-Slack-Req-Id: + - 1a3c1a2a6904ef87561f4b323a0dd3ed + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-u4yb + X-Cache: + - Miss from cloudfront + Via: + - 1.1 1949caaabae48a894fcd770a3e1384f7.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - 313Ok1IzcF29OhUUdBK_8qgMrNiWA1TiKl6FuxM8ve85jagoAyliMw== + body: + encoding: ASCII-8BIT + string: | + { + "ok": true, + "members": [ + { + "id": "USLACKBOT", + "team_id": "TV5KNL1LL", + "name": "slackbot", + "deleted": false, + "color": "757575", + "real_name": "Slackbot", + "tz": null, + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Slackbot", + "real_name_normalized": "Slackbot", + "display_name": "Slackbot", + "display_name_normalized": "Slackbot", + "fields": null, + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "sv41d8cd98f0", + "always_active": true, + "first_name": "slackbot", + "last_name": "", + "image_24": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png", + "image_32": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png", + "image_48": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png", + "image_72": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png", + "image_192": "https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png", + "image_512": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 0 + }, + { + "id": "UUTE7TU58", + "team_id": "TV5KNL1LL", + "name": "time_ross_api_project", + "deleted": false, + "color": "e0a729", + "real_name": "time_ross_api_project", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "time_ross_api_project", + "real_name_normalized": "time_ross_api_project", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "gde749a9a5c8", + "api_app_id": "AV5PEF4JG", + "always_active": false, + "bot_id": "BUTE7TQ0J", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583872726 + }, + { + "id": "UUV2F0L67", + "team_id": "TV5KNL1LL", + "name": "space_jessica_api_pro", + "deleted": false, + "color": "5b89d5", + "real_name": "space_jessica_api_pro", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jessica_api_pro", + "real_name_normalized": "space_jessica_api_pro", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ga3ae7173902", + "api_app_id": "AV8C3U6A3", + "always_active": false, + "bot_id": "BUWDPRGQH", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583883147 + }, + { + "id": "UUVR12XJ6", + "team_id": "TV5KNL1LL", + "name": "jeta", + "deleted": false, + "color": "2b6836", + "real_name": "jeta", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "jeta", + "real_name_normalized": "jeta", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g25d2f18ae89", + "api_app_id": "AVAEDFTTR", + "always_active": false, + "bot_id": "BV85DAQP6", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583959127 + }, + { + "id": "UV5KNL1UL", + "team_id": "TV5KNL1LL", + "name": "jstone4815", + "deleted": false, + "color": "9f69e7", + "real_name": "Jessica Stone", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Jessica Stone", + "real_name_normalized": "Jessica Stone", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g3f062ade197", + "first_name": "Jessica", + "last_name": "Stone", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": true, + "is_owner": true, + "is_primary_owner": true, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583952236, + "has_2fa": false + }, + { + "id": "UV5KWEASY", + "team_id": "TV5KNL1LL", + "name": "syrosalynyu", + "deleted": false, + "color": "4bbe2e", + "real_name": "Ross", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Ross", + "real_name_normalized": "Ross", + "display_name": "Ross", + "display_name_normalized": "Ross", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g1d2dde50ccd", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583868729, + "has_2fa": false + }, + { + "id": "UV66H40LV", + "team_id": "TV5KNL1LL", + "name": "jeta.bajrami", + "deleted": false, + "color": "e7392d", + "real_name": "Jeta", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Jeta", + "real_name_normalized": "Jeta", + "display_name": "Jeta", + "display_name_normalized": "Jeta", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g8bc5d18fcd8", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583870734, + "has_2fa": false + }, + { + "id": "UV66MLLSH", + "team_id": "TV5KNL1LL", + "name": "quinruby0", + "deleted": false, + "color": "3c989f", + "real_name": "quin", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "quin", + "real_name_normalized": "quin", + "display_name": "quin", + "display_name_normalized": "quin", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ge32b4d91cd0", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583870863, + "has_2fa": false + }, + { + "id": "UV678M5JL", + "team_id": "TV5KNL1LL", + "name": "space_jessica_stone_a", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jessica_stone_a", + "real_name_normalized": "space_jessica_stone_a", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "gb05f6b63392", + "api_app_id": "AV66BRT7A", + "always_active": false, + "bot_id": "BV67TC6GM", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1583880597 + }, + { + "id": "UV69D9Z1B", + "team_id": "TV5KNL1LL", + "name": "space_jeta_api_projec", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jeta_api_projec", + "real_name_normalized": "space_jeta_api_projec", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ga3f6f6c4f3a", + "api_app_id": "AUTECGKJN", + "always_active": false, + "bot_id": "BV84UJ3RD", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1583957762 + }, + { + "id": "UV8DATUPQ", + "team_id": "TV5KNL1LL", + "name": "time_quin_api_project", + "deleted": false, + "color": "674b1b", + "real_name": "time_quin_api_project", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "time_quin_api_project", + "real_name_normalized": "time_quin_api_project", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g180c140de8a", + "api_app_id": "AV8D2QGFQ", + "always_active": false, + "bot_id": "BUUNT1ZMZ", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583871903 + } + ], + "cache_ts": 1584218879, + "response_metadata": { + "next_cursor": "" + } + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:47:59 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '668' + Connection: + - keep-alive + Date: + - Sat, 14 Mar 2020 20:47:59 GMT + Server: + - Apache + X-Slack-Req-Id: + - fcd8ae81110486368a6816b454570ca8 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-ij90 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 0cf6c59c77f0fff670ae085179adc459.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - JhIvjz05DKd3_GsQVfUMxoStpAwhFxrKkF5-zOJc9Dt0tEd4urAXDQ== + body: + encoding: ASCII-8BIT + string: | + { + "ok": true, + "channels": [ + { + "id": "CV5KNMDKN", + "name": "slack-cli", + "is_channel": true, + "is_group": false, + "is_im": false, + "created": 1583868526, + "is_archived": false, + "is_general": false, + "unlinked": 0, + "name_normalized": "slack-cli", + "is_shared": false, + "parent_conversation": null, + "creator": "UV5KNL1UL", + "is_ext_shared": false, + "is_org_shared": false, + "shared_team_ids": [ + "TV5KNL1LL" + ], + "pending_shared": [], + "pending_connected_team_ids": [], + "is_pending_ext_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "topic": { + "value": "", + "creator": "", + "last_set": 0 + }, + "purpose": { + "value": "", + "creator": "", + "last_set": 0 + }, + "previous_names": [], + "num_members": 4 + }, + { + "id": "CV63MEVG8", + "name": "general", + "is_channel": true, + "is_group": false, + "is_im": false, + "created": 1583868525, + "is_archived": false, + "is_general": true, + "unlinked": 0, + "name_normalized": "general", + "is_shared": false, + "parent_conversation": null, + "creator": "UV5KNL1UL", + "is_ext_shared": false, + "is_org_shared": false, + "shared_team_ids": [ + "TV5KNL1LL" + ], + "pending_shared": [], + "pending_connected_team_ids": [], + "is_pending_ext_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "topic": { + "value": "Company-wide announcements and work-based matters", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "purpose": { + "value": "This channel is for workspace-wide communication and announcements. All members are in this channel.", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "previous_names": [], + "num_members": 5 + }, + { + "id": "CV63MEZTJ", + "name": "random", + "is_channel": true, + "is_group": false, + "is_im": false, + "created": 1583868525, + "is_archived": false, + "is_general": false, + "unlinked": 0, + "name_normalized": "random", + "is_shared": false, + "parent_conversation": null, + "creator": "UV5KNL1UL", + "is_ext_shared": false, + "is_org_shared": false, + "shared_team_ids": [ + "TV5KNL1LL" + ], + "pending_shared": [], + "pending_connected_team_ids": [], + "is_pending_ext_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "topic": { + "value": "Non-work banter and water cooler conversation", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "purpose": { + "value": "A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you'd prefer to keep out of more focused work-related channels.", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "previous_names": [], + "num_members": 4 + } + ], + "response_metadata": { + "next_cursor": "" + } + } + http_version: null + recorded_at: Sat, 14 Mar 2020 20:47:59 GMT +recorded_with: VCR 5.1.0 From cdd387574dc9cccdada7f64bbc498cbfa1a6b26f Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sun, 15 Mar 2020 11:58:00 -0700 Subject: [PATCH 27/41] clean up comments and spacing --- lib/recipient.rb | 14 -------------- lib/slack.rb | 1 - lib/user.rb | 1 - 3 files changed, 16 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 337da3ae..9cef2b75 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -22,8 +22,6 @@ def send_message(message) # send a message end - # Recipient.get("conservations.list", QUERY) - def self.get(endpoint) response = HTTParty.get(BASE_URL + endpoint, query: QUERY) if response.code != 200 || response["ok"] == false @@ -33,22 +31,10 @@ def self.get(endpoint) return response end - def details end def self.list_all - # abstract method - # endpoint = "" - # if self == User - # endpoint = "users.list" - # elsif self == Channel - # endpoint = "conversations.list" - # end - - # response = User.get(endpoint, QUERY) - # all = [] - end end diff --git a/lib/slack.rb b/lib/slack.rb index 2a87f286..1e48d4c2 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -8,7 +8,6 @@ def main puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" - # given three options for how to interact with the program: input = "" until input == "quit" puts "\nWhat would you like to do?" diff --git a/lib/user.rb b/lib/user.rb index 236f6db8..7804d724 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -15,7 +15,6 @@ def details return tp self, :slack_id, :name, :real_name, :status_text, :status_emoji end - # When I type list users, I should see a list of all the users in the Slack workspace def self.list_all response = self.get("users.list") all = [] From 9bf4bb480060f5bc1438e0826f88533652c12dc1 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sun, 15 Mar 2020 11:58:24 -0700 Subject: [PATCH 28/41] add select helper method to Workspace --- lib/workspace.rb | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 44dc9097..bbf1cfba 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -12,20 +12,18 @@ def initialize end def select_channel(input) - @channels.each do |channel| - if channel.slack_id.upcase == input.upcase || channel.name.upcase == input.upcase - @selected = channel - break - else - @selected = "" - end - end + select("channel", input) end def select_user(input) - @users.each do |user| - if user.slack_id.upcase == input.upcase || user.name.upcase == input.upcase - @selected = user + select("user", input) + end + + # helper method for select_channel and select_user + def select(type, input) + instance_variable_get("@#{type}s").each do |item| + if item.slack_id.upcase == input.upcase || item.name.upcase == input.upcase + @selected = item break else @selected = "" From 8fd02fac0a2a49aac1edd999815675c80929d687 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sun, 15 Mar 2020 15:23:56 -0700 Subject: [PATCH 29/41] add send_message method to Recipient --- lib/recipient.rb | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 9cef2b75..61aacf14 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -4,8 +4,9 @@ Dotenv.load BASE_URL = "https://slack.com/api/" +TOKEN = ENV["SLACK_TOKEN"] QUERY = { - token: ENV["SLACK_TOKEN"], + token: TOKEN, pretty: 1 } @@ -18,8 +19,22 @@ def initialize(slack_id, name) end def send_message(message) - # response - # send a message + response = HTTParty.post(BASE_URL + "chat.postMessage", { + headers: { + "Content-Type": "application/x-www-form-urlencoded" + }, + query: { + token: TOKEN, + channel: @slack_id, + text: message + } + }) + + if response.code == 200 && response.parsed_response["ok"] + return true + else + raise SlackApiError, "We encountered a problem: #{response["error"]}" + end end def self.get(endpoint) From 78dd46c51fa6490e737c73960042021474c6b462 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sun, 15 Mar 2020 15:24:18 -0700 Subject: [PATCH 30/41] add send_message tests to Channel and User --- test/channel_test.rb | 17 +++++++++++++++++ test/user_test.rb | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/test/channel_test.rb b/test/channel_test.rb index 9ad94bc8..fb1467b8 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -48,4 +48,21 @@ end end end + + describe "send_message" do + it "sends a message to the correct channel" do + VCR.use_cassette("send-message") do + channel = Channel.list_all[0] + response = channel.send_message("the test message") + expect(response).must_equal true + end + end + + it "raises SlackApiError if post request fails" do + VCR.use_cassette("send-message") do + channel = Channel.new("bogus", "bogus_info", "bogus", 5) + expect{channel.send_message("the test message")}.must_raise SlackApiError + end + end + end end diff --git a/test/user_test.rb b/test/user_test.rb index 7cf03464..ddfc035d 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -38,4 +38,21 @@ end end end + + describe "send_message" do + it "sends a message to the correct user" do + VCR.use_cassette("send-message") do + user = User.list_all[0] + response = user.send_message("the test message") + expect(response).must_equal true + end + end + + it "raises SlackApiError if post request fails" do + VCR.use_cassette("send-message") do + user = User.new("bogus", "bogus_info", "bogus", "bogus", "bogus") + expect{user.send_message("the test message")}.must_raise SlackApiError + end + end + end end From bc7221ec95f8ebdeffaaf6c64b3c3af6f70789d1 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sun, 15 Mar 2020 15:25:01 -0700 Subject: [PATCH 31/41] update to fix warning messages appearing in rake --- test/workspace_test.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 3e3a1ea7..15808fbd 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -3,7 +3,6 @@ describe "Workspace" do before do - workspace = '' VCR.use_cassette("workspace-data") do @workspace = Workspace.new end @@ -11,7 +10,6 @@ describe "initialize" do it "initializes Workspace object with an array of users and channels" do - expect(@workspace).must_be_kind_of Workspace expect(@workspace.users).must_be_kind_of Array expect(@workspace.channels).must_be_kind_of Array @@ -74,7 +72,7 @@ it "returns nil if @selected is empty" do @workspace.selected = "" - expect(@workspace.show_details).must_equal nil + expect(@workspace.show_details).must_be_nil end end end From 0536b69d54f474b3683bcd757d369646fc824437 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sun, 15 Mar 2020 15:25:25 -0700 Subject: [PATCH 32/41] add send message option to cli --- lib/slack.rb | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 1e48d4c2..44af83b6 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -32,7 +32,13 @@ def main if !workspace.show_details puts "Please make a selection first" end - when "6", "quit" + when "6", "send message" + if workspace.selected == "" + puts "Please select a recipient before sending a message." + next + end + workspace.selected.send_message(get_message_input) + when "7", "quit" input = "quit" else puts "That's not a valid option, please try again." @@ -43,11 +49,20 @@ def main end def list_options - options = ["list users", "list channels", "select user", "select channel", "details", "quit"] + options = ["list users", "list channels", "select user", "select channel", "details", "send message", "quit"] options.each_with_index do |option, i| puts "#{i + 1}. #{option}" end end +def get_message_input + message = "" + until message != "" + puts "Enter the message you would like to send to the selected recipient: " + message = gets.chomp + end + return message +end + main if __FILE__ == $PROGRAM_NAME \ No newline at end of file From d9844725804023e60f6e61b12e4227a5aec01a9b Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sun, 15 Mar 2020 15:26:19 -0700 Subject: [PATCH 33/41] add cassettes --- test/cassettes/send-message.yml | 1038 +++++++++++++++++++++++++++++++ 1 file changed, 1038 insertions(+) create mode 100644 test/cassettes/send-message.yml diff --git a/test/cassettes/send-message.yml b/test/cassettes/send-message.yml new file mode 100644 index 00000000..c864b6af --- /dev/null +++ b/test/cassettes/send-message.yml @@ -0,0 +1,1038 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/conversations.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '668' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 19:37:16 GMT + Server: + - Apache + X-Slack-Req-Id: + - 4665bf67acba95c40c4e7276eb52fe0b + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-ws1c + X-Cache: + - Miss from cloudfront + Via: + - 1.1 7022a5bbf9872d4a09d63e6cdb457dfe.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - 7KoOJjIRg1xyA8fXvsm81IoliILiQuCyT8MicPZow7WW5VIqrPu3vw== + body: + encoding: ASCII-8BIT + string: | + { + "ok": true, + "channels": [ + { + "id": "CV5KNMDKN", + "name": "slack-cli", + "is_channel": true, + "is_group": false, + "is_im": false, + "created": 1583868526, + "is_archived": false, + "is_general": false, + "unlinked": 0, + "name_normalized": "slack-cli", + "is_shared": false, + "parent_conversation": null, + "creator": "UV5KNL1UL", + "is_ext_shared": false, + "is_org_shared": false, + "shared_team_ids": [ + "TV5KNL1LL" + ], + "pending_shared": [], + "pending_connected_team_ids": [], + "is_pending_ext_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "topic": { + "value": "", + "creator": "", + "last_set": 0 + }, + "purpose": { + "value": "", + "creator": "", + "last_set": 0 + }, + "previous_names": [], + "num_members": 4 + }, + { + "id": "CV63MEVG8", + "name": "general", + "is_channel": true, + "is_group": false, + "is_im": false, + "created": 1583868525, + "is_archived": false, + "is_general": true, + "unlinked": 0, + "name_normalized": "general", + "is_shared": false, + "parent_conversation": null, + "creator": "UV5KNL1UL", + "is_ext_shared": false, + "is_org_shared": false, + "shared_team_ids": [ + "TV5KNL1LL" + ], + "pending_shared": [], + "pending_connected_team_ids": [], + "is_pending_ext_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "topic": { + "value": "Company-wide announcements and work-based matters", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "purpose": { + "value": "This channel is for workspace-wide communication and announcements. All members are in this channel.", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "previous_names": [], + "num_members": 5 + }, + { + "id": "CV63MEZTJ", + "name": "random", + "is_channel": true, + "is_group": false, + "is_im": false, + "created": 1583868525, + "is_archived": false, + "is_general": false, + "unlinked": 0, + "name_normalized": "random", + "is_shared": false, + "parent_conversation": null, + "creator": "UV5KNL1UL", + "is_ext_shared": false, + "is_org_shared": false, + "shared_team_ids": [ + "TV5KNL1LL" + ], + "pending_shared": [], + "pending_connected_team_ids": [], + "is_pending_ext_shared": false, + "is_member": true, + "is_private": false, + "is_mpim": false, + "topic": { + "value": "Non-work banter and water cooler conversation", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "purpose": { + "value": "A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you'd prefer to keep out of more focused work-related channels.", + "creator": "UV5KNL1UL", + "last_set": 1583868525 + }, + "previous_names": [], + "num_members": 4 + } + ], + "response_metadata": { + "next_cursor": "" + } + } + http_version: null + recorded_at: Sun, 15 Mar 2020 19:37:16 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=slack-cli&text=the%20test%20message&token= + body: + encoding: UTF-8 + string: '' + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '327' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 19:39:34 GMT + Server: + - Apache + X-Slack-Req-Id: + - feb726b162caac1999f030a80b8530cd + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-q9vr + X-Cache: + - Miss from cloudfront + Via: + - 1.1 e4d3d5aafc7d7d582423c073065ab563.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - NAJODJN9YOiZ_v2aJAZ78Xux_nCx1uIYVB8CJ3rDSMLRZEZO5Jgcvg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"CV5KNMDKN","ts":"1584301174.000100","message":{"bot_id":"BV8C35QUD","type":"message","text":"the + test message","user":"UV5KNL1UL","ts":"1584301174.000100","team":"TV5KNL1LL","bot_profile":{"id":"BV8C35QUD","deleted":false,"name":"Space + - Jessica - API Project","updated":1583952595,"app_id":"AV8C3U6A3","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"TV5KNL1LL"}}}' + http_version: null + recorded_at: Sun, 15 Mar 2020 19:39:34 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=bogus&text=the%20test%20message&token= + body: + encoding: UTF-8 + string: '' + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '60' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 19:58:21 GMT + Server: + - Apache + X-Slack-Req-Id: + - 75592cf952529462ebc685c3580152b7 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-9vsr + X-Cache: + - Miss from cloudfront + Via: + - 1.1 1a53057db389e96b4ef1bfbc925dde1c.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - LoU3WDPSek9UcRVUnoJbl1bGgeh6e4m81khRoIzX6K5Yem6_zqX_hA== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + http_version: null + recorded_at: Sun, 15 Mar 2020 19:58:21 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=slack-cli&text=&token= + body: + encoding: UTF-8 + string: '' + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '50' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 20:09:24 GMT + Server: + - Apache + X-Slack-Req-Id: + - e2ee9d6094cbe7c3eac8b973e1ebb92b + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-adkr + X-Cache: + - Miss from cloudfront + Via: + - 1.1 d90109c5a0c30f43223e0db85921c5c2.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - lbWLghi6T8jop7MYCwHVAq8TBPsazuHvYd4RIo0BmJbueJChPzOBOg== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"no_text"}' + http_version: null + recorded_at: Sun, 15 Mar 2020 20:09:24 GMT +- request: + method: get + uri: https://slack.com/api/users.list?pretty=1&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '2149' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 22:19:52 GMT + Server: + - Apache + X-Slack-Req-Id: + - 767b527f0c1f433900cce3e281b5c722 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-f54k + X-Cache: + - Miss from cloudfront + Via: + - 1.1 6172bb1a5d00a3b06ae3700570ebe117.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - vYVmhObECuP5CjKVW-bCKlL7sWSbblFjzO57ysm6e6aktVs-JdYOkw== + body: + encoding: ASCII-8BIT + string: | + { + "ok": true, + "members": [ + { + "id": "USLACKBOT", + "team_id": "TV5KNL1LL", + "name": "slackbot", + "deleted": false, + "color": "757575", + "real_name": "Slackbot", + "tz": null, + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Slackbot", + "real_name_normalized": "Slackbot", + "display_name": "Slackbot", + "display_name_normalized": "Slackbot", + "fields": null, + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "sv41d8cd98f0", + "always_active": true, + "first_name": "slackbot", + "last_name": "", + "image_24": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png", + "image_32": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png", + "image_48": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png", + "image_72": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png", + "image_192": "https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png", + "image_512": "https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 0 + }, + { + "id": "UUTE7TU58", + "team_id": "TV5KNL1LL", + "name": "time_ross_api_project", + "deleted": false, + "color": "e0a729", + "real_name": "time_ross_api_project", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "time_ross_api_project", + "real_name_normalized": "time_ross_api_project", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "gde749a9a5c8", + "api_app_id": "AV5PEF4JG", + "always_active": false, + "bot_id": "BUTE7TQ0J", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/de749a9a5c84213ad8a082caa0875cfb.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583872726 + }, + { + "id": "UUV2F0L67", + "team_id": "TV5KNL1LL", + "name": "space_jessica_api_pro", + "deleted": false, + "color": "5b89d5", + "real_name": "space_jessica_api_pro", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jessica_api_pro", + "real_name_normalized": "space_jessica_api_pro", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ga3ae7173902", + "api_app_id": "AV8C3U6A3", + "always_active": false, + "bot_id": "BUWDPRGQH", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/a3ae7173902cbecb0e99d2cc6b83c6d7.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583883147 + }, + { + "id": "UUVR12XJ6", + "team_id": "TV5KNL1LL", + "name": "jeta", + "deleted": false, + "color": "2b6836", + "real_name": "jeta", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "jeta", + "real_name_normalized": "jeta", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g25d2f18ae89", + "api_app_id": "AVAEDFTTR", + "always_active": false, + "bot_id": "BV85DAQP6", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/25d2f18ae898a47e586bb40ad34bc5e0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583959127 + }, + { + "id": "UV5KNL1UL", + "team_id": "TV5KNL1LL", + "name": "jstone4815", + "deleted": false, + "color": "9f69e7", + "real_name": "Jessica Stone", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Jessica Stone", + "real_name_normalized": "Jessica Stone", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g3f062ade197", + "first_name": "Jessica", + "last_name": "Stone", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": true, + "is_owner": true, + "is_primary_owner": true, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583952236, + "has_2fa": false + }, + { + "id": "UV5KWEASY", + "team_id": "TV5KNL1LL", + "name": "syrosalynyu", + "deleted": false, + "color": "4bbe2e", + "real_name": "Ross", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Ross", + "real_name_normalized": "Ross", + "display_name": "Ross", + "display_name_normalized": "Ross", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g1d2dde50ccd", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/1d2dde50ccd771d67a5feded64da7618.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583868729, + "has_2fa": false + }, + { + "id": "UV66H40LV", + "team_id": "TV5KNL1LL", + "name": "jeta.bajrami", + "deleted": false, + "color": "e7392d", + "real_name": "Jeta", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "Jeta", + "real_name_normalized": "Jeta", + "display_name": "Jeta", + "display_name_normalized": "Jeta", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g8bc5d18fcd8", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/8bc5d18fcd88e3a68d59a6b6d236cfa0.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583870734, + "has_2fa": false + }, + { + "id": "UV66MLLSH", + "team_id": "TV5KNL1LL", + "name": "quinruby0", + "deleted": false, + "color": "3c989f", + "real_name": "quin", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "quin", + "real_name_normalized": "quin", + "display_name": "quin", + "display_name_normalized": "quin", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ge32b4d91cd0", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/e32b4d91cd01f34e37eb053a21f7bbd5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": false, + "is_app_user": false, + "updated": 1583870863, + "has_2fa": false + }, + { + "id": "UV678M5JL", + "team_id": "TV5KNL1LL", + "name": "space_jessica_stone_a", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jessica_stone_a", + "real_name_normalized": "space_jessica_stone_a", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "gb05f6b63392", + "api_app_id": "AV66BRT7A", + "always_active": false, + "bot_id": "BV67TC6GM", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/b05f6b6339234b6bd8ecb2268277e56c.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1583880597 + }, + { + "id": "UV69D9Z1B", + "team_id": "TV5KNL1LL", + "name": "space_jeta_api_projec", + "deleted": true, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "space_jeta_api_projec", + "real_name_normalized": "space_jeta_api_projec", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "ga3f6f6c4f3a", + "api_app_id": "AUTECGKJN", + "always_active": false, + "bot_id": "BV84UJ3RD", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/a3f6f6c4f3abb9693b40f6b3b44db2af.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_bot": true, + "is_app_user": false, + "updated": 1583957762 + }, + { + "id": "UV8DATUPQ", + "team_id": "TV5KNL1LL", + "name": "time_quin_api_project", + "deleted": false, + "color": "674b1b", + "real_name": "time_quin_api_project", + "tz": "America\/Los_Angeles", + "tz_label": "Pacific Daylight Time", + "tz_offset": -25200, + "profile": { + "title": "", + "phone": "", + "skype": "", + "real_name": "time_quin_api_project", + "real_name_normalized": "time_quin_api_project", + "display_name": "", + "display_name_normalized": "", + "status_text": "", + "status_emoji": "", + "status_expiration": 0, + "avatar_hash": "g180c140de8a", + "api_app_id": "AV8D2QGFQ", + "always_active": false, + "bot_id": "BUUNT1ZMZ", + "image_24": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-24.png", + "image_32": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-32.png", + "image_48": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-48.png", + "image_72": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-72.png", + "image_192": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-192.png", + "image_512": "https:\/\/secure.gravatar.com\/avatar\/180c140de8a7d8b2b99fdca26e30c7f5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-512.png", + "status_text_canonical": "", + "team": "TV5KNL1LL" + }, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "is_app_user": false, + "updated": 1583871903 + } + ], + "cache_ts": 1584310792, + "response_metadata": { + "next_cursor": "" + } + } + http_version: null + recorded_at: Sun, 15 Mar 2020 22:19:52 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&text=the%20test%20message&token= + body: + encoding: UTF-8 + string: '' + headers: + Content-Type: + - application/x-www-form-urlencoded + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '329' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 22:19:52 GMT + Server: + - Apache + X-Slack-Req-Id: + - c9616b8deeac445da83ffd275d0b14a9 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-jap3 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 caf6806821bc479b28a6f1ce3043b8a6.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - KmMJdndEI4c7O2bwX4OPrGG4AwDPGbZL6rwAfo9KGpAXnBYAYMp0dQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"DUT9W371Q","ts":"1584310792.000400","message":{"bot_id":"BV8C35QUD","type":"message","text":"the + test message","user":"UV5KNL1UL","ts":"1584310792.000400","team":"TV5KNL1LL","bot_profile":{"id":"BV8C35QUD","deleted":false,"name":"Space + - Jessica - API Project","updated":1583952595,"app_id":"AV8C3U6A3","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"TV5KNL1LL"}}}' + http_version: null + recorded_at: Sun, 15 Mar 2020 22:19:52 GMT +recorded_with: VCR 5.1.0 From 9ee627c540f71a66aef18b9c1ccb1ca035b45c6d Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sun, 15 Mar 2020 15:38:54 -0700 Subject: [PATCH 34/41] refactor and clean up code --- lib/channel.rb | 8 +++----- lib/recipient.rb | 6 ++++-- lib/user.rb | 7 ++----- lib/workspace.rb | 3 +-- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 8ad9f95d..f93739f4 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -10,22 +10,20 @@ def initialize(slack_id, name, topic, member_count) end def details + # return details formatted with table_print gem return tp self, :slack_id, :name, :topic, :member_count end def self.list_all response = Channel.get("conversations.list") - all = [] - - response["channels"].each do |channel| - all << Channel.new( + all = response["channels"].map do |channel| + Channel.new( channel["name"], channel["id"], channel["topic"]["value"], channel["num_members"] ) end - return all end diff --git a/lib/recipient.rb b/lib/recipient.rb index 61aacf14..95524299 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -41,15 +41,17 @@ def self.get(endpoint) response = HTTParty.get(BASE_URL + endpoint, query: QUERY) if response.code != 200 || response["ok"] == false raise SlackApiError, "We encountered a problem: #{response["error"]}" + else + return response end - - return response end def details + # implement in child class end def self.list_all + # implement in child class end end diff --git a/lib/user.rb b/lib/user.rb index 7804d724..bb6b53b3 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -17,10 +17,8 @@ def details def self.list_all response = self.get("users.list") - all = [] - - response["members"].each do |member| - all << User.new( + all = response["members"].map do |member| + User.new( member["id"], member["name"], member["real_name"], @@ -28,7 +26,6 @@ def self.list_all member["profile"]["status_emoji"] ) end - return all end diff --git a/lib/workspace.rb b/lib/workspace.rb index bbf1cfba..167e3c9b 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -32,8 +32,7 @@ def select(type, input) end def show_details - return nil if @selected == "" - return @selected.details + return @selected == "" ? nil : @selected.details end def send_message From 5ecd54ec7d39a1a0fd303fcb4df46c2e9191bc4d Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Sun, 15 Mar 2020 15:53:52 -0700 Subject: [PATCH 35/41] break up main into methods for each option --- lib/slack.rb | 70 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 44af83b6..8f6ad0c5 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -2,42 +2,32 @@ require_relative 'workspace' require 'table_print' +WORKSPACE = Workspace.new + def main puts "Welcome to the Ada Slack CLI!" - workspace = Workspace.new - puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" + puts "This workspace has #{WORKSPACE.users.length} users and #{WORKSPACE.channels.length} channels" input = "" until input == "quit" puts "\nWhat would you like to do?" list_options - input = gets.chomp.downcase case input when "1", "list users" - tp workspace.users, :slack_id, :name, :real_name + list_users when "2", "list channels" - tp workspace.channels, :slack_id, :name, :topic, :member_count + list_channels when "3", "select user" - print "\nProvide the name or Slack ID of the user you want to select: " - workspace.select_user(gets.chomp.upcase) - puts "No match found." if workspace.selected == "" + select_user when "4", "select channel" - print "\nProvide the name or Slack ID of the channel you want to select: " - workspace.select_channel(gets.chomp.upcase) - puts "No match found." if workspace.selected == "" + select_channel when "5", "details" - if !workspace.show_details - puts "Please make a selection first" - end + show_details when "6", "send message" - if workspace.selected == "" - puts "Please select a recipient before sending a message." - next - end - workspace.selected.send_message(get_message_input) + send_message when "7", "quit" input = "quit" else @@ -49,20 +39,48 @@ def main end def list_options - options = ["list users", "list channels", "select user", "select channel", "details", "send message", "quit"] - - options.each_with_index do |option, i| - puts "#{i + 1}. #{option}" - end + options = ["list users", "list channels", "select user", "select channel", "details", "send message", "quit"] + options.each_with_index do |option, i| + puts "#{i + 1}. #{option}" + end end -def get_message_input +def send_message + if WORKSPACE.selected == "" + puts "Please select a recipient before sending a message." + return + end + message = "" until message != "" puts "Enter the message you would like to send to the selected recipient: " message = gets.chomp end - return message + WORKSPACE.selected.send_message(message) +end + +def list_users + tp WORKSPACE.users, :slack_id, :name, :real_name +end + +def list_channels + tp WORKSPACE.channels, :slack_id, :name, :topic, :member_count +end + +def select_user + print "\nProvide the name or Slack ID of the user you want to select: " + WORKSPACE.select_user(gets.chomp.upcase) + puts "No match found." if WORKSPACE.selected == "" +end + +def select_channel + print "\nProvide the name or Slack ID of the channel you want to select: " + WORKSPACE.select_channel(gets.chomp.upcase) + puts "No match found." if WORKSPACE.selected == "" +end + +def show_details + puts "Please make a selection first" if !WORKSPACE.show_details end main if __FILE__ == $PROGRAM_NAME \ No newline at end of file From 3a18cb535728e7c2f97777f6a4e65e2b1728379d Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Mon, 16 Mar 2020 00:06:21 -0700 Subject: [PATCH 36/41] add customize_bot option --- lib/slack.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 8f6ad0c5..75cbc555 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -28,7 +28,9 @@ def main show_details when "6", "send message" send_message - when "7", "quit" + when "7", "customize bot" + customize_bot + when "8", "quit" input = "quit" else puts "That's not a valid option, please try again." @@ -39,7 +41,7 @@ def main end def list_options - options = ["list users", "list channels", "select user", "select channel", "details", "send message", "quit"] + options = ["list users", "list channels", "select user", "select channel", "details", "send message", "customize bot", "quit"] options.each_with_index do |option, i| puts "#{i + 1}. #{option}" end @@ -83,4 +85,12 @@ def show_details puts "Please make a selection first" if !WORKSPACE.show_details end +def customize_bot + print "Enter a new name for the bot: " + new_bot_name = gets.chomp + print "Enter a new status emoji for the bot (:emoji_name: format): " + new_status_emoji = gets.chomp + WORKSPACE.customize_bot(new_bot_name, new_status_emoji) +end + main if __FILE__ == $PROGRAM_NAME \ No newline at end of file From fd4f9280c09c48be4ec9b3782d5f347430daaf32 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Mon, 16 Mar 2020 00:06:37 -0700 Subject: [PATCH 37/41] add readers to User --- lib/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/user.rb b/lib/user.rb index bb6b53b3..5036946a 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -2,7 +2,7 @@ require 'table_print' class User < Recipient - attr_reader :real_name, :status_text, :status_emoji, :all_users + attr_reader :slack_id, :name, :real_name, :status_text, :status_emoji def initialize(slack_id, name, real_name, status_text, status_emoji) super(slack_id, name) From 0095a2bcdb25749c88731f57cf146e3a23997182 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Mon, 16 Mar 2020 00:07:24 -0700 Subject: [PATCH 38/41] add customize_bot method to Workspace --- lib/workspace.rb | 35 ++++++++++++++++++++++++++++++++++- test/workspace_test.rb | 22 ++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 167e3c9b..815f9146 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -1,5 +1,6 @@ require_relative "user" require_relative "channel" +require 'json' class Workspace attr_reader :users, :channels @@ -35,6 +36,38 @@ def show_details return @selected == "" ? nil : @selected.details end - def send_message + # https://api.slack.com/methods/users.profile.set + def customize_bot(username, emoji) + response = HTTParty.post(BASE_URL + "users.profile.set", { + headers: { + "Content-Type": "application/json", + }, + query: { + token: TOKEN, + profile: ({"display_name": username, "status_emoji": emoji}).to_json + } + }) + + if response.code != 200 || response["ok"] == false + if response["error"] == "profile_status_set_failed_not_emoji_syntax" + puts "Please try again, and use proper emoji syntax (:emoji_name:)" + elsif response["error"] == "profile_status_set_failed_not_valid_emoji" + puts "Please try again, #{emoji} is not in our library." + else + puts "#{response["error"]}" + end + else + # https://stackoverflow.com/questions/27163085/read-and-write-json-data-from-form-to-file + # opens a file using the path provided + # w+: Read-write - overwrites the existing file or creates new file if no file exists + File.open("./lib/json/bot-settings.json", "w+") do |file| + # generates a JSON file from the argument provided (response) and writes it into the file + file.write(JSON.generate(response)) + end + end + end + + # TODO: As a user, I can see a history of messages sent to the currently selected recipient. If I change recipients, the message list should also change. + def message_history end end \ No newline at end of file diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 15808fbd..4e96bf58 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -75,4 +75,26 @@ expect(@workspace.show_details).must_be_nil end end + + # I'm not sure how to test this + # describe "customize_bot" do + # before do + # VCR.use_cassette("workspace-customize-bot") do + # user = HTTParty.get("https://slack.com/api/users.info?token=xoxp-991668681700-991668681972-981605165810-99a1cdf01edb9e571ee65cc11ea6ebf1&user=UV5KNL1UL") + # @username = user["user"]["name"] + # @emoji = user["user"]["profile"]["status_emoji"] + + # @workspace.customize_bot("jessica bot test", ":rainbow:") + # end + # end + + # it "updates username and emoji" do + # VCR.use_cassette('workspace-customize-bot2') do + # user = HTTParty.get("https://slack.com/api/users.info?token=xoxp-991668681700-991668681972-981605165810-99a1cdf01edb9e571ee65cc11ea6ebf1&user=UV5KNL1UL") + + # expect(user["user"]["name"]).wont_equal @username + # expect(user["user"]["profile"]["status_emoji"]).wont_equal @emoji + # end + # end + # end end From de0f96684b038f0d3d566f304ad7f46e358cf2c4 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Mon, 16 Mar 2020 00:07:45 -0700 Subject: [PATCH 39/41] commit API call data --- lib/json/bot-settings.json | 1 + test/cassettes/workspace-customize-bot.yml | 158 ++++++++++++++++++++ test/cassettes/workspace-customize-bot2.yml | 80 ++++++++++ 3 files changed, 239 insertions(+) create mode 100644 lib/json/bot-settings.json create mode 100644 test/cassettes/workspace-customize-bot.yml create mode 100644 test/cassettes/workspace-customize-bot2.yml diff --git a/lib/json/bot-settings.json b/lib/json/bot-settings.json new file mode 100644 index 00000000..de84e606 --- /dev/null +++ b/lib/json/bot-settings.json @@ -0,0 +1 @@ +"{\"profile\":{\"title\":\"\",\"phone\":\"\",\"skype\":\"\",\"real_name\":\"Jessica Stone\",\"real_name_normalized\":\"Jessica Stone\",\"display_name\":\"Jessica\",\"display_name_normalized\":\"Jessica\",\"fields\":null,\"status_text\":\"\",\"status_emoji\":\":rainbow:\",\"status_expiration\":0,\"avatar_hash\":\"g3f062ade197\",\"email\":\"jstone4815@gmail.com\",\"first_name\":\"Jessica\",\"last_name\":\"Stone\",\"image_24\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/3f062ade197077d689d640dc2c62d378.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png\",\"image_32\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/3f062ade197077d689d640dc2c62d378.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png\",\"image_48\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/3f062ade197077d689d640dc2c62d378.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png\",\"image_72\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/3f062ade197077d689d640dc2c62d378.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png\",\"image_192\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/3f062ade197077d689d640dc2c62d378.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png\",\"image_512\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/3f062ade197077d689d640dc2c62d378.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png\",\"status_text_canonical\":\"\"},\"ok\":true,\"username\":\"jessica\"}" \ No newline at end of file diff --git a/test/cassettes/workspace-customize-bot.yml b/test/cassettes/workspace-customize-bot.yml new file mode 100644 index 00000000..4646a37d --- /dev/null +++ b/test/cassettes/workspace-customize-bot.yml @@ -0,0 +1,158 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.info?token=&user=UV5KNL1UL + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '576' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 06:46:30 GMT + Server: + - Apache + X-Slack-Req-Id: + - b45fef6664c0d4bc8d699c5e3ca6e3f9 + X-Oauth-Scopes: + - identify,channels:read,users:read,users.profile:read,chat:write,users.profile:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-83yj + X-Cache: + - Miss from cloudfront + Via: + - 1.1 7022a5bbf9872d4a09d63e6cdb457dfe.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - z4alBjUGl29UNUYzGsKsOR40Q1McB_MPnNgNzjDu6HT4KnAiGwC3sg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"user":{"id":"UV5KNL1UL","team_id":"TV5KNL1LL","name":"jessica","deleted":false,"color":"9f69e7","real_name":"Jessica + Stone","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Jessica + Stone","real_name_normalized":"Jessica Stone","display_name":"jessica bot + test","display_name_normalized":"jessica bot test","status_text":"","status_emoji":":rainbow:","status_expiration":0,"avatar_hash":"g3f062ade197","first_name":"Jessica","last_name":"Stone","image_24":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1584341007,"has_2fa":false}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 06:46:30 GMT +- request: + method: post + uri: https://slack.com/api/users.profile.set?profile=%7B%22display_name%22:%22jessica%20bot%20test%22,%22status_emoji%22:%22:rainbow:%22%7D&token= + body: + encoding: UTF-8 + string: '' + headers: + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '413' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 06:46:30 GMT + Server: + - Apache + X-Slack-Req-Id: + - b6a2479fedffa41e24ef750e642fb138 + X-Oauth-Scopes: + - identify,channels:read,users:read,users.profile:read,chat:write,users.profile:write + X-Accepted-Oauth-Scopes: + - users.profile:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-coly + X-Cache: + - Miss from cloudfront + Via: + - 1.1 943c6a4d4ee43b18ee91634536f53eae.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - mW5GL-RGwNJ1UGoVaECqEQlbX22De6w9MY9m8BoMm1XzDPclhmw0YA== + body: + encoding: ASCII-8BIT + string: '{"profile":{"title":"","phone":"","skype":"","real_name":"Jessica Stone","real_name_normalized":"Jessica + Stone","display_name":"jessica bot test","display_name_normalized":"jessica + bot test","fields":null,"status_text":"","status_emoji":":rainbow:","status_expiration":0,"avatar_hash":"g3f062ade197","email":"jstone4815@gmail.com","first_name":"Jessica","last_name":"Stone","image_24":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":""},"ok":true,"username":"jessica"}' + http_version: null + recorded_at: Mon, 16 Mar 2020 06:46:30 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/workspace-customize-bot2.yml b/test/cassettes/workspace-customize-bot2.yml new file mode 100644 index 00000000..88b8bff1 --- /dev/null +++ b/test/cassettes/workspace-customize-bot2.yml @@ -0,0 +1,80 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.info?token=&user=UV5KNL1UL + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '576' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 06:46:30 GMT + Server: + - Apache + X-Slack-Req-Id: + - 6f588dacdfadbce004810b55d5d638e1 + X-Oauth-Scopes: + - identify,channels:read,users:read,users.profile:read,chat:write,users.profile:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-tqr5 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 0732be5515ffeda639cfe5f22fb04df6.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - rWC8ujUTsHsrlOvu3_A22QSGiF2m1FV8GzNv-1Eg3jOuI3j3H7nyrQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"user":{"id":"UV5KNL1UL","team_id":"TV5KNL1LL","name":"jessica","deleted":false,"color":"9f69e7","real_name":"Jessica + Stone","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Jessica + Stone","real_name_normalized":"Jessica Stone","display_name":"jessica bot + test","display_name_normalized":"jessica bot test","status_text":"","status_emoji":":rainbow:","status_expiration":0,"avatar_hash":"g3f062ade197","first_name":"Jessica","last_name":"Stone","image_24":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/3f062ade197077d689d640dc2c62d378.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png","status_text_canonical":"","team":"TV5KNL1LL"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1584341190,"has_2fa":false}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 06:46:31 GMT +recorded_with: VCR 5.1.0 From 0d0abc9c6c3aaf8cddbb4e77ae0826a4f451c40a Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Mon, 23 Mar 2020 12:44:21 -0700 Subject: [PATCH 40/41] small re-organization of code --- lib/recipient.rb | 6 +++--- lib/slack.rb | 2 +- lib/workspace.rb | 23 +++++++++++++---------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 95524299..dd1a756c 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -39,10 +39,10 @@ def send_message(message) def self.get(endpoint) response = HTTParty.get(BASE_URL + endpoint, query: QUERY) - if response.code != 200 || response["ok"] == false - raise SlackApiError, "We encountered a problem: #{response["error"]}" - else + if response.code == 200 && response["ok"] return response + else + raise SlackApiError, "We encountered a problem: #{response["error"]}" end end diff --git a/lib/slack.rb b/lib/slack.rb index 75cbc555..904c405d 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -88,7 +88,7 @@ def show_details def customize_bot print "Enter a new name for the bot: " new_bot_name = gets.chomp - print "Enter a new status emoji for the bot (:emoji_name: format): " + print "Enter a new status emoji for the bot (Syntax > :emoji_name:): " new_status_emoji = gets.chomp WORKSPACE.customize_bot(new_bot_name, new_status_emoji) end diff --git a/lib/workspace.rb b/lib/workspace.rb index 815f9146..5a7c13f4 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -44,19 +44,14 @@ def customize_bot(username, emoji) }, query: { token: TOKEN, - profile: ({"display_name": username, "status_emoji": emoji}).to_json + profile: ({ + "display_name": username, + "status_emoji": emoji + }).to_json } }) - if response.code != 200 || response["ok"] == false - if response["error"] == "profile_status_set_failed_not_emoji_syntax" - puts "Please try again, and use proper emoji syntax (:emoji_name:)" - elsif response["error"] == "profile_status_set_failed_not_valid_emoji" - puts "Please try again, #{emoji} is not in our library." - else - puts "#{response["error"]}" - end - else + if response.code == 200 && response["ok"] # https://stackoverflow.com/questions/27163085/read-and-write-json-data-from-form-to-file # opens a file using the path provided # w+: Read-write - overwrites the existing file or creates new file if no file exists @@ -64,6 +59,14 @@ def customize_bot(username, emoji) # generates a JSON file from the argument provided (response) and writes it into the file file.write(JSON.generate(response)) end + else + if response["error"] == "profile_status_set_failed_not_emoji_syntax" + puts "Please try again, and use proper emoji syntax (:emoji_name:)" + elsif response["error"] == "profile_status_set_failed_not_valid_emoji" + puts "Please try again, #{emoji} is not in our library." + else + puts "#{response["error"]}" + end end end From c6dff6aa3fc1485bd12ada6ae0a1708cbb444690 Mon Sep 17 00:00:00 2001 From: Jessica Stone Date: Mon, 23 Mar 2020 12:46:04 -0700 Subject: [PATCH 41/41] add new cassettes --- test/cassettes/channel-details.yml | 64 +++++++++++++ test/cassettes/channels-list-fail.yml | 64 +++++++++++++ test/cassettes/channels-list.yml | 64 +++++++++++++ test/cassettes/send-message.yml | 128 ++++++++++++++++++++++++++ test/cassettes/users-list-fail.yml | 64 +++++++++++++ test/cassettes/users-list.yml | 64 +++++++++++++ test/cassettes/workspace-data.yml | 64 +++++++++++++ 7 files changed, 512 insertions(+) diff --git a/test/cassettes/channel-details.yml b/test/cassettes/channel-details.yml index 2864e076..c8616c39 100644 --- a/test/cassettes/channel-details.yml +++ b/test/cassettes/channel-details.yml @@ -196,4 +196,68 @@ http_interactions: } http_version: null recorded_at: Sat, 14 Mar 2020 20:20:36 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '54' + Connection: + - keep-alive + Date: + - Mon, 23 Mar 2020 19:31:30 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 5cd55865d27197e1ed9e65d647e255ce + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-qsab + X-Cache: + - Miss from cloudfront + Via: + - 1.1 943c6a4d4ee43b18ee91634536f53eae.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - Go1mKq1jyzAD5POXdwFeS91PTtiBZHwAHuea3TWfBh1204amPXlolQ== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"token_revoked"}' + http_version: null + recorded_at: Mon, 23 Mar 2020 19:31:30 GMT recorded_with: VCR 5.1.0 diff --git a/test/cassettes/channels-list-fail.yml b/test/cassettes/channels-list-fail.yml index 5bed17f4..9a03ce8f 100644 --- a/test/cassettes/channels-list-fail.yml +++ b/test/cassettes/channels-list-fail.yml @@ -69,4 +69,68 @@ http_interactions: } http_version: null recorded_at: Sat, 14 Mar 2020 20:20:01 GMT +- request: + method: get + uri: https://slack.com/api/channelsfail.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '83' + Connection: + - keep-alive + Date: + - Mon, 23 Mar 2020 19:31:30 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 2a82f63e90d768d2b50655933f475263 + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-mbv8 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 eab8a154a09e69260fbfe4df90182b2f.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - 3bxQzFXm45-M3XphOotcDs5nCeJczW6iDONxnMS2HluSKVoAdcCWPw== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"unknown_method","req_method":"channelsfail.list"}' + http_version: null + recorded_at: Mon, 23 Mar 2020 19:31:30 GMT recorded_with: VCR 5.1.0 diff --git a/test/cassettes/channels-list.yml b/test/cassettes/channels-list.yml index f2eb30e1..e1f64b00 100644 --- a/test/cassettes/channels-list.yml +++ b/test/cassettes/channels-list.yml @@ -185,4 +185,68 @@ http_interactions: } http_version: null recorded_at: Sat, 14 Mar 2020 20:20:01 GMT +- request: + method: get + uri: https://slack.com/api/channels.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '54' + Connection: + - keep-alive + Date: + - Mon, 23 Mar 2020 19:31:29 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - d76a5715e69eaf20a90e9f36a7474081 + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-t1i0 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 7eb3b782ab09047ce0d11ee03763894c.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - cuY0MisGB2ltzrk4aFYQIjs1NDIjsbRXMuUVHWEvEufM84c5WfnM4Q== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"token_revoked"}' + http_version: null + recorded_at: Mon, 23 Mar 2020 19:31:29 GMT recorded_with: VCR 5.1.0 diff --git a/test/cassettes/send-message.yml b/test/cassettes/send-message.yml index c864b6af..73d1a44c 100644 --- a/test/cassettes/send-message.yml +++ b/test/cassettes/send-message.yml @@ -1035,4 +1035,132 @@ http_interactions: - Jessica - API Project","updated":1583952595,"app_id":"AV8C3U6A3","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"TV5KNL1LL"}}}' http_version: null recorded_at: Sun, 15 Mar 2020 22:19:52 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '54' + Connection: + - keep-alive + Date: + - Mon, 23 Mar 2020 19:31:30 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - a7d7de98803b8507af3e50b118c7f872 + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-9hkc + X-Cache: + - Miss from cloudfront + Via: + - 1.1 7e87179efaa9e3c316bd3d3a74cfded8.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - 0hE9JeODPzGiLjuapVWcMs3q1iw_-Zzh7vLpXIzCG5W2ba2FM9yyhw== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"token_revoked"}' + http_version: null + recorded_at: Mon, 23 Mar 2020 19:31:30 GMT +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '54' + Connection: + - keep-alive + Date: + - Mon, 23 Mar 2020 19:31:30 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - r + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 44a3ee6a7fbe9f69fe5cb1e91115f234 + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-dyrq + X-Cache: + - Miss from cloudfront + Via: + - 1.1 1b74ccf4cb51eacf97a0e6d60ae46a3f.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - sLX8_y3N7UNVC8sFKMmSAwPY5dTZ9DWetU7Owl2AAI2dYbNCz5egBA== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"token_revoked"}' + http_version: null + recorded_at: Mon, 23 Mar 2020 19:31:30 GMT recorded_with: VCR 5.1.0 diff --git a/test/cassettes/users-list-fail.yml b/test/cassettes/users-list-fail.yml index 64b90e99..ae8dd8bc 100644 --- a/test/cassettes/users-list-fail.yml +++ b/test/cassettes/users-list-fail.yml @@ -276,4 +276,68 @@ http_interactions: } http_version: null recorded_at: Sat, 14 Mar 2020 20:10:18 GMT +- request: + method: get + uri: https://slack.com/api/usersfail.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '79' + Connection: + - keep-alive + Date: + - Mon, 23 Mar 2020 19:31:30 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 62751c927b971f3570f95d615e234d46 + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-kmep + X-Cache: + - Miss from cloudfront + Via: + - 1.1 7e87179efaa9e3c316bd3d3a74cfded8.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - SDGM147avfqFVO_uqEQUh3pYye3LMZ_9JJX9Vle-8YjXHFY8s1squQ== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"unknown_method","req_method":"usersfail.list"}' + http_version: null + recorded_at: Mon, 23 Mar 2020 19:31:30 GMT recorded_with: VCR 5.1.0 diff --git a/test/cassettes/users-list.yml b/test/cassettes/users-list.yml index 9e8f84a6..fec1370f 100644 --- a/test/cassettes/users-list.yml +++ b/test/cassettes/users-list.yml @@ -601,4 +601,68 @@ http_interactions: } http_version: null recorded_at: Sat, 14 Mar 2020 20:10:18 GMT +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '54' + Connection: + - keep-alive + Date: + - Mon, 23 Mar 2020 19:31:30 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - e07390dfe6acc47699bac4b5fe6ba2cf + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-thfe + X-Cache: + - Miss from cloudfront + Via: + - 1.1 559326ad73233233a9e52cb9e8601ede.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - LSBuatQCBY2CxY1qlBwzO19I9PEGlzUhI1e1UyOP9ZIZGdSB_JWXaw== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"token_revoked"}' + http_version: null + recorded_at: Mon, 23 Mar 2020 19:31:30 GMT recorded_with: VCR 5.1.0 diff --git a/test/cassettes/workspace-data.yml b/test/cassettes/workspace-data.yml index 5475335e..048af301 100644 --- a/test/cassettes/workspace-data.yml +++ b/test/cassettes/workspace-data.yml @@ -727,4 +727,68 @@ http_interactions: } http_version: null recorded_at: Sat, 14 Mar 2020 20:47:59 GMT +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '54' + Connection: + - keep-alive + Date: + - Mon, 23 Mar 2020 19:31:29 GMT + Server: + - Apache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 6b5fad985ab5558834af1c201e133f63 + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-270m + X-Cache: + - Miss from cloudfront + Via: + - 1.1 caf6806821bc479b28a6f1ce3043b8a6.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - llSMDK5wGvmMHIL8FrBnMq8ALEkKfDwYyXqCyB0mN8RX2N_75Epilw== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"token_revoked"}' + http_version: null + recorded_at: Mon, 23 Mar 2020 19:31:29 GMT recorded_with: VCR 5.1.0