slack-smart-bot 1.8.2 → 1.9.1
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 +4 -4
- data/README.md +18 -11
- data/lib/slack-smart-bot.rb +43 -44
- data/lib/slack-smart-bot_rules.rb +6 -6
- data/lib/slack/smart-bot/comm.rb +5 -1
- data/lib/slack/smart-bot/comm/ask.rb +12 -5
- data/lib/slack/smart-bot/comm/dont_understand.rb +1 -1
- data/lib/slack/smart-bot/comm/event_hello.rb +30 -0
- data/lib/slack/smart-bot/comm/get_channel_members.rb +8 -0
- data/lib/slack/smart-bot/comm/get_channels.rb +20 -0
- data/lib/slack/smart-bot/comm/get_user_info.rb +16 -0
- data/lib/slack/smart-bot/comm/react.rb +21 -8
- data/lib/slack/smart-bot/comm/respond.rb +10 -5
- data/lib/slack/smart-bot/comm/send_msg_channel.rb +2 -2
- data/lib/slack/smart-bot/comm/send_msg_user.rb +4 -4
- data/lib/slack/smart-bot/comm/unreact.rb +21 -8
- data/lib/slack/smart-bot/commands.rb +3 -1
- data/lib/slack/smart-bot/commands/general/bot_help.rb +16 -3
- data/lib/slack/smart-bot/commands/general/bot_stats.rb +313 -0
- data/lib/slack/smart-bot/commands/general/bot_status.rb +1 -1
- data/lib/slack/smart-bot/commands/general/bye_bot.rb +1 -1
- data/lib/slack/smart-bot/commands/general/hi_bot.rb +1 -1
- data/lib/slack/smart-bot/commands/general/use_rules.rb +2 -6
- data/lib/slack/smart-bot/commands/general/whats_new.rb +19 -0
- data/lib/slack/smart-bot/commands/on_bot/add_shortcut.rb +65 -33
- data/lib/slack/smart-bot/commands/on_bot/admin/extend_rules.rb +3 -7
- data/lib/slack/smart-bot/commands/on_bot/admin/pause_bot.rb +1 -0
- data/lib/slack/smart-bot/commands/on_bot/admin/see_routines.rb +8 -2
- data/lib/slack/smart-bot/commands/on_bot/admin/start_bot.rb +1 -0
- data/lib/slack/smart-bot/commands/on_bot/delete_repl.rb +1 -1
- data/lib/slack/smart-bot/commands/on_bot/delete_shortcut.rb +52 -21
- data/lib/slack/smart-bot/commands/on_bot/get_repl.rb +5 -5
- data/lib/slack/smart-bot/commands/on_bot/repl.rb +50 -18
- data/lib/slack/smart-bot/commands/on_bot/ruby_code.rb +34 -9
- data/lib/slack/smart-bot/commands/on_bot/run_repl.rb +2 -3
- data/lib/slack/smart-bot/commands/on_bot/see_repls.rb +1 -1
- data/lib/slack/smart-bot/commands/on_bot/see_shortcuts.rb +27 -9
- data/lib/slack/smart-bot/commands/on_extended/bot_rules.rb +14 -1
- data/lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb +3 -3
- data/lib/slack/smart-bot/commands/on_master/admin_master/notify_message.rb +1 -1
- data/lib/slack/smart-bot/commands/on_master/admin_master/set_maintenance.rb +41 -0
- data/lib/slack/smart-bot/commands/on_master/create_bot.rb +4 -8
- data/lib/slack/smart-bot/listen.rb +6 -5
- data/lib/slack/smart-bot/process.rb +227 -188
- data/lib/slack/smart-bot/process_first.rb +104 -87
- data/lib/slack/smart-bot/treat_message.rb +98 -38
- data/lib/slack/smart-bot/utils.rb +2 -0
- data/lib/slack/smart-bot/utils/answer.rb +18 -0
- data/lib/slack/smart-bot/utils/answer_delete.rb +15 -0
- data/lib/slack/smart-bot/utils/build_help.rb +57 -5
- data/lib/slack/smart-bot/utils/create_routine_thread.rb +11 -2
- data/lib/slack/smart-bot/utils/get_channels_name_and_id.rb +1 -7
- data/lib/slack/smart-bot/utils/get_help.rb +79 -17
- data/lib/slack/smart-bot/utils/save_stats.rb +21 -8
- data/lib/slack/smart-bot/utils/update_shortcuts_file.rb +6 -0
- data/whats_new.txt +18 -0
- metadata +21 -12
- data/lib/slack/smart-bot/commands/on_bot/admin_master/bot_stats.rb +0 -195
@@ -0,0 +1,18 @@
|
|
1
|
+
class SlackSmartBot
|
2
|
+
def answer(from = Thread.current[:user].name, dest = Thread.current[:dest])
|
3
|
+
if @answer.key?(from)
|
4
|
+
if Thread.current[:on_thread]
|
5
|
+
dest = Thread.current[:thread_ts]
|
6
|
+
end
|
7
|
+
if @answer[from].key?(dest)
|
8
|
+
return @answer[from][dest]
|
9
|
+
else
|
10
|
+
return ''
|
11
|
+
end
|
12
|
+
else
|
13
|
+
return ''
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class SlackSmartBot
|
2
|
+
def answer_delete(from = Thread.current[:user].name, dest = Thread.current[:dest])
|
3
|
+
if @answer.key?(from)
|
4
|
+
if Thread.current[:on_thread]
|
5
|
+
dest = Thread.current[:thread_ts]
|
6
|
+
end
|
7
|
+
if @answer[from].key?(dest)
|
8
|
+
@answer[from].delete(dest)
|
9
|
+
end
|
10
|
+
@questions.delete(from) # to be backwards compatible #todo: remove when 2.0
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
@@ -1,12 +1,64 @@
|
|
1
1
|
class SlackSmartBot
|
2
2
|
|
3
|
-
def build_help(path)
|
4
|
-
help_message = {}
|
5
|
-
Dir
|
3
|
+
def build_help(path, expanded)
|
4
|
+
help_message = {normal: {}, admin: {}, master: {}}
|
5
|
+
if Dir.exist?(path)
|
6
|
+
files = Dir["#{path}/*"]
|
7
|
+
elsif File.exist?(path)
|
8
|
+
files = [path]
|
9
|
+
else
|
10
|
+
return help_message
|
11
|
+
end
|
12
|
+
|
13
|
+
files.each do |t|
|
6
14
|
if Dir.exist?(t)
|
7
|
-
|
15
|
+
res = build_help(t, expanded)
|
16
|
+
help_message[:master][t.scan(/\/(\w+)$/).join.to_sym] = res[:master]
|
17
|
+
help_message[:admin][t.scan(/\/(\w+)$/).join.to_sym] = res[:admin]
|
18
|
+
help_message[:normal][t.scan(/\/(\w+)$/).join.to_sym] = res[:normal]
|
8
19
|
else
|
9
|
-
|
20
|
+
lines = IO.readlines(t)
|
21
|
+
data = {master:{}, admin:{}, normal:{}}
|
22
|
+
data.master = lines.join #normal user help
|
23
|
+
data.admin = lines.reject {|l| l.match?(/^\s*#\s*help\s*master\s*:.+$/i)}.join #not master help
|
24
|
+
data.normal = lines.reject {|l| l.match?(/^\s*#\s*help\s*(admin|master)\s*:.+$/i)}.join #not admin or master help
|
25
|
+
if expanded
|
26
|
+
help_message[:master][t.scan(/\/(\w+)\.rb$/).join.to_sym] = data.master.scan(/#\s*help\s*\w*:(.*)/i).join("\n")
|
27
|
+
help_message[:admin][t.scan(/\/(\w+)\.rb$/).join.to_sym] = data.admin.scan(/#\s*help\s*\w*:(.*)/i).join("\n")
|
28
|
+
help_message[:normal][t.scan(/\/(\w+)\.rb$/).join.to_sym] = data.normal.scan(/#\s*help\s*\w*:(.*)/i).join("\n")
|
29
|
+
else
|
30
|
+
data.keys.each do |key|
|
31
|
+
res = data[key].scan(/#\s*help\s*\w*:(.*)/i).join("\n")
|
32
|
+
resf = ""
|
33
|
+
command_done = false
|
34
|
+
explanation_done = false
|
35
|
+
example_done = false
|
36
|
+
|
37
|
+
res.split("\n").each do |line|
|
38
|
+
if line.match?(/^\s*======+$/)
|
39
|
+
command_done = true
|
40
|
+
explanation_done = true
|
41
|
+
example_done = true
|
42
|
+
elsif line.match?(/^\s*\-\-\-\-+\s*$/i)
|
43
|
+
resf += "\n#{line}"
|
44
|
+
command_done = false
|
45
|
+
explanation_done = false
|
46
|
+
example_done = false
|
47
|
+
elsif !command_done and line.match?(/^\s*`.+`\s*/i)
|
48
|
+
resf += "\n#{line}"
|
49
|
+
command_done = true
|
50
|
+
elsif !explanation_done and line.match?(/^\s+[^`].+\s*/i)
|
51
|
+
resf += "\n#{line}"
|
52
|
+
explanation_done = true
|
53
|
+
elsif !example_done and line.match?(/^\s*_.+_\s*/i)
|
54
|
+
resf += "\n Example: #{line}"
|
55
|
+
example_done = true
|
56
|
+
end
|
57
|
+
end
|
58
|
+
resf += "\n\n"
|
59
|
+
help_message[key][t.scan(/\/(\w+)\.rb$/).join.to_sym] = resf
|
60
|
+
end
|
61
|
+
end
|
10
62
|
end
|
11
63
|
end
|
12
64
|
return help_message
|
@@ -19,7 +19,15 @@ class SlackSmartBot
|
|
19
19
|
if @routines[@channel_id][name][:file_path] != ""
|
20
20
|
process_to_run = "#{ruby}#{Dir.pwd}#{@routines[@channel_id][name][:file_path][1..-1]}"
|
21
21
|
process_to_run = ("cd #{project_folder} &&" + process_to_run) if defined?(project_folder)
|
22
|
-
|
22
|
+
data = {
|
23
|
+
dest: @routines[@channel_id][name][:dest],
|
24
|
+
typem: 'routine_file',
|
25
|
+
user: {id: @routines[@channel_id][name][:creator_id], name: @routines[@channel_id][name][:creator]},
|
26
|
+
files: false,
|
27
|
+
command: @routines[@channel_id][name][:file_path],
|
28
|
+
routine: true
|
29
|
+
}
|
30
|
+
save_stats(name, data: data)
|
23
31
|
stdout, stderr, status = Open3.capture3(process_to_run)
|
24
32
|
if !@routines[@channel_id][name][:silent] or (@routines[@channel_id][name][:silent] and
|
25
33
|
(!stderr.match?(/\A\s*\z/) or !stdout.match?(/\A\s*\z/)))
|
@@ -49,7 +57,8 @@ class SlackSmartBot
|
|
49
57
|
dest: @routines[@channel_id][name][:dest],
|
50
58
|
user: @routines[@channel_id][name][:creator_id],
|
51
59
|
text: @routines[@channel_id][name][:command],
|
52
|
-
files: nil
|
60
|
+
files: nil,
|
61
|
+
routine: true }
|
53
62
|
treat_message(data)
|
54
63
|
end
|
55
64
|
# in case the routine was deleted while running the process
|
@@ -1,13 +1,7 @@
|
|
1
1
|
class SlackSmartBot
|
2
2
|
|
3
3
|
def get_channels_name_and_id
|
4
|
-
|
5
|
-
channels = client.web_client.conversations_list(
|
6
|
-
types: "private_channel,public_channel",
|
7
|
-
limit: "1000",
|
8
|
-
exclude_archived: "true",
|
9
|
-
).channels
|
10
|
-
|
4
|
+
channels = get_channels()
|
11
5
|
@channels_id = Hash.new()
|
12
6
|
@channels_name = Hash.new()
|
13
7
|
channels.each do |ch|
|
@@ -1,18 +1,17 @@
|
|
1
1
|
class SlackSmartBot
|
2
|
-
def get_help(rules_file, dest, from, only_rules
|
2
|
+
def get_help(rules_file, dest, from, only_rules, expanded)
|
3
3
|
order = {
|
4
|
-
general: [:hi_bot, :bye_bot, :bot_help, :bot_status, :use_rules, :stop_using_rules],
|
4
|
+
general: [:whats_new, :hi_bot, :bye_bot, :bot_help, :bot_status, :use_rules, :stop_using_rules, :bot_stats],
|
5
5
|
on_bot: [:ruby_code, :repl, :get_repl, :run_repl, :delete_repl, :see_repls, :add_shortcut, :delete_shortcut, :see_shortcuts],
|
6
6
|
on_bot_admin: [:extend_rules, :stop_using_rules_on, :start_bot, :pause_bot, :add_routine,
|
7
7
|
:see_routines, :start_routine, :pause_routine, :remove_routine, :run_routine]
|
8
8
|
}
|
9
|
-
# user_type: :admin, :user, :admin_master
|
10
9
|
if config.masters.include?(from)
|
11
|
-
user_type = :
|
10
|
+
user_type = :master # master admin
|
12
11
|
elsif config.admins.include?(from)
|
13
12
|
user_type = :admin
|
14
13
|
else
|
15
|
-
user_type = :user
|
14
|
+
user_type = :normal #normal user
|
16
15
|
end
|
17
16
|
# channel_type: :bot, :master_bot, :direct, :extended, :external
|
18
17
|
if dest[0] == "D"
|
@@ -25,27 +24,45 @@ class SlackSmartBot
|
|
25
24
|
channel_type = :bot
|
26
25
|
end
|
27
26
|
|
28
|
-
@
|
27
|
+
@help_messages_expanded ||= build_help("#{__dir__}/../commands", true)
|
28
|
+
@help_messages_not_expanded ||= build_help("#{__dir__}/../commands", false)
|
29
29
|
if only_rules
|
30
30
|
help = {}
|
31
|
+
elsif expanded
|
32
|
+
help = @help_messages_expanded.deep_copy[user_type]
|
31
33
|
else
|
32
|
-
help = @
|
34
|
+
help = @help_messages_not_expanded.deep_copy[user_type]
|
33
35
|
end
|
36
|
+
|
34
37
|
if rules_file != ""
|
35
|
-
help[:rules_file] =
|
36
|
-
|
37
|
-
|
38
|
-
|
38
|
+
help[:rules_file] = build_help(config.path+rules_file, expanded)[user_type].values.join("\n") + "\n"
|
39
|
+
|
40
|
+
# to get all the help from other rules files added to the main rules file by using require or load. For example general_rules.rb
|
41
|
+
res = IO.readlines(config.path+rules_file).join.scan(/$\s*(load|require)\s("|')(.+)("|')/)
|
42
|
+
rules_help = []
|
43
|
+
txt = ''
|
44
|
+
if res.size>0
|
45
|
+
res.each do |r|
|
46
|
+
begin
|
47
|
+
eval("txt = \"#{r[2]}\"")
|
48
|
+
rules_help << txt if File.exist?(txt)
|
49
|
+
rescue
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
rules_help.each do |rh|
|
54
|
+
rhelp = build_help(rh, expanded)
|
55
|
+
help[:rules_file] += rhelp[user_type].values.join("\n") + "\n"
|
39
56
|
end
|
40
57
|
end
|
41
|
-
help = remove_hash_keys(help, :admin_master) unless user_type == :
|
42
|
-
help = remove_hash_keys(help, :admin) unless user_type == :admin or user_type == :
|
58
|
+
help = remove_hash_keys(help, :admin_master) unless user_type == :master
|
59
|
+
help = remove_hash_keys(help, :admin) unless user_type == :admin or user_type == :master
|
43
60
|
help = remove_hash_keys(help, :on_master) unless channel_type == :master_bot
|
44
61
|
help = remove_hash_keys(help, :on_extended) unless channel_type == :extended
|
45
62
|
help = remove_hash_keys(help, :on_dm) unless channel_type == :direct
|
46
63
|
txt = ""
|
47
64
|
|
48
|
-
if channel_type == :bot or channel_type == :master_bot
|
65
|
+
if (channel_type == :bot or channel_type == :master_bot) and expanded
|
49
66
|
txt += "===================================
|
50
67
|
For the Smart Bot start listening to you say *hi bot*
|
51
68
|
To run a command on demand even when the Smart Bot is not listening to you:
|
@@ -56,11 +73,11 @@ class SlackSmartBot
|
|
56
73
|
*^THE_COMMAND*
|
57
74
|
*!!THE_COMMAND*\n"
|
58
75
|
end
|
59
|
-
if channel_type == :direct
|
76
|
+
if channel_type == :direct and expanded
|
60
77
|
txt += "===================================
|
61
78
|
When on a private conversation with the Smart Bot, I'm always listening to you.\n"
|
62
79
|
end
|
63
|
-
unless channel_type == :master_bot or channel_type == :extended
|
80
|
+
unless channel_type == :master_bot or channel_type == :extended or !expanded
|
64
81
|
txt += "===================================
|
65
82
|
*Commands from Channels without a bot:*
|
66
83
|
----------------------------------------------
|
@@ -121,7 +138,7 @@ class SlackSmartBot
|
|
121
138
|
|
122
139
|
if help.key?(:on_master) and help.on_master.key?(:admin_master) and help.on_master.admin_master.size > 0
|
123
140
|
txt += "===================================
|
124
|
-
*Master Admin commands:*\n"
|
141
|
+
*Master Admin commands:*\n" unless txt.include?('*Master Admin commands*')
|
125
142
|
help.on_master.admin_master.each do |k, v|
|
126
143
|
txt += v if v.is_a?(String)
|
127
144
|
end
|
@@ -133,6 +150,51 @@ class SlackSmartBot
|
|
133
150
|
@logger.info help.rules_file if config.testing
|
134
151
|
help.rules_file = help.rules_file.gsub(/^\s*\*These are specific commands.+NAME_OF_BOT THE_COMMAND`\s*$/im, "")
|
135
152
|
end
|
153
|
+
|
154
|
+
unless expanded
|
155
|
+
resf = ''
|
156
|
+
help.rules_file.split(/^\s*\-+\s*$/).each do |rule|
|
157
|
+
command_done = false
|
158
|
+
explanation_done = false
|
159
|
+
example_done = false
|
160
|
+
if rule.match?(/These are specific commands for this/i)
|
161
|
+
resf += rule
|
162
|
+
resf += "-"*50
|
163
|
+
resf += "\n"
|
164
|
+
elsif rule.match?(/To run a command on demand and add the respond on a thread/i)
|
165
|
+
resf += rule
|
166
|
+
resf += "-"*50
|
167
|
+
resf += "\n"
|
168
|
+
else
|
169
|
+
rule.split("\n").each do |line|
|
170
|
+
if line.match?(/^\s*\-+\s*/i)
|
171
|
+
resf += line
|
172
|
+
elsif !command_done and line.match?(/^\s*`.+`\s*/i)
|
173
|
+
resf += "\n#{line}"
|
174
|
+
command_done = true
|
175
|
+
elsif !explanation_done and line.match?(/^\s+[^`].+\s*/i)
|
176
|
+
resf += "\n#{line}"
|
177
|
+
explanation_done = true
|
178
|
+
elsif !example_done and line.match?(/^\s*_.+_\s*/i)
|
179
|
+
resf += "\n Example: #{line}"
|
180
|
+
example_done = true
|
181
|
+
end
|
182
|
+
end
|
183
|
+
resf += "\n\n"
|
184
|
+
end
|
185
|
+
end
|
186
|
+
unless resf.match?(/These are specific commands for this bot on this Channel/i)
|
187
|
+
if resf.match?(/\A\s*[=\-]+$/)
|
188
|
+
pre = ''
|
189
|
+
post = ''
|
190
|
+
else
|
191
|
+
pre = ('='*50) + "\n"
|
192
|
+
post = ('-'*50) + "\n"
|
193
|
+
end
|
194
|
+
resf = "#{pre}*These are specific commands for this bot on this Channel:*\n#{post}" + resf
|
195
|
+
end
|
196
|
+
help.rules_file = resf
|
197
|
+
end
|
136
198
|
txt += help.rules_file
|
137
199
|
end
|
138
200
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class SlackSmartBot
|
2
2
|
|
3
|
-
def save_stats(method)
|
3
|
+
def save_stats(method, data: {})
|
4
4
|
if config.stats
|
5
5
|
begin
|
6
6
|
require 'csv'
|
@@ -9,18 +9,31 @@ class SlackSmartBot
|
|
9
9
|
csv << ['date','bot_channel', 'bot_channel_id', 'dest_channel', 'dest_channel_id', 'type_message', 'user_name', 'user_id', 'text', 'command', 'files']
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
if data.empty?
|
13
|
+
data = {
|
14
|
+
dest: Thread.current[:dest],
|
15
|
+
typem: Thread.current[:typem],
|
16
|
+
user: Thread.current[:user],
|
17
|
+
files: Thread.current[:files?],
|
18
|
+
command: Thread.current[:command],
|
19
|
+
routine: Thread.current[:routine]
|
20
|
+
}
|
21
|
+
end
|
22
|
+
if method.to_s == 'ruby_code' and data.files
|
17
23
|
command_txt = 'ruby'
|
18
24
|
else
|
19
|
-
command_txt =
|
25
|
+
command_txt = data.command
|
20
26
|
end
|
21
27
|
|
28
|
+
if data.routine
|
29
|
+
user_name = "routine/#{data.user.name}"
|
30
|
+
user_id = "routine/#{data.user.id}"
|
31
|
+
else
|
32
|
+
user_name = data.user.name
|
33
|
+
user_id = data.user.id
|
34
|
+
end
|
22
35
|
CSV.open("#{config.stats_path}.#{Time.now.strftime("%Y-%m")}.log", "a+") do |csv|
|
23
|
-
csv << [Time.now, config.channel, @channel_id, @channels_name[dest], dest, typem,
|
36
|
+
csv << [Time.now, config.channel, @channel_id, @channels_name[data.dest], data.dest, data.typem, user_name, user_id, command_txt, method, data.files]
|
24
37
|
end
|
25
38
|
rescue Exception => exception
|
26
39
|
@logger.fatal "There was a problem on the stats"
|
@@ -3,5 +3,11 @@ class SlackSmartBot
|
|
3
3
|
file = File.open("#{config.path}/shortcuts/#{config.shortcuts_file}", "w")
|
4
4
|
file.write @shortcuts.inspect
|
5
5
|
file.close
|
6
|
+
|
7
|
+
if config.on_master_bot
|
8
|
+
file = File.open("#{config.path}/shortcuts/shortcuts_global.rb", "w")
|
9
|
+
file.write @shortcuts_global.inspect
|
10
|
+
file.close
|
11
|
+
end
|
6
12
|
end
|
7
13
|
end
|
data/whats_new.txt
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
*Version 1.9.1* Released 2021-Mar-18
|
2
|
+
|
3
|
+
*For General users*
|
4
|
+
- Added command `what's new` that will show this.
|
5
|
+
- `bot stats` will return detailed statistics using the SmartBot. If you call it from a DM with the SmartBot you will see all stats for all Bot channels.
|
6
|
+
- Possible to create 'global' shortcuts that will be available on any SmartBot Channel.
|
7
|
+
- Added option to start a `repl` without pre-executing '.smart-bot-repl' source code in case exists. Just add `clean` before the `repl` command. For example: `clean repl Example`
|
8
|
+
- When using `Ruby` command in case the process doesn't finish in 20 seconds will be aborted.
|
9
|
+
- When creating rules/commands and asking a question now you can use 'answer' instead of '@questions'. Take a look at README.md for an example.
|
10
|
+
- Using external calls, it is possible to send to more than one bot channel the same rule: `@smart-bot on #channel1 #channel2 #channel3 echo Lala`
|
11
|
+
- `bot help` and `bot rules` return by default a short version of the commands. Call `bot help expanded` or `bot rules expanded` to get a full desciption of the commands.
|
12
|
+
- It is possible to exclude routines from results when using `bot stats`
|
13
|
+
------------------------------
|
14
|
+
*For Admin users*
|
15
|
+
- `Bot stats` now shows the top 10 users and attaches the full list of users and commands.
|
16
|
+
- Bot Stats. Now the routines are displayed as routine/USER
|
17
|
+
- When creating routines now it is possible to publish in a different channel: `add routine run_tests at 17:05 #thechannel !run api tests`
|
18
|
+
- `Turn maintenance on/off` command available
|
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.
|
4
|
+
version: 1.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mario Ruiz
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slack-ruby-client
|
@@ -16,20 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.17'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
22
|
+
version: 0.17.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '0.
|
29
|
+
version: '0.17'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.
|
32
|
+
version: 0.17.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: nice_http
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
version: '1'
|
82
82
|
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: 1.
|
84
|
+
version: 1.3.0
|
85
85
|
type: :runtime
|
86
86
|
prerelease: false
|
87
87
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -91,7 +91,7 @@ dependencies:
|
|
91
91
|
version: '1'
|
92
92
|
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version: 1.
|
94
|
+
version: 1.3.0
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
96
|
name: rspec
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,6 +130,10 @@ files:
|
|
130
130
|
- lib/slack/smart-bot/comm.rb
|
131
131
|
- lib/slack/smart-bot/comm/ask.rb
|
132
132
|
- lib/slack/smart-bot/comm/dont_understand.rb
|
133
|
+
- lib/slack/smart-bot/comm/event_hello.rb
|
134
|
+
- lib/slack/smart-bot/comm/get_channel_members.rb
|
135
|
+
- lib/slack/smart-bot/comm/get_channels.rb
|
136
|
+
- lib/slack/smart-bot/comm/get_user_info.rb
|
133
137
|
- lib/slack/smart-bot/comm/react.rb
|
134
138
|
- lib/slack/smart-bot/comm/respond.rb
|
135
139
|
- lib/slack/smart-bot/comm/respond_direct.rb
|
@@ -139,11 +143,13 @@ files:
|
|
139
143
|
- lib/slack/smart-bot/comm/unreact.rb
|
140
144
|
- lib/slack/smart-bot/commands.rb
|
141
145
|
- lib/slack/smart-bot/commands/general/bot_help.rb
|
146
|
+
- lib/slack/smart-bot/commands/general/bot_stats.rb
|
142
147
|
- lib/slack/smart-bot/commands/general/bot_status.rb
|
143
148
|
- lib/slack/smart-bot/commands/general/bye_bot.rb
|
144
149
|
- lib/slack/smart-bot/commands/general/hi_bot.rb
|
145
150
|
- lib/slack/smart-bot/commands/general/stop_using_rules.rb
|
146
151
|
- lib/slack/smart-bot/commands/general/use_rules.rb
|
152
|
+
- lib/slack/smart-bot/commands/general/whats_new.rb
|
147
153
|
- lib/slack/smart-bot/commands/on_bot/add_shortcut.rb
|
148
154
|
- lib/slack/smart-bot/commands/on_bot/admin/add_routine.rb
|
149
155
|
- lib/slack/smart-bot/commands/on_bot/admin/extend_rules.rb
|
@@ -155,7 +161,6 @@ files:
|
|
155
161
|
- lib/slack/smart-bot/commands/on_bot/admin/start_bot.rb
|
156
162
|
- lib/slack/smart-bot/commands/on_bot/admin/start_routine.rb
|
157
163
|
- lib/slack/smart-bot/commands/on_bot/admin/stop_using_rules_on.rb
|
158
|
-
- lib/slack/smart-bot/commands/on_bot/admin_master/bot_stats.rb
|
159
164
|
- lib/slack/smart-bot/commands/on_bot/admin_master/get_bot_logs.rb
|
160
165
|
- lib/slack/smart-bot/commands/on_bot/delete_repl.rb
|
161
166
|
- lib/slack/smart-bot/commands/on_bot/delete_shortcut.rb
|
@@ -169,12 +174,15 @@ files:
|
|
169
174
|
- lib/slack/smart-bot/commands/on_master/admin/kill_bot_on_channel.rb
|
170
175
|
- lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb
|
171
176
|
- lib/slack/smart-bot/commands/on_master/admin_master/notify_message.rb
|
177
|
+
- lib/slack/smart-bot/commands/on_master/admin_master/set_maintenance.rb
|
172
178
|
- lib/slack/smart-bot/commands/on_master/create_bot.rb
|
173
179
|
- lib/slack/smart-bot/listen.rb
|
174
180
|
- lib/slack/smart-bot/process.rb
|
175
181
|
- lib/slack/smart-bot/process_first.rb
|
176
182
|
- lib/slack/smart-bot/treat_message.rb
|
177
183
|
- lib/slack/smart-bot/utils.rb
|
184
|
+
- lib/slack/smart-bot/utils/answer.rb
|
185
|
+
- lib/slack/smart-bot/utils/answer_delete.rb
|
178
186
|
- lib/slack/smart-bot/utils/build_help.rb
|
179
187
|
- lib/slack/smart-bot/utils/create_routine_thread.rb
|
180
188
|
- lib/slack/smart-bot/utils/get_bots_created.rb
|
@@ -190,6 +198,7 @@ files:
|
|
190
198
|
- lib/slack/smart-bot/utils/update_routines.rb
|
191
199
|
- lib/slack/smart-bot/utils/update_rules_imported.rb
|
192
200
|
- lib/slack/smart-bot/utils/update_shortcuts_file.rb
|
201
|
+
- whats_new.txt
|
193
202
|
homepage: https://github.com/MarioRuiz/slack-smart-bot
|
194
203
|
licenses:
|
195
204
|
- MIT
|
@@ -209,8 +218,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
209
218
|
- !ruby/object:Gem::Version
|
210
219
|
version: '0'
|
211
220
|
requirements: []
|
212
|
-
rubygems_version: 3.
|
213
|
-
signing_key:
|
221
|
+
rubygems_version: 3.2.3
|
222
|
+
signing_key:
|
214
223
|
specification_version: 4
|
215
224
|
summary: Create a Slack bot that is smart and so easy to expand, create new bots on
|
216
225
|
demand, run ruby code on chat, create shortcuts...
|