slack-smart-bot 1.1.2 → 1.2.0

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: e95f2ae2ff93b7b14be4183854b013429cb80d330637540d378d803f81f4de1a
4
- data.tar.gz: d2fec7504227143986243386a573677de783aefac8ea23d5212d3a407ff5aade
3
+ metadata.gz: b75a6cea93322f420ba6e0bf6938609a600d889c4788f0e51e4929a075578d15
4
+ data.tar.gz: 8d3c0476510dd29d2dfac41eabfceb77f9d604100704815c775c3888002ef35c
5
5
  SHA512:
6
- metadata.gz: 52cee63935fe5d5ea229d4c09a78353e8b2da14c6f21a797e16f8aa580bb484f328d998c28a605bc44618236aa10fa668e372b55dc03ab27a9fdf57e28b3fda4
7
- data.tar.gz: 469207f67515b2dab8a451a281bdc316b6482e59469359c60da2b675c5a6e3a10336e29f8421f35c3670927f11c1e0a839aeee0cda3c5c09c3e82264d5300217
6
+ metadata.gz: 946fbf6bca9a5a704b0b7d1d46e12faeb25e6f7f44e99d867d5a28b07cc2441bac0d93e17d3cdae3f081b4acc8b59092b89b2903fcc9eec6282b84b383d6fb8f
7
+ data.tar.gz: c976933c3b0bbb67e9ba86778b2068ff75dd42a7470a1ba48bb08f49ae70415907f560a5454cb3835526732d6a8d3e47b80e68c404d017577428d6f6a791d4ff
data/README.md CHANGED
@@ -204,6 +204,23 @@ Example:
204
204
  >**_Smart-Bot>_** `echo SOMETHING`
205
205
  `repeats SOMETHING`
206
206
 
