slack-smart-bot 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f525626c08342efb47771ac63104863aee616dfe45b428f09c48be94d855cd0
4
- data.tar.gz: 8cf17f028da036a7b15c418b13a5e7f8011bb3359b15b8a1d02c88e6962cb379
3
+ metadata.gz: ce07df2e804e969dd1b1b290444c144e4ebcc753eb438584f2106a21080db797
4
+ data.tar.gz: cd7ed3bc70ed721a7e8661a664c8875ff148a643fedf5e594f5bb624273d7645
5
5
  SHA512:
6
- metadata.gz: 4f6b5afdcfc4cfc199e272a4f0723865d4e68dd9e4242d73d88a3f8d4051575aca028bf53215b0261243743b00f7f467842f484f423daa2a0407cb69ccde59ed
7
- data.tar.gz: c652cdad1b97ab090131f9baf3a9f5f4f6796a8a751052285f38329a390fc8d601dc4170acaefc18479593e8359724212d17cc2b589e1fcabe68103b15d87e81
6
+ metadata.gz: 65f819cb1c85ef79445d096db1964b8986acb3d227b0ba1aa01d0af9af89d665b48e054a770af47f14bb61aac26e4cf5cf1dd32295d0f650181c0027af0a89fd
7
+ data.tar.gz: 01ba1e3085060d40267a492170d099739f61f61a64ad2ef2868c502366ca1d10c07c7059cd86da0addd71fc9c07f028087c852a7cf2d086363ee0eb41084e3b5
data/README.md CHANGED
@@ -8,6 +8,23 @@ The main scope of this ruby gem is to be used internally in your company so team
8
8
 
9
9
  slack-smart-bot can create bots on demand, create shortcuts, run ruby code... just on a chat channel, you can access it just from your mobile phone if you want and run those tests you forgot to run, get the results, restart a server... no limits.
10
10
 
