-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fire: Ayesha/ Blaine - SLACK API Project Submission #23
base: master
Are you sure you want to change the base?
Changes from all commits
74691c8
5445208
d8539b9
3d99dc6
0be66f6
3e254ee
ee76563
8adebf9
fb81ae3
429447c
8821a48
d247239
9287183
d4b615b
be017d7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"url": "https://floobits.com/ayesha/slack-cli" | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
extern | ||
node_modules | ||
tmp | ||
vendor | ||
.idea/workspace.xml | ||
.idea/misc.xml |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,4 +3,4 @@ | |
.DS_Store | ||
|
||
# Ignore environemnt variables | ||
.env | ||
.env |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
require_relative 'recipient' | ||
require 'prettyprint' | ||
|
||
module Slack | ||
|
||
class Channel < Recipient | ||
|
||
BASE_CHANNEL_URL = 'https://slack.com/api/conversations.list' | ||
|
||
attr_reader :topic, :num_members | ||
|
||
def initialize(slack_id, name, topic, num_members) | ||
super(slack_id, name) | ||
@topic = topic | ||
@num_members = num_members | ||
end | ||
|
||
def get_details | ||
return "Channel Name: #{@name}, Topic: #{@topic}, Members: #{@num_members}, SlackID: #{@slack_id}" | ||
end | ||
|
||
def self.get_base_url | ||
BASE_CHANNEL_URL | ||
end | ||
|
||
def self.get_result_key | ||
"channels" | ||
end | ||
|
||
def self.record_from_hash(hash) | ||
Channel.new(hash["id"], hash["name"], hash["topic"]["value"], hash["num_members"]) | ||
end | ||
|
||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
require 'httparty' | ||
require 'prettyprint' | ||
require 'httparty' | ||
require 'dotenv' | ||
|
||
|
||
module Slack | ||
|
||
class SlackError < StandardError; end | ||
|
||
class Recipient | ||
|
||
attr_reader :slack_id, :name | ||
|
||
def initialize(slack_id, name) | ||
@slack_id = slack_id | ||
@name = name | ||
end | ||
|
||
# Returns user/channel data as a hash | ||
def self.list_all | ||
response = self.get | ||
hash_list = response[self.get_result_key] | ||
hash_list.map do |hash| | ||
self.record_from_hash(hash) | ||
end | ||
end | ||
|
||
# Retrieves user/channel data | ||
def self.get | ||
response = HTTParty.get(self.get_base_url, query: { | ||
token: ENV['SLACK_TOKEN'], | ||
}) | ||
sleep(0.25) | ||
if response.code != 200 | ||
raise SlackError, "Something went wrong: #{response.code}" | ||
end | ||
unless response["ok"] | ||
raise SlackError, response["error"] | ||
end | ||
return response | ||
end | ||
|
||
def get_details | ||
@selected.get_details | ||
end | ||
|
||
def post_message(message) | ||
message = HTTParty.post("https://slack.com/api/chat.postMessage", body: { | ||
token: ENV['SLACK_TOKEN'], | ||
channel: @slack_id, | ||
text: message | ||
}) | ||
end | ||
end | ||
end |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,12 +1,101 @@ | ||||||||||||||||||||||||||||
#!/usr/bin/env ruby | ||||||||||||||||||||||||||||
require_relative 'workspace' | ||||||||||||||||||||||||||||
require 'table_print' | ||||||||||||||||||||||||||||
require 'awesome_print' | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
def main | ||||||||||||||||||||||||||||
puts "Welcome to the Ada Slack CLI!" | ||||||||||||||||||||||||||||
workspace = Workspace.new | ||||||||||||||||||||||||||||
Dotenv.load | ||||||||||||||||||||||||||||
# Creates new workspace | ||||||||||||||||||||||||||||
workspace = Slack::Workspace.new | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
# TODO project | ||||||||||||||||||||||||||||
puts 'Welcome to the Ada Slack CLI!' | ||||||||||||||||||||||||||||
puts "We have #{workspace.users.length} members and #{workspace.channels.length} channels." | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
puts "Thank you for using the Ada Slack CLI" | ||||||||||||||||||||||||||||
loop = true | ||||||||||||||||||||||||||||
while loop | ||||||||||||||||||||||||||||
command | ||||||||||||||||||||||||||||
user_input = gets.chomp.to_s.upcase | ||||||||||||||||||||||||||||
case user_input | ||||||||||||||||||||||||||||
when 'LIST USERS' | ||||||||||||||||||||||||||||
tp workspace.list_users, "slack_id", "name", "real_name" | ||||||||||||||||||||||||||||
when 'LIST CHANNELS' | ||||||||||||||||||||||||||||
tp workspace.list_channels,"slack_id", "name", "topic", "num_members" | ||||||||||||||||||||||||||||
when 'SELECT USER' | ||||||||||||||||||||||||||||
handle_select_user(workspace) | ||||||||||||||||||||||||||||
when 'SELECT CHANNEL' | ||||||||||||||||||||||||||||
handle_select_channel(workspace) | ||||||||||||||||||||||||||||
when "DETAILS" | ||||||||||||||||||||||||||||
handle_get_details(workspace) | ||||||||||||||||||||||||||||
when 'SEND MESSAGE' | ||||||||||||||||||||||||||||
handle_send_message(workspace) | ||||||||||||||||||||||||||||
when 'QUIT' | ||||||||||||||||||||||||||||
loop = false | ||||||||||||||||||||||||||||
else | ||||||||||||||||||||||||||||
puts "You can do better. Try again. You need to select a User or Channel." | ||||||||||||||||||||||||||||
loop = true | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
puts 'Thank you for using the Ada Slack CLI' | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
# Command line promp | ||||||||||||||||||||||||||||
def command | ||||||||||||||||||||||||||||
puts 'Please select from the following:' | ||||||||||||||||||||||||||||
puts 'List Users' | ||||||||||||||||||||||||||||
puts 'Select User' | ||||||||||||||||||||||||||||
puts 'List Channels' | ||||||||||||||||||||||||||||
puts 'Select Channel' | ||||||||||||||||||||||||||||
puts 'Details' | ||||||||||||||||||||||||||||
puts 'Send Message' | ||||||||||||||||||||||||||||
puts 'Quit' | ||||||||||||||||||||||||||||
print 'Enter your selection here: >' | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
# Helper method to implement User Selection | ||||||||||||||||||||||||||||
def handle_select_user(workspace) | ||||||||||||||||||||||||||||
puts "Please provide a Name or Slack ID: " | ||||||||||||||||||||||||||||
print ">" | ||||||||||||||||||||||||||||
selected_user = gets.chomp | ||||||||||||||||||||||||||||
selected = workspace.find_user(selected_user) | ||||||||||||||||||||||||||||
if selected != nil | ||||||||||||||||||||||||||||
puts "We found #{selected.name}!" | ||||||||||||||||||||||||||||
else | ||||||||||||||||||||||||||||
puts "Oops, #{selected_user}, does not exist as a user. Try again!" | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
# Helper method to implement Channel Selection | ||||||||||||||||||||||||||||
def handle_select_channel(workspace) | ||||||||||||||||||||||||||||
puts "Please provide a Name or Slack ID: " | ||||||||||||||||||||||||||||
print ">" | ||||||||||||||||||||||||||||
selected_channel = gets.chomp | ||||||||||||||||||||||||||||
selected = workspace.find_channel(selected_channel) | ||||||||||||||||||||||||||||
if selected != nil | ||||||||||||||||||||||||||||
puts "We found #{selected.name}!" | ||||||||||||||||||||||||||||
else | ||||||||||||||||||||||||||||
puts "Oops, #{selected_channel}, does not exist as a user. Try again!" | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
# Helper method responsible for retrieving Selected Details | ||||||||||||||||||||||||||||
def handle_get_details(workspace) | ||||||||||||||||||||||||||||
pp workspace.get_details | ||||||||||||||||||||||||||||
rescue Slack::SlackError | ||||||||||||||||||||||||||||
puts "You need to select a User or Channel." | ||||||||||||||||||||||||||||
puts "Start again." | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
# End users send message retrieval and prompt | ||||||||||||||||||||||||||||
def handle_send_message(workspace) | ||||||||||||||||||||||||||||
begin | ||||||||||||||||||||||||||||
print "Enter the message you would like to send to #{workspace.selected.name}:>" | ||||||||||||||||||||||||||||
end_user_message = gets.chomp | ||||||||||||||||||||||||||||
selected.post_message(end_user_message) | ||||||||||||||||||||||||||||
puts "Your message has been sent!" | ||||||||||||||||||||||||||||
rescue | ||||||||||||||||||||||||||||
puts "You need to select a User or Channel." | ||||||||||||||||||||||||||||
puts "Start again." | ||||||||||||||||||||||||||||
Comment on lines
+93
to
+97
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This piece of code never seems to send my messages, always telling me that I have to select a user or channel, and I suspect that this is because you've made an error with how you're using the keyword
Suggested change
|
||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
end | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
main if __FILE__ == $PROGRAM_NAME |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
require_relative 'recipient' | ||
require 'prettyprint' | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since you required |
||
|
||
module Slack | ||
|
||
class User < Recipient | ||
|
||
BASE_USER_URL = 'https://slack.com/api/users.list?' | ||
|
||
attr_reader :real_name | ||
|
||
def initialize(slack_id, name, real_name) | ||
super(slack_id, name) | ||
@real_name = real_name | ||
end | ||
|
||
def get_details | ||
return "Username: #{@name}, Name: #{@real_name}, SlackID: #{@slack_id}" | ||
end | ||
|
||
def self.get_base_url | ||
BASE_USER_URL | ||
end | ||
|
||
def self.get_result_key | ||
"members" | ||
end | ||
|
||
def self.record_from_hash(hash) | ||
User.new(hash["id"], hash["name"], hash["real_name"]) | ||
end | ||
|
||
end | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure what this is doing? Should this be a template method?
@selected
doesn't exist elsewhere in this class.