slackbot_frd 0.0.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8e1ae54ee35f6483bf1a209d5c233dc94e2b937
4
- data.tar.gz: c8dbcc68b6a1dfcebb81226c0a16455792acae6b
3
+ metadata.gz: 5e04887e283e05c9f2dfa317752af3b3afc0aff3
4
+ data.tar.gz: 50cd078d62ba3fd848fb971b8e8bc3c7e4b462c8
5
5
  SHA512:
6
- metadata.gz: a180c87abea6a0e14aacd4a280274458cdef7ef224649c2a58b464630d5462f74c0fed7beebd5ea344afeefe2ea87802721fbc2fcd1d9231fba6a2fb5d096c04
7
- data.tar.gz: be3640e1231e738f9e5304096745437bb0759880b6726307c274fbfe193995878fc3485b5bc8bffd2873277f39a28681d88e4055eeabf49b6d90fb01679d1786
6
+ metadata.gz: 8da01ed22e52b72b5fe4f87b3c7c7c561f65e65ed0d4c3214e40e2a585620454d16680aad862ef4f6b35a66b64136397fa29bbf8d6a974fac27366f2cf2b96e6
7
+ data.tar.gz: 6cee701b7c18747ace4a3732df3d866997df8d84ebb1155e4e99d83a72187a4eccc5eda8659444f7a6572adc0a609963e17a47991cd137e6274ea201eef277f8
data/bin/slackbot-frd CHANGED
@@ -43,7 +43,7 @@ class SlackbotFrdBin < Thor
43
43
  end
44
44
  end
45
45
 
46
- desc "new", "Generate a new slackbot_frd project"
46
+ desc "new <project-name>", "Generate a new slackbot_frd project"
47
47
  long_desc <<-LONGDESC
48
48
  new will generate a skeleton for a new slackbot_frd project
49
49
  LONGDESC
@@ -86,6 +86,8 @@ class SlackbotFrdBin < Thor
86
86
  "botdir" : ".",
87
87
  "daemonize" : false,
88
88
  "bots" : [],
89
+ "log_level" : "debug",
90
+ "log_file" : "my-cool-bot.log",
89
91
  "my_bots_config_option" : "<bot-specific-option>"
90
92
  }
91
93
  CONFIG_FILE_SKELETON
@@ -314,18 +316,17 @@ class SlackbotFrdBin < Thor
314
316
  class ExampleBot < SlackbotFrd::Bot
315
317
  def add_callbacks(slack_connection)
316
318
  # When a user sends a message, echo that message back in reverse
317
- slack_connection.on_message do |user, channel, message|
318
- slack_connection.send_message(channel, message.reverse)
319
+ slack_connection.on_message do |user:, channel:, message:, timestamp:|
320
+ slack_connection.send_message(channel: channel, message: message.reverse)
319
321
  end
320
322
 
321
323
  # When a user joins a channel, greet that user as a bot
322
- slack_connection.on_channel_joined do |user, channel|
324
+ slack_connection.on_channel_joined do |user:, channel:|
323
325
  slack_connection.send_message_as_user(
324
- channel,
325
- ":skull: ohai \#{user}, welcome to #\#{channel}! :ghost:",
326
- "Graveyard Greeting Bot",
327
- ":graveyard:",
328
- true
326
+ channel: channel,
327
+ message: ":skull: ohai \#{user}, welcome to #\#{channel}! :ghost:",
328
+ username: "Graveyard Greeting Bot",
329
+ emoji: ":graveyard:"
329
330
  )
330
331
  end
331
332
  end
@@ -91,69 +91,72 @@ module SlackbotFrd
91
91
  @on_disconnected_callbacks.push(block)
92
92
  end
93
93
 
94
- def on_message(user = :any, channel = :any, &block)
94
+ def on_message(user: :any, channel: :any, &block)
95
95
  wrap_user_or_channel_lookup_on_callback('on_message', user, channel) do
96
- @on_message_callbacks.add(user_name_to_id(user), channel_name_to_id(channel), block)
96
+ @on_message_callbacks.add(user: user_name_to_id(user), channel: channel_name_to_id(channel), callback: block)
97
97
  end
98
98
  end
99
99
 
