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 +4 -4
- data/README.md +41 -0
- data/lib/slack-smart-bot.rb +21 -10
- data/lib/slack-smart-bot_rules.rb +8 -1
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce07df2e804e969dd1b1b290444c144e4ebcc753eb438584f2106a21080db797
|
4
|
+
data.tar.gz: cd7ed3bc70ed721a7e8661a664c8875ff148a643fedf5e594f5bb624273d7645
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
data/lib/slack-smart-bot.rb
CHANGED
@@ -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
|
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
|
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
|
+
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-
|
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
|