Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0ff76b2
successfully pulled conversation list
kristyh32 Sep 10, 2019
aed7d80
Created class files
brikemp Sep 10, 2019
bb6ee2e
Added shell methods and instance variables
brikemp Sep 10, 2019
a5e85a4
added users.get method, did not test
kristyh32 Sep 10, 2019
4ed4a11
Added test for user self.get method and passed
brikemp Sep 10, 2019
b9b39b6
added channels self.get skeleton
kristyh32 Sep 10, 2019
720959e
created channels self.get method and passed tests
kristyh32 Sep 10, 2019
c0b590c
Users self.list method implemented
brikemp Sep 11, 2019
aa1386b
Initial set up for User self.list method set up
brikemp Sep 11, 2019
c5a3369
fixed users self.get and channel self.get to table print and passed t…
kristyh32 Sep 11, 2019
fa001f1
Selected user and chennel methods implemented, test implemented and p…
brikemp Sep 11, 2019
f421792
moved API call to recipient class and passed tests
kristyh32 Sep 12, 2019
8b98e35
Implemented wave 2 methods and tests, driver code still needed
brikemp Sep 12, 2019
5c43690
implemented send message method, still working on it
kristyh32 Sep 12, 2019
b73e6f7
Merge branch 'master' of https://github.com/kristyh32/slack-cli
kristyh32 Sep 12, 2019
b743d43
Send message method implemented
brikemp Sep 12, 2019
adff0b0
Updating for merge conflicts
brikemp Sep 12, 2019
bfe1cca
resolving merge conflicts
kristyh32 Sep 12, 2019
ac5604c
resolve merge conflicts
kristyh32 Sep 12, 2019
898095b
Worked on driver code in slack.rb
brikemp Sep 13, 2019
e367a73
Fixed merge conflict
brikemp Sep 13, 2019
8319275
updated some driver code and changed permissions to allow authored me…
kristyh32 Sep 13, 2019
2ca4595
Wave 3 methods implemented, driver code for all methods implmeneted a…
brikemp Sep 13, 2019
95407ed
added more messages to slack cli
kristyh32 Sep 13, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions lib/channel.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
require 'httparty'
require_relative 'recipient'
require 'table_print'

class Channel < Recipient
attr_reader :topic, :member_count

def initialize(slack_id, name, topic, member_count)
super(slack_id, name)
@topic = topic
@member_count = member_count
end

def self.get
response = super.find { |response| response["channels"] }
channels = []
response["channels"].each do |channel|

name = channel["name"]
slack_id = channel["id"]
topic = channel["topic"]["value"]
member_count = channel["num_members"]

channels << self.new(slack_id, name, topic, member_count)

end

return channels

end

def details
return "Channel name: #{name}
Slack_ID: #{slack_id}
Topic: #{topic}
Member Count: #{member_count}"
end

def self.list
tp self.get, :name, :slack_id, :topic, :member_count
end

end
63 changes: 63 additions & 0 deletions lib/recipient.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
require 'httparty'
require 'dotenv'

Dotenv.load

class SlackAPIError < StandardError; end

class Recipient

attr_reader :slack_id, :name

BASE_URL = "https://slack.com/api/"
KEY = ENV['SLACK_API_TOKEN']


def initialize(slack_id, name)
@slack_id = slack_id
@name = name
end

def send_message(message, channel)
response = HTTParty.post(
BASE_URL + "chat.postMessage",

body: {
token: KEY,
text: message,
channel: channel,
as_user: true
},
headers: { 'Content-Type' => 'application/x-www-form-urlencoded' }
)
if response["ok"] == true
return true
end
return false if SlackAPIError
end


def self.get
query_param = {
token: KEY
}
users = HTTParty.get(BASE_URL + "users.list", query: query_param)
channels = HTTParty.get(BASE_URL + "conversations.list", query: query_param)
response = [users, channels]

if response[0]["ok"] == true
return response
else
raise SlackAPIError
end
end

def details
raise NotImplementedError
end

def self.list
raise NotImplementedError
end

end
56 changes: 53 additions & 3 deletions lib/slack.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,60 @@
#!/usr/bin/env ruby
require 'dotenv'
require 'httparty'
require 'awesome_print'
require_relative 'workspace'
require 'table_print'

Dotenv.load

def main

puts "Welcome to the Ada Slack CLI!"

# TODO project


workspace = Workspace.new
puts "There are #{workspace.channels.length} channels"
puts "There are #{workspace.users.length} users"

while true
options = ["list channels", "list users", "select channel", "select user", "show details", "send message", "quit"]
puts "\nWhat would you like to do? Your options are: \n list channels\n list users\n select channel\n select user\n show details\n send message\n quit"


selection = gets.chomp
until options.include?(selection.downcase)
puts "I'm sorry, please choose an option or quit"
selection = gets.chomp
end

case selection

when "quit"
break
when "list channels"
Channel.list
when "list users"
User.list
when "select channel"
Channel.list
print "What channel would you like to select: "
input = gets.chomp
puts workspace.select_channel(input)
when "select user"
User.list
print "What user would you like to select: "
input = gets.chomp
puts workspace.select_user(input)
when "show details"
puts workspace.show_details
when 'send message'
if workspace.send_message == false
puts "your message did not send"
else
puts "Your message was successfully sent"
end
end
end

puts "Thank you for using the Ada Slack CLI"
end

Expand Down
5 changes: 5 additions & 0 deletions lib/slackapierror.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class SlackApiError < Exception



end
47 changes: 47 additions & 0 deletions lib/user.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
require 'httparty'
require_relative 'recipient'

class User < Recipient
attr_reader :real_name, :status_text, :status_emoji

def initialize(slack_id, name, real_name, status_text, status_emoji)

super(slack_id, name)
@real_name = real_name
@status_text = status_text
@status_emoji = status_emoji


end

def self.get
response = super.find { |response| response["members"] }
users = []
response["members"].each do |member|

name = member["name"]
slack_id = member["id"]
real_name = member["real_name"]
status_text = member["status_text"]
status_emoji = member["status_emoji"]

users << self.new(slack_id, name, real_name, status_text, status_emoji)

end
return users

end

def details
return "User name: #{name}
Slack_ID: #{slack_id}
Real Name: #{real_name}
Status Text: #{status_text}
Status Emoji: #{status_emoji}"
end

def self.list
tp self.get, :name, :real_name, :slack_id
end

end
60 changes: 60 additions & 0 deletions lib/workspace.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
require_relative 'user'
require_relative 'channel'

class Workspace

attr_reader :users, :channels
attr_accessor :selected

def initialize
@users = User.get
@channels = Channel.get
@selected = nil

end

def select_channel(name_or_id)
channel = channels.find {|channel| channel.slack_id == name_or_id}
if channel == nil
channel = channels.find {|channel| channel.name == name_or_id}
end
if channel == nil
return "Channel does not exist"
end
@selected = channel
return "The channel was selected"
end

def select_user(name_or_id)
user = users.find {|user| user.slack_id == name_or_id}
if user == nil
user = users.find {|user| user.name == name_or_id}
end
if user == nil
return "User does not exist"
end
@selected = user
return "The user was selected"
end

def show_details
if @selected == nil
return "Please select a user or channel."
end
return @selected.details
end

def send_message(message: nil)
if @selected == nil
puts "You must select a user or channel first"
return false
end
channel = @selected.slack_id
if message == nil
puts "Please type your message here:"
message = gets.chomp
end
@selected.send_message(message, channel)

end
end
70 changes: 70 additions & 0 deletions test/cassettes/api_request.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading