slack_cli 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +12 -1
- data/exe/slack +17 -1
- data/lib/slack_cli.rb +33 -11
- data/lib/slack_cli/server.rb +0 -4
- data/lib/slack_cli/version.rb +1 -1
- data/slack_cli.gemspec +2 -0
- data/views/index.erb +1 -1
- metadata +29 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0aadf0d88328d026de5bb4e52e0c48f47c203473
|
4
|
+
data.tar.gz: 20b4357c0850cc350098f6a78919c8be68a7053e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33abb67c37822e408229677ef62c91e47116a23e8ffe8d2142632ef6c47eca5187e7d3c76f06e02545af266ce2e84876905bdfdc11c9fcadc700a97243a6016a
|
7
|
+
data.tar.gz: 61b3091f6abae5650c519924fc16e89e7923ad2103e0d3c2b9f3da491fe792101b71a4ff92e90b8a5f75bfa81245110538091c9950471e290466ddfca5b93e44
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
slack_cli (0.
|
4
|
+
slack_cli (0.4.0)
|
5
5
|
dotenv (~> 2.2)
|
6
|
+
eventmachine (~> 1.2)
|
6
7
|
puma (~> 3.11)
|
7
8
|
rack (~> 2.0)
|
8
9
|
thor (~> 0.20)
|
10
|
+
websocket-eventmachine-client (~> 1.2)
|
9
11
|
|
10
12
|
GEM
|
11
13
|
remote: https://rubygems.org/
|
@@ -13,6 +15,7 @@ GEM
|
|
13
15
|
coderay (1.1.2)
|
14
16
|
diff-lcs (1.3)
|
15
17
|
dotenv (2.2.1)
|
18
|
+
eventmachine (1.2.5)
|
16
19
|
method_source (0.9.0)
|
17
20
|
pry (0.11.3)
|
18
21
|
coderay (~> 1.1.0)
|
@@ -34,6 +37,14 @@ GEM
|
|
34
37
|
rspec-support (~> 3.7.0)
|
35
38
|
rspec-support (3.7.1)
|
36
39
|
thor (0.20.0)
|
40
|
+
websocket (1.2.5)
|
41
|
+
websocket-eventmachine-base (1.2.0)
|
42
|
+
eventmachine (~> 1.0)
|
43
|
+
websocket (~> 1.0)
|
44
|
+
websocket-native (~> 1.0)
|
45
|
+
websocket-eventmachine-client (1.2.0)
|
46
|
+
websocket-eventmachine-base (~> 1.0)
|
47
|
+
websocket-native (1.0.0)
|
37
48
|
|
38
49
|
PLATFORMS
|
39
50
|
ruby
|
data/exe/slack
CHANGED
@@ -23,13 +23,29 @@ class CLI < Thor
|
|
23
23
|
method_option :channel, required: true, aliases: '-c', desc: 'Channel to post the message'
|
24
24
|
def post(*text)
|
25
25
|
handle_class_options
|
26
|
-
SlackCLI.clear_cache unless options[:cache]
|
27
26
|
SlackCLI.post(channel: options[:channel], text: text.join(' '))
|
28
27
|
end
|
29
28
|
|
29
|
+
desc 'rtm', 'Real Time Message Connect'
|
30
|
+
method_option :type, default: ['message'], type: 'array', desc: 'List of message types to retrieve'
|
31
|
+
def rtm
|
32
|
+
handle_class_options
|
33
|
+
types = Set.new(options[:type])
|
34
|
+
|
35
|
+
$stderr.puts({types: types.to_a}.to_json)
|
36
|
+
EM.run {
|
37
|
+
SlackCLI.rtm_connect do |msg|
|
38
|
+
if types.include?(msg['type'])
|
39
|
+
puts msg.to_json
|
40
|
+
end
|
41
|
+
end
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
30
45
|
private
|
31
46
|
|
32
47
|
def handle_class_options
|
48
|
+
SlackCLI.clear_cache unless options[:cache]
|
33
49
|
$DEBUG = options[:debug]
|
34
50
|
end
|
35
51
|
end
|
data/lib/slack_cli.rb
CHANGED
@@ -4,6 +4,8 @@ require 'dotenv/load' # must come first
|
|
4
4
|
require 'cgi'
|
5
5
|
require 'digest/md5'
|
6
6
|
require 'erb'
|
7
|
+
require 'eventmachine'
|
8
|
+
require 'websocket/eventmachine/client'
|
7
9
|
require 'fileutils'
|
8
10
|
require 'json'
|
9
11
|
require 'logger'
|
@@ -48,7 +50,7 @@ module SlackCLI
|
|
48
50
|
end
|
49
51
|
|
50
52
|
def authorize
|
51
|
-
puts "Go to \e[1;32mhttp://localhost:65187/\e[0m to authenticate Slack CLI."
|
53
|
+
$stderr.puts "Go to \e[1;32mhttp://localhost:65187/\e[0m to authenticate Slack CLI."
|
52
54
|
t = Thread.new do
|
53
55
|
Rack::Handler::WEBrick.run(cli_app, webrick_options) do |server|
|
54
56
|
cli_app.webbrick = server
|
@@ -56,10 +58,10 @@ module SlackCLI
|
|
56
58
|
end
|
57
59
|
t.join
|
58
60
|
if File.file?(cli_app.authorization_path)
|
59
|
-
puts "\e[32mSuccessfully authenticated.\e[0m"
|
61
|
+
$stderr.puts "\e[32mSuccessfully authenticated.\e[0m"
|
60
62
|
else
|
61
|
-
puts 'There was a problem authorizing the token!'
|
62
|
-
puts log_string_io.read
|
63
|
+
$stderr.puts 'There was a problem authorizing the token!'
|
64
|
+
$stderr.puts log_string_io.read
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
@@ -87,7 +89,7 @@ module SlackCLI
|
|
87
89
|
|
88
90
|
def slack_get(path:, refresh: true)
|
89
91
|
url = "https://slack.com/api/#{path}"
|
90
|
-
cache_key = Digest::MD5.
|
92
|
+
cache_key = Digest::MD5.hexdigest(url).gsub('=', '')
|
91
93
|
full_cache_path = File.join(cache_path, cache_key)
|
92
94
|
save = false
|
93
95
|
data = if refresh == true || !File.file?(full_cache_path)
|
@@ -103,21 +105,18 @@ module SlackCLI
|
|
103
105
|
|
104
106
|
json = JSON.parse(data)
|
105
107
|
if (error = json['error'])
|
106
|
-
raise Error,
|
108
|
+
raise Error, json.inspect
|
107
109
|
end
|
108
110
|
File.open(full_cache_path, 'w'){|f| f << data} if save
|
109
111
|
json
|
110
112
|
end
|
111
113
|
|
112
|
-
# http.use_ssl = true
|
113
|
-
# http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
114
|
-
# http.set_debug_output($stdout) if $DEBUG
|
115
114
|
def slack_post(path:, json:)
|
116
115
|
uri = URI.parse("https://slack.com/api/#{path}")
|
117
116
|
http = Net::HTTP.new(uri.host, uri.port)
|
118
117
|
http.use_ssl = true
|
119
118
|
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
120
|
-
http.set_debug_output($
|
119
|
+
http.set_debug_output($stderr) if $DEBUG
|
121
120
|
header = {
|
122
121
|
'Authorization' => "Bearer #{access_token}",
|
123
122
|
'Content-Type' => 'application/json'
|
@@ -153,10 +152,33 @@ module SlackCLI
|
|
153
152
|
if place
|
154
153
|
slack_post(
|
155
154
|
path: 'chat.postMessage',
|
156
|
-
json: { channel: place['id'], text: text }
|
155
|
+
json: { channel: place['id'], text: text, as_user: true}
|
157
156
|
)
|
158
157
|
else
|
159
158
|
raise "No channel or user found for `#{channel}`"
|
160
159
|
end
|
161
160
|
end
|
161
|
+
|
162
|
+
def rtm_connect(**params, &block)
|
163
|
+
resp = slack_get(path: 'rtm.connect', refresh: true)
|
164
|
+
$stderr.puts resp.to_json
|
165
|
+
ws = WebSocket::EventMachine::Client.connect(uri: resp['url'])
|
166
|
+
ws.onopen do
|
167
|
+
$stderr.puts({status: 'connected'}.to_json)
|
168
|
+
# ws.send(connect_payload.to_json)
|
169
|
+
end
|
170
|
+
|
171
|
+
ws.onmessage do |msg, type|
|
172
|
+
if block
|
173
|
+
block.call(JSON.parse(msg))
|
174
|
+
else
|
175
|
+
puts msg
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
ws.onclose do |code, reason|
|
180
|
+
$stderr.puts({status: 'disconnected', code: code, reason: reason}.to_json)
|
181
|
+
rtm_connect
|
182
|
+
end
|
183
|
+
end
|
162
184
|
end
|
data/lib/slack_cli/server.rb
CHANGED
data/lib/slack_cli/version.rb
CHANGED
data/slack_cli.gemspec
CHANGED
@@ -28,4 +28,6 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_dependency 'puma', '~> 3.11'
|
29
29
|
spec.add_dependency 'rack', '~> 2.0'
|
30
30
|
spec.add_dependency 'thor', '~> 0.20'
|
31
|
+
spec.add_dependency 'eventmachine', '~> 1.2'
|
32
|
+
spec.add_dependency 'websocket-eventmachine-client', '~> 1.2'
|
31
33
|
end
|
data/views/index.erb
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
<div class="center">
|
43
43
|
<h1>Slack CLI</h1>
|
44
44
|
<img class="center" style="margin-top: -1em; width: 5em; height: 5em;" src="https://slack-files2.s3-us-west-2.amazonaws.com/avatars/2018-02-28/322540051491_005c180801b07413d867_512.png"></img>
|
45
|
-
<a href="https://slack.com/oauth/authorize?client_id=322607959140.322080377537&scope=
|
45
|
+
<a href="https://slack.com/oauth/authorize?client_id=322607959140.322080377537&scope=client"><img alt="Add to Slack" height="40" width="139" src="https://platform.slack-edge.com/img/add_to_slack.png" srcset="https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/add_to_slack@2x.png 2x" /></a>
|
46
46
|
</div>
|
47
47
|
</body>
|
48
48
|
</html>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slack_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Pierce
|
@@ -108,6 +108,34 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0.20'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: eventmachine
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.2'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.2'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: websocket-eventmachine-client
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.2'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.2'
|
111
139
|
description:
|
112
140
|
email:
|
113
141
|
- ddrscott@gmail.com
|