100
- def on_channel_left(user = :any, channel = :any, &block)
100
+ def on_channel_left(user: :any, channel: :any, &block)
101
101
  wrap_user_or_channel_lookup_on_callback('on_message_channel_left', user, channel) do
102
- @on_channel_left_callbacks.add(user_name_to_id(user), channel_name_to_id(channel), block)
102
+ @on_channel_left_callbacks.add(user: user_name_to_id(user), channel: channel_name_to_id(channel), callback: block)
103
103
  end
104
104
  end
105
105
 
106
- def on_channel_joined(user = :any, channel = :any, &block)
106
+ def on_channel_joined(user: :any, channel: :any, &block)
107
107
  wrap_user_or_channel_lookup_on_callback('on_message_channel_joined', user, channel) do
108
108
  u = user_name_to_id(user)
109
109
  c = channel_name_to_id(channel)
110
- @on_channel_joined_callbacks.add(u, c, block)
110
+ @on_channel_joined_callbacks.add(user: u, channel: c, callback: block)
111
111
  end
112
112
  end
113
113
 
114
- def send_message(channel, message)
115
- unless @ws
116
- log_and_add_to_error_file("Cannot send message '#{message}' as user to channel '#{channel}' because not connected to wss stream")
114
+ def send_message(channel:, message:, username: nil, avatar_emoji: nil, avatar_url: nil)
115
+ if username && (avatar_emoji || avatar_url)
116
+ send_message_as_bot(
117
+ channel: channel,
118
+ message: message,
119
+ username: username,
120
+ avatar_emoji: avatar_emoji,
121
+ avatar_url: avatar_url
122
+ )
123
+ else
124
+ send_message_as_user(channel: channel, message: message)
117
125
  end
126
+ end
118
127
 
119
- SlackbotFrd::Log.debug("#{self.class}: Sending message '#{message}' as user to channel '#{channel}'")
128
+ def delete_message(channel:, timestamp:)
129
+ SlackbotFrd::Log.debug("#{self.class}: Deleting message with timestamp '#{timestamp}' from channel '#{channel}'")
120
130
 
121
- begin
122
- resp = @ws.send({
123
- id: event_id,
124
- type: "message",
125
- channel: channel_name_to_id(channel),
126
- text: message
127
- }.to_json)
131
+ resp = SlackbotFrd::SlackMethods::ChatDelete.delete(
132
+ token: @token,
133
+ channel: channel_name_to_id(channel),
134
+ timestamp: timestamp
135
+ )
128
136
 
129
- SlackbotFrd::Log.debug("#{self.class}: Received response: #{resp}")
130
- rescue SocketError => e
131
- log_and_add_to_error_file(socket_error_message(e))
132
- end
137
+ SlackbotFrd::Log.debug("#{self.class}: Received response: #{resp}")
133
138
  end
134
139
 
135
- def send_message_as_user(channel, message, username, avatar, avatar_is_emoji)
136
- SlackbotFrd::Log.debug("#{self.class}: Sending message '#{message}' as user '#{username}' to channel '#{channel}'")
140
+ def post_reaction(name:, channel: nil, timestamp: nil)
141
+ SlackbotFrd::Log.debug("#{self.class}: Posting reaction '#{name}' to channel '#{channel}' with timestamp '#{timestamp}'")
137
142
 