207
+ When you call a command that is not recognized, you will get suggestions from the Smart Bot.
208
+
209
+ Remember when you add code to your rules you need to specify the help that will be displayed when using `bot help`, `bot rules`
210
+
211
+ For the examples use _ and for the rules `. This is a good example of a Help supplied on rules source code:
212
+
213
+ ```ruby
214
+ # help: `run TYPE tests on LOCATION`
215
+ # help: `execute TYPE tests on LOCATION`
216
+ # help: run the specified tests on the indicated location
217
+ # help: TYPE: api, ui, smoke, load
218
+ # help: LOCATION: customers, db1..db10, global
219
+ # help: Examples:
220
+ # help: _run api tests on customers_
221
+ # help: _run ui tests on customers_
222
+ # help: _execute smoke tests on db1_
223
+ ```
207
224
 
208
225
  ### Bot Management
209
226
  To create a new bot on a channel, run on MASTER CHANNEL: **_`create bot on CHANNEL`_**. The admins of this new bot on that channel will be the MASTER ADMINS, the creator of the bot and the creator of that channel. It will create a new rules file linked to this new bot.
@@ -272,9 +289,12 @@ To see available shortcuts: **_`see shortcuts`_** and to delete a particular sho
272
289
  ### Routines
273
290
  To add specific commands to be run automatically every certain amount of time or a specific time: **_`add routine NAME every NUMBER PERIOD COMMAND`_** or **_`add routine NAME at TIME COMMAND`_**
274
291
 
292
+ If you want to hide the routine executions use `add silent routine`. It won't show the routine name when executing.
293
+
275
294
  Examples:
276
- >**_`add routine run_tests every 3h run tests on customers`_**
277
- >**_`add routine clean_db at 17:05 clean customers temp db`_**
295
+ >**_`add routine run_tests every 3h !run tests on customers`_**
296
+ >**_`add routine clean_db at 17:05 !clean customers temp db`_**
297
+ >**_`add silent routine clean_db at 17:05 !clean customers temp db`_**
278
298
 
279
299
  Also instead of adding a Command to be executed, you can attach a file, then the routine will be created and the attached file will be executed on the criteria specified. Only Master Admins are allowed to use it this way.
280
300
 
@@ -8,6 +8,7 @@ require "fileutils"
8
8
  require "open3"
9
9
  require "nice_http"
10
10
  require "nice_hash"
11
+ require 'cgi'
11
12
 
12
13
  require_relative "slack/smart-bot/comm"
13
14
  require_relative "slack/smart-bot/listen"
@@ -94,7 +95,6 @@ class SlackSmartBot
94
95
 
95
96
  logfile = File.basename(config.rules_file.gsub("_rules_", "_logs_"), ".rb") + ".log"
96
97
  @logger = Logger.new("#{config.path}/logs/#{logfile}")
97
- @logger.info ARGV.inspect #Jal
98
98
 
99
99
  config_log = config.dup
100
100
  config_log.delete(:token)
@@ -41,7 +41,8 @@ def rules(user, command, processed, dest, files = [], rules_file = "")
41
41
  # help: ----------------------------------------------
42
42
  # help: `echo SOMETHING`
43
43
  # help: repeats SOMETHING
44
- # help:
44
+ # help: Examples:
45
+ # help: _echo I am the Smart Bot_
45
46
  when /^echo\s(.+)/i
46
47
  respond $1
47
48
 
@@ -113,14 +113,14 @@ class SlackSmartBot
113
113
  end
114
114
  if config[:simulate]
115
115
  open("#{config.path}/buffer_complete.log", "a") { |f|
116
- f.puts "|#{to}|#{config[:nick_id]}|#{msg}$$$"
116
+ f.puts "|#{channel_id}|#{config[:nick_id]}|#{msg}$$$"
117
117
  }
118
118
  else
119
119
  client.message(channel: channel_id, text: msg, as_user: true)
120
120
  end
121
121
  if config[:testing] and config.on_master_bot
122
122
  open("#{config.path}/buffer.log", "a") { |f|
123
- f.puts "|#{to}|#{config[:nick_id]}|#{msg}"
123
+ f.puts "|#{channel_id}|#{config[:nick_id]}|#{msg}"
124
124
  }
125
125
  end
126
126
  end
@@ -2,12 +2,15 @@ class SlackSmartBot
2
2
  # helpadmin: ----------------------------------------------
3
3
  # helpadmin: `add routine NAME every NUMBER PERIOD COMMAND`
4
4
  # helpadmin: `add routine NAME every NUMBER PERIOD`
5
+ # helpadmin: `add silent routine NAME every NUMBER PERIOD`
5
6
  # helpadmin: `create routine NAME every NUMBER PERIOD`
6
7
  # helpadmin: `add routine NAME at TIME COMMAND`
7
8
  # helpadmin: `add routine NAME at TIME`
9
+ # helpadmin: `add silent routine NAME at TIME`
8
10
  # helpadmin: `create routine NAME at TIME`
9
- # helpadmin: It will execute the command supplied. Only for Admin and Master Admins.
11
+ # helpadmin: It will execute the command/rule supplied. Only for Admin and Master Admins.
10
12
  # helpadmin: If no COMMAND supplied, then it will be necessary to attach a file with the code to be run and add this command as message to the file. ONLY for MASTER ADMINS.
13
+ # helpadmin: In case *silent* provided then when executed will be only displayed if the routine returns a message
11
14
  # helpadmin: NAME: one word to identify the routine
12
15
  # helpadmin: NUMBER: Integer
13
16
  # helpadmin: PERIOD: days, d, hours, h, minutes, mins, min, m, seconds, secs, sec, s
@@ -17,8 +20,9 @@ class SlackSmartBot
17
20
  # helpadmin: _add routine example every 30s ruby puts 'a'_
18
21
  # helpadmin: _add routine example every 3 days ruby puts 'a'_
19
22
  # helpadmin: _add routine example at 17:05 ruby puts 'a'_
23
+ # helpadmin: _create silent routine every 12 hours !Run customer tests_
20
24
  # helpadmin:
21
- def add_routine(dest, from, user, name, type, number_time, period, command_to_run, files)
25
+ def add_routine(dest, from, user, name, type, number_time, period, command_to_run, files, silent)
22
26
  if files.nil? or files.size == 0 or (files.size > 0 and config.masters.include?(from))
23
27
  if config.admins.include?(from)
24
28
  if @routines.key?(@channel_id) && @routines[@channel_id].key?(name)
@@ -70,8 +74,10 @@ class SlackSmartBot
70
74
 
71
75
  @routines[@channel_id] = {} unless @routines.key?(@channel_id)
72
76
  @routines[@channel_id][name] = { channel_name: config.channel, creator: from, creator_id: user.id, status: :on,
73
- every: every, every_in_seconds: every_in_seconds, at: at, file_path: file_path, command: command_to_run.to_s.strip,
74
- next_run: next_run.to_s, dest: dest, last_run: "", last_elapsed: "", running: false }
77
+ every: every, every_in_seconds: every_in_seconds, at: at, file_path: file_path,
78
+ command: command_to_run.to_s.strip, silent: silent,
79
+ next_run: next_run.to_s, dest: dest, last_run: "", last_elapsed: "",
80
+ running: false }
75
81
  update_routines
76
82
  respond "Added routine *`#{name}`* to the channel", dest
