slacks 0.4.4 → 0.5.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/slacks/connection.rb +11 -16
- data/lib/slacks/driver.rb +4 -0
- data/lib/slacks/errors.rb +62 -19
- data/lib/slacks/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fa3ec9c05fdbe56d801c27cb5acbe5d879c07f7
|
4
|
+
data.tar.gz: 348dc602d884498580f7d72f9fba829333ab087e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa37ba98e00e52d176b5481cca8793d710cc2f068242e448e1b20052d3da3654503008fd6efecf2a9ec21b230f8a4d4c13fb3fd404a79cb981262e35c5b581fd
|
7
|
+
data.tar.gz: 978735f54f957ee598631502c914f544aa3666f5a87ebe5f85da1c8bdea80e00b7c1331e49e2415f1749d03afab0e023c715b7c7177db5c43a442286ce5b66d1
|
data/lib/slacks/connection.rb
CHANGED
@@ -43,8 +43,6 @@ module Slacks
|
|
43
43
|
params.merge!(attachments: MultiJson.dump(attachments)) if attachments.any?
|
44
44
|
params.merge!(options.select { |key, _| SEND_MESSAGE_PARAMS.member?(key) })
|
45
45
|
api("chat.postMessage", params)
|
46
|
-
rescue Slacks::ResponseError
|
47
|
-
$!.response
|
48
46
|
end
|
49
47
|
alias :say :send_message
|
50
48
|
|
@@ -53,8 +51,6 @@ module Slacks
|
|
53
51
|
channel: to_channel_id(channel),
|
54
52
|
timestamp: ts }
|
55
53
|
api("reactions.get", params)
|
56
|
-
rescue Slacks::ResponseError
|
57
|
-
$!.response
|
58
54
|
end
|
59
55
|
|
60
56
|
def update_message(ts, message, options={})
|
@@ -70,8 +66,6 @@ module Slacks
|
|
70
66
|
params.merge!(options.select { |key, _| [:username, :as_user, :parse, :link_names,
|
71
67
|
:unfurl_links, :unfurl_media, :icon_url, :icon_emoji].member?(key) })
|
72
68
|
api("chat.update", params)
|
73
|
-
rescue Slacks::ResponseError
|
74
|
-
$!.response
|
75
69
|
end
|
76
70
|
|
77
71
|
def add_reaction(emojis, message)
|
@@ -81,22 +75,20 @@ module Slacks
|
|
81
75
|
channel: message.channel.id,
|
82
76
|
timestamp: message.timestamp })
|
83
77
|
end
|
84
|
-
rescue Slacks::ResponseError
|
85
|
-
$!.response
|
86
78
|
end
|
87
79
|
|
88
80
|
def typing_on(channel)
|
89
81
|
websocket.write MultiJson.dump(type: "typing", channel: to_channel_id(channel))
|
90
82
|
end
|
91
83
|
|
84
|
+
def ping
|
85
|
+
websocket.ping
|
86
|
+
end
|
87
|
+
|
92
88
|
|
93
89
|
|
94
90
|
def listen!
|
95
91
|
response = api("rtm.start")
|
96
|
-
unless response["ok"]
|
97
|
-
raise MigrationInProgress if response["error"] == "migration_in_progress"
|
98
|
-
raise ResponseError.new(response, response["error"])
|
99
|
-
end
|
100
92
|
store_context!(response)
|
101
93
|
|
102
94
|
@websocket = Slacks::Driver.new
|
@@ -246,8 +238,6 @@ module Slacks
|
|
246
238
|
|
247
239
|
@groups_by_id = Hash[response.fetch("groups").map { |attrs| [attrs.fetch("id"), attrs] }]
|
248
240
|
@group_id_by_name = Hash[response.fetch("groups").map { |attrs| [attrs.fetch("name"), attrs.fetch("id")] }]
|
249
|
-
rescue KeyError
|
250
|
-
raise ResponseError.new(response, $!.message)
|
251
241
|
end
|
252
242
|
|
253
243
|
|
@@ -276,7 +266,6 @@ module Slacks
|
|
276
266
|
def get_dm_for_user_id(user_id)
|
277
267
|
user_ids_dm_ids[user_id] ||= begin
|
278
268
|
response = api("im.open", user: user_id)
|
279
|
-
raise UnableToDirectMessageError.new(response, user_id) unless response["ok"]
|
280
269
|
response["channel"]["id"]
|
281
270
|
end
|
282
271
|
end
|
@@ -332,7 +321,13 @@ module Slacks
|
|
332
321
|
|
333
322
|
def api(command, options={})
|
334
323
|
response = http.post(command, options.merge(token: token))
|
335
|
-
MultiJson.load(response.body)
|
324
|
+
response = MultiJson.load(response.body)
|
325
|
+
unless response["ok"]
|
326
|
+
response["error"].split(/,\s*/).each do |error_code|
|
327
|
+
raise ::Slacks::Response.fetch(error_code).new(response)
|
328
|
+
end
|
329
|
+
end
|
330
|
+
response
|
336
331
|
|
337
332
|
rescue MultiJson::ParseError
|
338
333
|
$!.additional_information[:response_body] = response.body
|
data/lib/slacks/driver.rb
CHANGED
data/lib/slacks/errors.rb
CHANGED
@@ -1,19 +1,68 @@
|
|
1
1
|
require "slacks/core_ext/exception"
|
2
2
|
|
3
3
|
module Slacks
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
module Response
|
5
|
+
class Error < RuntimeError
|
6
|
+
attr_reader :response
|
7
|
+
|
8
|
+
def initialize(response, message)
|
9
|
+
super message
|
10
|
+
@response = response
|
11
|
+
additional_information[:response] = response
|
12
|
+
end
|
7
13
|
end
|
8
|
-
end
|
9
14
|
|
10
|
-
|
11
|
-
attr_reader :response
|
15
|
+
@_errors = {}
|
12
16
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
def self.fetch(error_code)
|
18
|
+
@_errors.fetch(error_code, ::Slacks::Response::Error)
|
19
|
+
end
|
20
|
+
|
21
|
+
{
|
22
|
+
"account_inactive" => "Authentication token is for a deleted user or team.",
|
23
|
+
"already_reacted" => "The specified item already has the user/reaction combination.",
|
24
|
+
"bad_timestamp" => "Value passed for timestamp was invalid.",
|
25
|
+
"cant_update_message" => "Authenticated user does not have permission to update this message.",
|
26
|
+
"channel_not_found" => "Value passed for channel was invalid.",
|
27
|
+
"edit_window_closed" => "The message cannot be edited due to the team message edit settings",
|
28
|
+
"file_comment_not_found" => "File comment specified by file_comment does not exist.",
|
29
|
+
"file_not_found" => "File specified by file does not exist.",
|
30
|
+
"invalid_arg_name" => "The method was passed an argument whose name falls outside the bounds of common decency. This includes very long names and names with non-alphanumeric characters other than _. If you get this error, it is typically an indication that you have made a very malformed API call.",
|
31
|
+
"invalid_array_arg" => "The method was passed a PHP-style array argument (e.g. with a name like foo[7]). These are never valid with the Slack API.",
|
32
|
+
"invalid_auth" => "Invalid authentication token.",
|
33
|
+
"invalid_charset" => "The method was called via a POST request, but the charset specified in the Content-Type header was invalid. Valid charset names are: utf-8 iso-8859-1.",
|
34
|
+
"invalid_form_data" => "The method was called via a POST request with Content-Type application/x-www-form-urlencoded or multipart/form-data, but the form data was either missing or syntactically invalid.",
|
35
|
+
"invalid_name" => "Value passed for name was invalid.",
|
36
|
+
"invalid_post_type" => "The method was called via a POST request, but the specified Content-Type was invalid. Valid types are: application/json application/x-www-form-urlencoded multipart/form-data text/plain.",
|
37
|
+
"is_archived" => "Channel has been archived.",
|
38
|
+
"message_not_found" => "Message specified by channel and timestamp does not exist.",
|
39
|
+
"migration_in_progress" => "Team is being migrated between servers. See the team_migration_started event documentation for details.",
|
40
|
+
"missing_post_type" => "The method was called via a POST request and included a data payload, but the request did not include a Content-Type header.",
|
41
|
+
"msg_too_long" => "Message text is too long",
|
42
|
+
"no_item_specified" => "file, file_comment, or combination of channel and timestamp was not specified.",
|
43
|
+
"no_text" => "No message text provided",
|
44
|
+
"not_authed" => "No authentication token provided.",
|
45
|
+
"not_in_channel" => "Cannot post user messages to a channel they are not in.",
|
46
|
+
"rate_limited" => "Application has posted too many messages, read the Rate Limit documentation for more information",
|
47
|
+
"request_timeout" => "The method was called via a POST request, but the POST data was either missing or truncated.",
|
48
|
+
"too_many_attachments" => "Too many attachments were provided with this message. A maximum of 100 attachments are allowed on a message.",
|
49
|
+
"too_many_emoji" => "The limit for distinct reactions (i.e emoji) on the item has been reached.",
|
50
|
+
"too_many_reactions" => "The limit for reactions a person may add to the item has been reached."
|
51
|
+
}.each do |error_code, message|
|
52
|
+
class_name = error_code.classify
|
53
|
+
class_name = {
|
54
|
+
"MsgTooLong" => "MessageTooLong"
|
55
|
+
}.fetch(class_name, class_name)
|
56
|
+
|
57
|
+
module_eval <<-RUBY, __FILE__, __LINE__ + 1
|
58
|
+
class #{class_name} < ::Slacks::Response::Error
|
59
|
+
def initialize(response)
|
60
|
+
super response, "#{message}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
@_errors["#{error_code}"] = ::Slacks::Response::#{class_name}
|
65
|
+
RUBY
|
17
66
|
end
|
18
67
|
end
|
19
68
|
|
@@ -24,21 +73,15 @@ module Slacks
|
|
24
73
|
end
|
25
74
|
end
|
26
75
|
|
27
|
-
class AlreadyRespondedError < RuntimeError
|
28
|
-
def initialize(message=nil)
|
29
|
-
super message || "You have already replied to this Slash Command; you can only reply once"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
76
|
class NotInChannelError < RuntimeError
|
34
77
|
def initialize(channel)
|
35
78
|
super "The bot is not in the channel #{channel} and cannot reply"
|
36
79
|
end
|
37
80
|
end
|
38
81
|
|
39
|
-
class
|
40
|
-
def initialize
|
41
|
-
super
|
82
|
+
class MissingTokenError < ArgumentError
|
83
|
+
def initialize
|
84
|
+
super "Unable to connect to Slack; a token has no"
|
42
85
|
end
|
43
86
|
end
|
44
87
|
end
|
data/lib/slacks/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slacks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bob Lail
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket-driver
|
@@ -207,9 +207,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
207
207
|
version: '0'
|
208
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
209
|
requirements:
|
210
|
-
- - "
|
210
|
+
- - ">"
|
211
211
|
- !ruby/object:Gem::Version
|
212
|
-
version:
|
212
|
+
version: 1.3.1
|
213
213
|
requirements: []
|
214
214
|
rubyforge_project:
|
215
215
|
rubygems_version: 2.2.2
|