138
- resp = SlackbotFrd::SlackMethods::ChatPostMessage.postMessage(
139
- @token,
140
- channel_name_to_id(channel),
141
- message,
142
- username,
143
- avatar,
144
- avatar_is_emoji
143
+ resp = SlackbotFrd::SlackMethods::ReactionsAdd.add(
144
+ token: @token,
145
+ name: name,
146
+ channel: channel_name_to_id(channel),
147
+ timestamp: timestamp
145
148
  )
146
149
 
147
150
  SlackbotFrd::Log.debug("#{self.class}: Received response: #{resp}")
148
151
  end
149
152
 
150
- def invite_user(user, channel)
153
+ def invite_user(user: user, channel: channel)
151
154
  SlackbotFrd::Log.debug("#{self.class}: Inviting user '#{user}' to channel '#{channel}'")
152
155
 
153
156
  resp = SlackbotFrd::SlackMethods::ChannelsInvite.invite(
154
- @token,
155
- user_name_to_id(user),
156
- channel_name_to_id(channel),
157
+ token: @token,
158
+ user: user_name_to_id(user),
159
+ channel: channel_name_to_id(channel),
157
160
  )
158
161
 
159
162
  SlackbotFrd::Log.debug("#{self.class}: Received response: #{resp}")
@@ -220,6 +223,44 @@ module SlackbotFrd
220
223
  @channel_name_to_id[nc]
221
224
  end
222
225
 
226
+ private
227
+ def send_message_as_user(channel: channel, message: message)
228
+ unless @ws
229
+ log_and_add_to_error_file("Cannot send message '#{message}' as user to channel '#{channel}' because not connected to wss stream")
230
+ end
231
+
232
+ SlackbotFrd::Log.debug("#{self.class}: Sending message '#{message}' as user to channel '#{channel}'")
233
+
234
+ begin
235
+ resp = @ws.send({
236
+ id: event_id,
237
+ type: "message",
238
+ channel: channel_name_to_id(channel),
239
+ text: message
240
+ }.to_json)
241
+
242
+ SlackbotFrd::Log.debug("#{self.class}: Received response: #{resp}")
243
+ rescue SocketError => e
244
+ log_and_add_to_error_file(socket_error_message(e))
245
+ end
246
+ end
247
+
248
+ private
249
+ def send_message_as_bot(channel:, message:, username:, avatar_emoji: nil, avatar_url: nil)
250
+ SlackbotFrd::Log.debug("#{self.class}: Sending message '#{message}' as bot user '#{username}' to channel '#{channel}'")
251
+
252
+ resp = SlackbotFrd::SlackMethods::ChatPostMessage.postMessage(
253
+ token: @token,
254
+ channel: channel_name_to_id(channel),
255
+ message: message,
256
+ username: username,
257
+ avatar_emoji: avatar_emoji,
258
+ avatar_url: avatar_url
259
+ )
260
+
261
+ SlackbotFrd::Log.debug("#{self.class}: Received response: #{resp}")
262
+ end
263
+
223
264
  private
224
265
  def wrap_user_or_channel_lookup_on_callback(callback_name, user, channel)
225
266
  begin
@@ -227,7 +268,7 @@ module SlackbotFrd
227
268
  rescue SlackbotFrd::InvalidChannelError => e
228
269
  log_and_add_to_error_file("Unable to add #{callback_name} callback for channel '#{channel}'. Lookup of channel name to ID failed. Check network connection, and ensure channel exists and is accessible")
229
270
  rescue SlackbotFrd::InvalidUserError => e
230
- log_and_add_to_error_file("Unable to add #{callback_name} callback for user '#{user}'. Lookup of channel name to ID failed. Check network connection and ensure user exists")
271
+ log_and_add_to_error_file("Unable to add #{callback_name} callback for user '#{user}'. Lookup of user name to ID failed. Check network connection and ensure user exists")
231
272
  end
232
273
  end
233
274
 
@@ -268,6 +309,7 @@ module SlackbotFrd
268
309
  user = :bot if message["subtype"] == "bot_message"
269
310
  channel = message["channel"]
270
311
  text = message["text"]
312
+ ts = message["ts"]
271
313
 
272
314
  unless user
273
315
  SlackbotFrd::Log.warn("#{self.class}: Chat message doesn't include user! message: #{message}")
@@ -279,7 +321,7 @@ module SlackbotFrd
279
321
  return
280
322
  end
281
323
 
282
- @on_message_callbacks.where_include_all(user, channel).each do |callback|
324
+ @on_message_callbacks.where_include_all(user: user, channel: channel).each do |callback|
283
325
  # instance_exec allows the user to call send_message and send_message_as_user
284
326
  # without prefixing like this: slack_connection.send_message()
285
327
  #
@@ -287,7 +329,12 @@ module SlackbotFrd
287
329
  # for now we aren't going to do it
288
330
  #
289
331
  #instance_exec(user_id_to_name(user), channel_id_to_name(channel), text, &callback)
290
- callback.call(user_id_to_name(user), channel_id_to_name(channel), text)
332
+ callback.call(
333
+ user: user_id_to_name(user),
334
+ channel: channel_id_to_name(channel),
335
+ message: text,
336
+ timestamp: ts
337
+ )
291
338
  end
292
339
  end
293
340
 
@@ -297,8 +344,8 @@ module SlackbotFrd
297
344
  user = message["user"]
298
345
  user = :bot if message["subtype"] == "bot_message"
299
346
  channel = message["channel"]
300
- @on_channel_joined_callbacks.where_include_all(user, channel).each do |callback|
301
- callback.call(user_id_to_name(user), channel_id_to_name(channel))
347
+ @on_channel_joined_callbacks.where_include_all(user: user, channel: channel).each do |callback|
348
+ callback.call(user: user_id_to_name(user), channel: channel_id_to_name(channel))
302
349
  end
303
350
  end
304
351
 
@@ -308,8 +355,8 @@ module SlackbotFrd
308
355
  user = message["user"]
309
356
  user = :bot if message["subtype"] == "bot_message"
310
357
  channel = message["channel"]
311
- @on_channel_left_callbacks.where_include_all(user, channel).each do |callback|
312
- callback.call(user_id_to_name(user), channel_id_to_name(channel))
358
+ @on_channel_left_callbacks.where_include_all(user: user, channel: channel).each do |callback|
359
+ callback.call(user: user_id_to_name(user), channel: channel_id_to_name(channel))
313
360
  end
314
361
  end
315
362
 
@@ -8,7 +8,7 @@ module SlackbotFrd
8
8
  @conditions[:any][:any] = []
9
9
  end
10
10
 
11
- def init(user, channel)
11
+ def init(user:, channel:)
12
12
  unless user
13
13
  Log::error("#{self.class}: Invalid user '#{user}'")
14
14
  raise InvalidUserError.new
@@ -23,13 +23,13 @@ module SlackbotFrd
23
23
  @conditions[user][channel] ||= []
24
24
  end
25
25
 
26
- def add(user, channel, callback)
27
- init(user, channel)
26
+ def add(user:, channel:, callback:)
27
+ init(user: user, channel: channel)
28
28
  @conditions[user][channel].push(callback)
29
29
  end
30
30
 
31
- def where(user, channel)
32
- init(user, channel)
31
+ def where(user:, channel:)
32
+ init(user: user, channel: channel)
33
33
  @conditions[user][channel] || []
34
34
  end
35
35
 
@@ -37,8 +37,8 @@ module SlackbotFrd
37
37
  @conditions[:any][:any] || []
38
38
  end
39
39
 
40
- def where_include_all(user, channel)
41
- init(user, channel)
40
+ def where_include_all(user:, channel:)
41
+ init(user: user, channel: channel)
42
42
  retval = @conditions[:any][:any].dup || []
43
43
  retval.concat(@conditions[user][:any] || [])
44
44
  retval.concat(@conditions[:any][channel] || [])
@@ -9,11 +9,11 @@ module SlackbotFrd
9
9
 
10
10
  attr_reader :response
11
11
 
12
- def self.members(token, channel)
13
- ChannelsInfo.new(token, channel).connect.members
12
+ def self.members(token:, channel:)
13
+ ChannelsInfo.new(token: token, channel: channel).connect.members
14
14
  end
15
15
 
16
- def initialize(token, channel)
16
+ def initialize(token:, channel:)
17
17
  @token = token
18
18
  @channel = channel
19
19
  end
@@ -9,11 +9,11 @@ module SlackbotFrd
9
9
 
10
10
  attr_reader :response
11
11
 
12
- def self.invite(token, user, channel)
13
- ChannelsInvite.new(token, user, channel).run
12
+ def self.invite(token:, user:, channel:)
13
+ ChannelsInvite.new(token: token, user: user, channel: channel).run
14
14
  end
15
15
 
16
- def initialize(token, user, channel)
16
+ def initialize(token:, user:, channel:)
17
17
  @token = token
18
18
  @user = user
19
19
  @channel = channel
@@ -0,0 +1,33 @@
1
+ require 'httparty'
2
+ require 'json'
3
+
4
+ module SlackbotFrd
5
+ module SlackMethods
6
+ class ChatDelete
7
+ include HTTParty
8
+ base_uri 'https://slack.com/api/chat.delete'
9
+
10
+ def self.delete(token:, channel:, timestamp:)
11
+ r = ChatDelete.new(token: token, channel: channel, timestamp: timestamp)
12
+ r.delete
13
+ end
14
+
15
+ def initialize(token:, channel:, timestamp:)
16
+ @token = token
17
+ @channel = channel
18
+ @timestamp = timestamp
19
+ end
20
+
21
+ def delete
22
+ body = {
23
+ token: @token,
24
+ channel: @channel,
25
+ ts: @timestamp,
26
+ }
27
+
28
+ @response = self.class.post('', :body => body)
29
+ @response
30
+ end
31
+ end
32
+ end
33
+ end
@@ -7,18 +7,25 @@ module SlackbotFrd
7
7
  include HTTParty
8
8
  base_uri 'https://slack.com/api/chat.postMessage'
9
9
 
10
- def self.postMessage(token, channel, message, username = nil, avatar = nil, avatar_is_emoji = nil)
11
- r = ChatPostMessage.new(token, channel, message, username, avatar, avatar_is_emoji)
10
+ def self.postMessage(token:, channel:, message:, username: nil, avatar_emoji: nil, avatar_url: nil)
11
+ r = ChatPostMessage.new(
12
+ token: token,
13
+ channel: channel,
14
+ message: message,
15
+ username: username,
16
+ avatar_emoji: avatar_emoji,
17
+ avatar_url: avatar_url
18
+ )
12
19
  r.postMessage
13
20
  end
14
21
 
15
- def initialize(token, channel, message, username = nil, avatar = nil, avatar_is_emoji = nil)
22
+ def initialize(token:, channel:, message:, username: nil, avatar_emoji: nil, avatar_url: nil)
16
23
  @token = token
17
24
  @channel = channel
18
25
  @message = message
19
26
  @username = username
20
- @avatar = avatar
21
- @avatar_is_emoji = avatar_is_emoji
27
+ @avatar_emoji = avatar_emoji
28
+ @avatar_url = avatar_url
22
29
  end
23
30
 
24
31
  def postMessage
@@ -31,8 +38,8 @@ module SlackbotFrd
31
38
  if @username
32
39
  body.merge!({ username: @username })
33
40
 
34
- if @avatar_is_emoji
35
- body.merge!({ icon_emoji: @avatar })
41
+ if @avatar_emoji
42
+ body.merge!({ icon_emoji: @avatar_emoji })
36
43
  else
37
44
  body.merge!({ icon_url: @avatar })
38
45
  end
@@ -0,0 +1,40 @@
1
+ require 'httparty'
2
+ require 'json'
3
+
4
+ module SlackbotFrd
5
+ module SlackMethods
6
+ class ReactionsAdd
7
+ include HTTParty
8
+ base_uri 'https://slack.com/api/reactions.add'
9
+
10
+ def self.add(token:, name:, channel: nil, timestamp: nil)
11
+ r = ReactionsAdd.new(token: token, name: name, channel: channel, timestamp: timestamp)
12
+ r.add
13
+ end
14
+
15
+ def initialize(token:, name:, channel: nil, timestamp: nil)
16
+ @token = token
17
+ @name = name
18
+ @channel = channel
19
+ @timestamp = timestamp
20
+ end
21
+
22
+ def add
23
+ body = {
24
+ token: @token,
25
+ name: @name
26
+ }
27
+
28
+ if @channel && @timestamp
29
+ body.merge!({
30
+ channel: @channel,
31
+ timestamp: @timestamp
32
+ })
33
+ end
34
+
35
+ @response = self.class.post('', :body => body)
36
+ @response
37
+ end
38
+ end
39
+ end
40
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slackbot_frd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Porter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-09 00:00:00.000000000 Z
11
+ date: 2015-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -175,8 +175,10 @@ files:
175
175
  - lib/slackbot_frd/slack_methods/channels_info.rb
176
176
  - lib/slackbot_frd/slack_methods/channels_invite.rb
177
177
  - lib/slackbot_frd/slack_methods/channels_list.rb
178
+ - lib/slackbot_frd/slack_methods/chat_delete.rb
178
179
  - lib/slackbot_frd/slack_methods/chat_post_message.rb
179
180
  - lib/slackbot_frd/slack_methods/im_channels_list.rb
181
+ - lib/slackbot_frd/slack_methods/reactions_add.rb
180
182
  - lib/slackbot_frd/slack_methods/rtm_start.rb
181
183
  - lib/slackbot_frd/slack_methods/users_list.rb
182
184
  homepage: https://github.com/FreedomBen/slackbot_frd