77
83
  create_routine_thread(name)
@@ -11,15 +11,12 @@ class SlackSmartBot
11
11
  # helpadmin: _kill routine example_
12
12
  # helpadmin:
13
13
  def remove_routine(dest, from, name)
14
- @logger.info "Start:#{Time.now}"
15
14
  if config.admins.include?(from) #admin user
16
15
  if !config.on_master_bot and dest[0] == "D"
17
16
  respond "It's only possible to remove routines from MASTER channel from a direct message with the bot.", dest
18
17
  elsif @routines.key?(@channel_id) and @routines[@channel_id].key?(name)
19
18
  @routines[@channel_id].delete(name)
20
- @logger.info "Cont:#{Time.now}"
21
19
  update_routines()
22
- @logger.info "end:#{Time.now}"
23
20
  respond "The routine *`#{name}`* has been removed.", dest
24
21
  else
25
22
  respond "There isn't a routine with that name: *`#{name}`*.\nCall `see routines` to see added routines", dest
@@ -27,6 +24,5 @@ class SlackSmartBot
27
24
  else
28
25
  respond "Only admin users can delete routines", dest
29
26
  end
30
- @logger.info "fin:#{Time.now}"
31
27
  end
32
28
  end
@@ -48,6 +48,7 @@ class SlackSmartBot
48
48
  msg << "\tTime consumed on last run: #{v[:last_elapsed]}" unless v[:command] !=''
49
49
  msg << "\tCommand: #{v[:command]}" unless v[:command].to_s.strip == ''
50
50
  msg << "\tFile: #{v[:file_path]}" unless v[:file_path] == ''
51
+ msg << "\tSilent: #{v[:silent]}" unless !v[:silent]
51
52
  respond msg.join("\n"), dest
52
53
  end
53
54
  end
@@ -86,14 +86,15 @@ class SlackSmartBot
86
86
  when /^\s*kill\sbot\son\s<#C\w+\|(.+)>\s*$/i, /^kill\sbot\son\s(.+)\s*$/i
87
87
  channel = $1
88
88
  kill_bot_on_channel(dest, from, channel)
89
- when /^\s*(add|create)\s+routine\s+(\w+)\s+(every)\s+(\d+)\s*(days|hours|minutes|seconds|mins|min|secs|sec|d|h|m|s)\s*(\s.+)?\s*$/i,
90
- /^\s*(add|create)\s+routine\s+(\w+)\s+(at)\s+(\d+:\d+:?\d+?)\s*()(\s.+)?\s*$/i
91
- name = $2.downcase
92
- type = $3
93
- number_time = $4
94
- period = $5
95
- command_to_run = $6
96
- add_routine(dest, from, user, name, type, number_time, period, command_to_run, files)
89
+ when /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+(every)\s+(\d+)\s*(days|hours|minutes|seconds|mins|min|secs|sec|d|h|m|s)\s*(\s.+)?\s*$/i,
90
+ /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+(at)\s+(\d+:\d+:?\d+?)\s*()(\s.+)?\s*$/i
91
+ silent = $2.to_s!=''
92
+ name = $3.downcase
93
+ type = $4
94
+ number_time = $5
95
+ period = $6
96
+ command_to_run = $7
97
+ add_routine(dest, from, user, name, type, number_time, period, command_to_run, files, silent)
97
98
  when /^\s*(kill|delete|remove)\s+routine\s+(\w+)\s*$/i
98
99
  name = $2.downcase
99
100
  remove_routine(dest, from, name)
@@ -1,5 +1,6 @@
1
1
  class SlackSmartBot
2
2
  def treat_message(data)
3
+ data.text = CGI.unescapeHTML(data.text)
3
4
  if config[:testing] and config.on_master_bot