11
+ # Table of Contents
12
+
13
+ - [Installation and configuration](#installation-and-configuration)
14
+ - [Usage](#usage)
15
+ * [creating the MASTER BOT](#creating-the-master-bot)
16
+ * [How to access the smart bot](#how-to-access-the-smart-bot)
17
+ * [Available commands even when the bot is not listening to you](#available-commands-even-when-the-bot-is-not-listening-to-you)
18
+ * [Available commands only when listening to you or on demand or in a private conversation with the Smart Bot](#available-commands-only-when-listening-to-you-or-on-demand-or-in-a-private-conversation-with-the-smart-bot)
19
+ * [Available commands from channels without a Smart Bot](#available-commands-from-channels-without-a-smart-bot)
20
+ * [Creating cloud bots](#creating-cloud-bots)
21
+ * [Tips](#tips)
22
+ + [Send a file](#send-a-file)
23
+ + [Download a file](#download-a-file)
24
+ - [Contributing](#contributing)
25
+ - [License](#license)
26
+
27
+
11
28
  ## Installation and configuration
12
29
 
13
30
  $ gem install slack-smart-bot
@@ -330,6 +347,30 @@ The new cloud bot will be managed by your Master Bot like the others, closing, p
330
347
 
331
348
  This is very useful when you need to run certain processes on a different environment for example on a Windows machine while your Master Bot is on Ubuntu.
332
349
 
350
+ ### Tips
351
+
352
+ #### Send a file
353
+
354
+ ```ruby
355
+ send_file(to, msg, filepath, title, format, type = "text")
356
+ send_file(dest, 'the message', "#{project_folder}/temp/logs_ptBI.log", 'title', 'text/plain', "text")
357
+ send_file(dest, 'the message', "#{project_folder}/temp/example.jpeg", 'title', 'image/jpeg', "jpg")
358
+ ```
359
+
360
+ #### Download a file
361
+
362
+ When uploading a file the message added to 'Add a message about the file' will be the command treated by the bot rule. Then in your rules file:
363
+
364
+ ```ruby
365
+ when /^do something with my file/i
366
+ if !files.nil? and files.size == 1 and files[0].filetype == 'yaml'
367
+ require 'nice_http'
368
+ http = NiceHttp.new(host: "https://files.slack.com", headers: { "Authorization" => "Bearer #{config[:token]}" })
369
+ res = http.get(files[0].url_private_download, save_data: './tmp/')
370
+ # if you want to directly access to the content use: `res.data`
371
+ end
372
+ ```
373
+
333
374
  ## Contributing
334
375
 
335
376
  Bug reports and pull requests are welcome on GitHub at https://github.com/marioruiz/slack-smart-bot.
@@ -209,7 +209,9 @@ class SlackSmartBot
209
209
  end
210
210
  #todo: sometimes data.user is nil, check the problem.
211
211
  @logger.warn "!dest is nil. user: #{data.user}, channel: #{data.channel}, message: #{data.text}" if dest.nil?
212
-
212
+ if !data.files.nil? and data.files.size == 1 and data.text.to_s == '' and data.files[0].filetype == "ruby"
213
+ data.text = 'ruby'
214
+ end
213
215
  typem = :dont_treat
214
216
  if !dest.nil? and !data.text.nil? and !data.text.to_s.match?(/^\s*$/)
215
217
  if data.text.match(/^<@#{config[:nick_id]}>\s(on\s)?<#(\w+)\|(.+)>\s*:?\s*(.*)/im)
@@ -252,7 +254,6 @@ class SlackSmartBot
252
254
  end
253
255
  end
254
256
  end
255
-
256
257
  unless typem == :dont_treat
257
258
  begin
258
259
  command = data.text
@@ -271,7 +272,8 @@ class SlackSmartBot
271
272
  (command.match?(/^(ruby|code)\s*$/) or (command.match?(/^\s*$/) and data.files[0].filetype == "ruby") or
272
273
  (typem==:on_call and data.files[0].filetype == "ruby"))
273
274
  res = Faraday.new("https://files.slack.com", headers: { "Authorization" => "Bearer #{config[:token]}" }).get(data.files[0].url_private)
274
- command = "#{command} ruby #{res.body.to_s.force_encoding("UTF-8")}"
275
+ command += " ruby" if command!='ruby'
276
+ command = "#{command} #{res.body.to_s.force_encoding("UTF-8")}"
275
277
  end
276
278
 
277
279
  if typem == :on_call
@@ -291,7 +293,7 @@ class SlackSmartBot
291
293
  elsif @status != :on
292
294
  respond "The bot in that channel is not :on", dest
293
295
  elsif data.user == channel_found.creator or members.include?(data.user)
294
- res = process_first(user_info.user, command, dest, channel_rules, typem)
296
+ res = process_first(user_info.user, command, dest, channel_rules, typem, data.files)
295
297
  else
296
298
  respond "You need to join the channel <##{channel_found.id}> to be able to use the rules.", dest
297
299
  end
@@ -299,20 +301,20 @@ class SlackSmartBot
299
301
  elsif @questions.keys.include?(user_info.user.name)
300
302
  #todo: @questions key should be the id not the name. change it everywhere
301
303
  dest = data.channel
302
- res = process_first(user_info.user, command, dest, @channel_id, typem)
304
+ res = process_first(user_info.user, command, dest, @channel_id, typem, data.files)
303
305
 
304
306
  elsif ON_MASTER_BOT and typem ==:on_extended and
305
307
  command.size > 0 and command[0] != "-"
306
308
  # to run ruby only from the master bot for the case more than one extended
307
- res = process_first(user_info.user, command, dest, @channel_id, typem)
309
+ res = process_first(user_info.user, command, dest, @channel_id, typem, data.files)
308
310
 
309
311
  elsif !ON_MASTER_BOT and @bots_created[@channel_id].key?(:extended) and
310
312
  @bots_created[@channel_id][:extended].include?(@channels_name[data.channel]) and
311
313
  command.size > 0 and command[0] != "-"
312
- res = process_first(user_info.user, command, dest, @channel_id, typem)
314
+ res = process_first(user_info.user, command, dest, @channel_id, typem, data.files)
313
315
  elsif (dest[0] == "D" or @channel_id == data.channel or data.user == config[:nick_id]) and
314
316
  command.size > 0 and command[0] != "-"
315
- res = process_first(user_info.user, command, dest, data.channel, typem)
317
+ res = process_first(user_info.user, command, dest, data.channel, typem, data.files)
316
318
  # if @botname on #channel_rules: do something
317
319
  end
318
320
  rescue Exception => stack
@@ -325,7 +327,7 @@ class SlackSmartBot
325
327
  client.start!
326
328
  end
327
329
 
328
- def process_first(user, text, dest, dchannel, typem)
330
+ def process_first(user, text, dest, dchannel, typem, files)
329
331
  nick = user.name
330
332
  rules_file = ""
331
333
 
@@ -467,7 +469,11 @@ class SlackSmartBot
467
469
  if defined?(rules)
468
470
  command[0] = "" if command[0] == "!"
469
471
  command.gsub!(/^@\w+:*\s*/, "")
470
- rules(user, command, processed, dest)
472
+ if method(:rules).arity == 4
473
+ rules(user, command, processed, dest)
474
+ else
475
+ rules(user, command, processed, dest, files)
476
+ end
471
477
  else
472
478
  @logger.warn "It seems like rules method is not defined"
473
479
  end
@@ -492,6 +498,11 @@ class SlackSmartBot
492
498
  command[0] = "" if command[0] == "!"
493
499
  command.gsub!(/^@\w+:*\s*/, "")
494
500
  rules(user, command, processed, dest)
501
+ if method(:rules).arity == 4
502
+ rules(user, command, processed, dest)
503
+ else
504
+ rules(user, command, processed, dest, files)
505
+ end
495
506
  else
496
507
  @logger.warn "It seems like rules method is not defined"
497
508
  end
@@ -42,7 +42,7 @@ end
42
42
  # help: `@NAME_OF_BOT THE_COMMAND`
43
43
  # help: `NAME_OF_BOT THE_COMMAND`
44
44
  # help:
45
- def rules(user, command, processed, dest)
45
+ def rules(user, command, processed, dest, files=[])
46
46
  from = user.name
47
47
  display_name = user.profile.display_name
48
48
 
@@ -107,6 +107,13 @@ def rules(user, command, processed, dest)
107
107
  respond "#{display_name}: #{stderr}", dest
108
108
  end
109
109
 
110
+ # Example downloading a file from slack
111
+ # if !files.nil? and files.size == 1 and files[0].filetype == 'yaml'
112
+ # require 'nice_http'
113
+ # http = NiceHttp.new(host: "https://files.slack.com", headers: { "Authorization" => "Bearer #{config[:token]}" })
114
+ # http.get(files[0].url_private_download, save_data: './tmp/')
115
+ # end
116
+
110
117
  # Examples sending a file to slack:
111
118
  # send_file(to, msg, filepath, title, format, type = "text")
112
119
  # send_file(dest, 'the message', "#{project_folder}/temp/logs_ptBI.log", 'title', 'text/plain', "text")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack-smart-bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-29 00:00:00.000000000 Z
11
+ date: 2019-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slack-ruby-client
@@ -30,6 +30,26 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 0.14.4
33
+ - !ruby/object:Gem::Dependency
34
+ name: nice_http
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.7'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.7.19
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.7'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.7.19
33
53
  - !ruby/object:Gem::Dependency
34
54
  name: async-websocket
35
55
  requirement: !ruby/object:Gem::Requirement