4
5
  open("#{config.path}/buffer.log", "a") { |f|
5
6
  f.puts "|#{data.channel}|#{data.user}|#{data.text}"
@@ -109,21 +110,21 @@ class SlackSmartBot
109
110
  elsif @status != :on
110
111
  respond "The bot in that channel is not :on", dest
111
112
  elsif data.user == channel_found.creator or members.include?(data.user)
112
- res = process_first(user_info.user, command, dest, channel_rules, typem, data.files)
113
+ process_first(user_info.user, command, dest, channel_rules, typem, data.files)
113
114
  else
114
115
  respond "You need to join the channel <##{channel_found.id}> to be able to use the rules.", dest
115
116
  end
116
117
  elsif config.on_master_bot and typem == :on_extended and
117
118
  command.size > 0 and command[0] != "-"
118
119
  # to run ruby only from the master bot for the case more than one extended
119
- res = process_first(user_info.user, command, dest, @channel_id, typem, data.files)
120
+ process_first(user_info.user, command, dest, @channel_id, typem, data.files)
120
121
  elsif !config.on_master_bot and @bots_created[@channel_id].key?(:extended) and
121
122
  @bots_created[@channel_id][:extended].include?(@channels_name[data.channel]) and
122
123
  command.size > 0 and command[0] != "-"
123
- res = process_first(user_info.user, command, dest, @channel_id, typem, data.files)
124
+ process_first(user_info.user, command, dest, @channel_id, typem, data.files)
124
125
  elsif (dest[0] == "D" or @channel_id == data.channel or data.user == config[:nick_id]) and
125
126
  command.size > 0 and command[0] != "-"
126
- res = process_first(user_info.user, command, dest, data.channel, typem, data.files)
127
+ process_first(user_info.user, command, dest, data.channel, typem, data.files)
127
128
  # if @botname on #channel_rules: do something
128
129
  end
129
130
  rescue Exception => stack
@@ -83,6 +83,8 @@ class SlackSmartBot
83
83
  else
84
84
  ruby = ""
85
85
  end
86
+ @routines[@channel_id][name][:silent] = false if !@routines[@channel_id][name].key?(:silent)
87
+
86
88
  if @routines[@channel_id][name][:at] == "" or
87
89
  (@routines[@channel_id][name][:at] != "" and @routines[@channel_id][name][:running] and
88
90
  @routines[@channel_id][name][:next_run] != "" and Time.now.to_s >= @routines[@channel_id][name][:next_run])
@@ -91,20 +93,26 @@ class SlackSmartBot
91
93
  process_to_run = ("cd #{project_folder} &&" + process_to_run) if defined?(project_folder)
92
94
 
93
95
  stdout, stderr, status = Open3.capture3(process_to_run)
96
+ if !@routines[@channel_id][name][:silent] or (@routines[@channel_id][name][:silent] and (stderr!='' or stdout!=''))
97
+ respond "routine *`#{name}`*: #{@routines[@channel_id][name][:file_path]}", @routines[@channel_id][name][:dest]
98
+ end
94
99
  if stderr == ""
95
100
  unless stdout.match?(/\A\s*\z/)
96
- respond "routine *`#{name}`*: #{stdout}", @routines[@channel_id][name][:dest]
101
+ respond stdout, @routines[@channel_id][name][:dest]
97
102
  end
98
103
  else
99
- respond "routine *`#{name}`*: #{stdout} #{stderr}", @routines[@channel_id][name][:dest]
104
+ respond "#{stdout} #{stderr}", @routines[@channel_id][name][:dest]
100
105
  end
101
106
  else #command
102
- respond "routine *`#{name}`*: #{@routines[@channel_id][name][:command]}", @routines[@channel_id][name][:dest]
107
+ if !@routines[@channel_id][name][:silent]
108
+ respond "routine *`#{name}`*: #{@routines[@channel_id][name][:command]}", @routines[@channel_id][name][:dest]
109
+ end
103
110
  started = Time.now
104
- treat_message({ channel: @routines[@channel_id][name][:dest],
105
- user: @routines[@channel_id][name][:creator_id],
106
- text: @routines[@channel_id][name][:command],
107
- files: nil })
111
+ data = { channel: @routines[@channel_id][name][:dest],
112
+ user: @routines[@channel_id][name][:creator_id],
113
+ text: @routines[@channel_id][name][:command],
114
+ files: nil }
115
+ treat_message(data)
108
116
  end
109
117
  # in case the routine was deleted while running the process
110
118
  if !@routines.key?(@channel_id) or !@routines[@channel_id].key?(name)
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: 1.1.2
4
+ version: 1.2.0
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-10-29 00:00:00.000000000 Z
11
+ date: 2019-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slack-ruby-client