slack-smart-bot 1.9.1 → 1.11.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 +4 -4
- data/README.md +184 -16
- data/lib/slack/smart-bot/comm/ask.rb +55 -49
- data/lib/slack/smart-bot/comm/delete.rb +13 -0
- data/lib/slack/smart-bot/comm/dont_understand.rb +3 -3
- data/lib/slack/smart-bot/comm/event_hello.rb +8 -4
- data/lib/slack/smart-bot/comm/get_channel_members.rb +13 -4
- data/lib/slack/smart-bot/comm/get_channels.rb +31 -16
- data/lib/slack/smart-bot/comm/get_presence.rb +20 -0
- data/lib/slack/smart-bot/comm/get_user_info.rb +12 -8
- data/lib/slack/smart-bot/comm/get_users.rb +24 -0
- data/lib/slack/smart-bot/comm/react.rb +19 -2
- data/lib/slack/smart-bot/comm/respond.rb +224 -53
- data/lib/slack/smart-bot/comm/respond_direct.rb +2 -3
- data/lib/slack/smart-bot/comm/respond_thread.rb +5 -0
- data/lib/slack/smart-bot/comm/send_file.rb +38 -34
- data/lib/slack/smart-bot/comm/send_msg_channel.rb +27 -22
- data/lib/slack/smart-bot/comm/send_msg_user.rb +59 -33
- data/lib/slack/smart-bot/comm/unreact.rb +22 -18
- data/lib/slack/smart-bot/comm.rb +4 -0
- data/lib/slack/smart-bot/commands/general/add_admin.rb +51 -0
- data/lib/slack/smart-bot/commands/general/add_announcement.rb +32 -0
- data/lib/slack/smart-bot/commands/general/add_team.rb +80 -0
- data/lib/slack/smart-bot/commands/general/allow_access.rb +67 -0
- data/lib/slack/smart-bot/commands/general/bot_help.rb +69 -33
- data/lib/slack/smart-bot/commands/general/bye_bot.rb +0 -7
- data/lib/slack/smart-bot/commands/general/delete_announcement.rb +34 -0
- data/lib/slack/smart-bot/commands/general/delete_share.rb +34 -0
- data/lib/slack/smart-bot/commands/general/delete_team.rb +34 -0
- data/lib/slack/smart-bot/commands/general/deny_access.rb +36 -0
- data/lib/slack/smart-bot/commands/general/hi_bot.rb +16 -11
- data/lib/slack/smart-bot/commands/general/ping_team.rb +100 -0
- data/lib/slack/smart-bot/commands/general/poster.rb +116 -0
- data/lib/slack/smart-bot/commands/general/remove_admin.rb +58 -0
- data/lib/slack/smart-bot/commands/general/see_access.rb +24 -0
- data/lib/slack/smart-bot/commands/general/see_admins.rb +33 -0
- data/lib/slack/smart-bot/commands/general/see_announcements.rb +115 -0
- data/lib/slack/smart-bot/commands/general/see_command_ids.rb +29 -0
- data/lib/slack/smart-bot/commands/general/see_favorite_commands.rb +53 -0
- data/lib/slack/smart-bot/commands/general/see_shares.rb +41 -0
- data/lib/slack/smart-bot/commands/general/see_statuses.rb +91 -0
- data/lib/slack/smart-bot/commands/general/see_teams.rb +252 -0
- data/lib/slack/smart-bot/commands/general/share_messages.rb +58 -0
- data/lib/slack/smart-bot/commands/general/update_team.rb +109 -0
- data/lib/slack/smart-bot/commands/general_bot_commands.rb +504 -0
- data/lib/slack/smart-bot/commands/on_bot/add_shortcut.rb +4 -6
- data/lib/slack/smart-bot/commands/on_bot/admin/add_routine.rb +45 -14
- data/lib/slack/smart-bot/commands/on_bot/admin/extend_rules.rb +4 -1
- data/lib/slack/smart-bot/commands/on_bot/admin/pause_bot.rb +6 -3
- data/lib/slack/smart-bot/commands/on_bot/admin/pause_routine.rb +3 -1
- data/lib/slack/smart-bot/commands/on_bot/admin/remove_routine.rb +4 -4
- data/lib/slack/smart-bot/commands/on_bot/admin/run_routine.rb +8 -2
- data/lib/slack/smart-bot/commands/on_bot/admin/see_result_routine.rb +33 -0
- data/lib/slack/smart-bot/commands/on_bot/admin/see_routines.rb +13 -10
- data/lib/slack/smart-bot/commands/on_bot/admin/start_bot.rb +6 -3
- data/lib/slack/smart-bot/commands/on_bot/admin/start_routine.rb +3 -1
- data/lib/slack/smart-bot/commands/on_bot/admin/stop_using_rules_on.rb +4 -1
- data/lib/slack/smart-bot/commands/on_bot/admin_master/delete_message.rb +25 -0
- data/lib/slack/smart-bot/commands/on_bot/admin_master/get_bot_logs.rb +1 -0
- data/lib/slack/smart-bot/commands/on_bot/admin_master/react_to.rb +34 -0
- data/lib/slack/smart-bot/commands/on_bot/admin_master/send_message.rb +37 -0
- data/lib/slack/smart-bot/commands/on_bot/delete_repl.rb +4 -5
- data/lib/slack/smart-bot/commands/on_bot/delete_shortcut.rb +7 -8
- data/lib/slack/smart-bot/commands/on_bot/general/bot_stats.rb +400 -0
- data/lib/slack/smart-bot/commands/{general → on_bot/general}/bot_status.rb +3 -4
- data/lib/slack/smart-bot/commands/on_bot/general/leaderboard.rb +201 -0
- data/lib/slack/smart-bot/commands/{general → on_bot/general}/stop_using_rules.rb +12 -6
- data/lib/slack/smart-bot/commands/on_bot/general/suggest_command.rb +36 -0
- data/lib/slack/smart-bot/commands/{general → on_bot/general}/use_rules.rb +13 -11
- data/lib/slack/smart-bot/commands/{general → on_bot/general}/whats_new.rb +2 -1
- data/lib/slack/smart-bot/commands/on_bot/get_repl.rb +4 -5
- data/lib/slack/smart-bot/commands/on_bot/repl.rb +76 -21
- data/lib/slack/smart-bot/commands/on_bot/ruby_code.rb +3 -4
- data/lib/slack/smart-bot/commands/on_bot/run_repl.rb +15 -7
- data/lib/slack/smart-bot/commands/on_bot/see_repls.rb +5 -6
- data/lib/slack/smart-bot/commands/on_bot/see_shortcuts.rb +5 -6
- data/lib/slack/smart-bot/commands/on_extended/bot_rules.rb +45 -12
- data/lib/slack/smart-bot/commands/on_master/admin/kill_bot_on_channel.rb +7 -3
- data/lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb +4 -1
- data/lib/slack/smart-bot/commands/on_master/admin_master/notify_message.rb +3 -1
- data/lib/slack/smart-bot/commands/on_master/admin_master/publish_announcements.rb +33 -0
- data/lib/slack/smart-bot/commands/on_master/admin_master/set_general_message.rb +39 -0
- data/lib/slack/smart-bot/commands/on_master/admin_master/set_maintenance.rb +10 -1
- data/lib/slack/smart-bot/commands/on_master/create_bot.rb +28 -14
- data/lib/slack/smart-bot/commands/on_master/where_smartbot.rb +41 -0
- data/lib/slack/smart-bot/commands.rb +36 -5
- data/lib/slack/smart-bot/listen.rb +31 -33
- data/lib/slack/smart-bot/process.rb +234 -73
- data/lib/slack/smart-bot/process_first.rb +119 -38
- data/lib/slack/smart-bot/treat_message.rb +310 -237
- data/lib/slack/smart-bot/utils/build_help.rb +2 -2
- data/lib/slack/smart-bot/utils/create_routine_thread.rb +81 -46
- data/lib/slack/smart-bot/utils/get_access_channels.rb +13 -0
- data/lib/slack/smart-bot/utils/get_admins_channels.rb +13 -0
- data/lib/slack/smart-bot/utils/get_bots_created.rb +28 -8
- data/lib/slack/smart-bot/utils/get_channels_name_and_id.rb +7 -2
- data/lib/slack/smart-bot/utils/get_command_ids.rb +84 -0
- data/lib/slack/smart-bot/utils/get_help.rb +79 -73
- data/lib/slack/smart-bot/utils/get_repls.rb +22 -2
- data/lib/slack/smart-bot/utils/get_routines.rb +22 -2
- data/lib/slack/smart-bot/utils/get_shares.rb +12 -0
- data/lib/slack/smart-bot/utils/get_teams.rb +22 -0
- data/lib/slack/smart-bot/utils/has_access.rb +28 -0
- data/lib/slack/smart-bot/utils/is_admin.rb +27 -0
- data/lib/slack/smart-bot/utils/save_stats.rb +46 -41
- data/lib/slack/smart-bot/utils/save_status.rb +67 -0
- data/lib/slack/smart-bot/utils/update_access_channels.rb +8 -0
- data/lib/slack/smart-bot/utils/update_admins_channels.rb +8 -0
- data/lib/slack/smart-bot/utils/update_bots_file.rb +28 -7
- data/lib/slack/smart-bot/utils/update_repls.rb +7 -4
- data/lib/slack/smart-bot/utils/update_routines.rb +9 -3
- data/lib/slack/smart-bot/utils/update_shortcuts_file.rb +13 -6
- data/lib/slack/smart-bot/utils/update_teams.rb +16 -0
- data/lib/slack/smart-bot/utils.rb +11 -0
- data/lib/slack-smart-bot.rb +72 -12
- data/lib/slack-smart-bot_general_commands.rb +61 -0
- data/lib/slack-smart-bot_general_rules.rb +5 -2
- data/lib/slack-smart-bot_rules.rb +43 -17
- data/whats_new.txt +20 -15
- metadata +76 -9
- data/lib/slack/smart-bot/commands/general/bot_stats.rb +0 -313
data/lib/slack-smart-bot.rb
CHANGED
@@ -9,6 +9,7 @@ require "open3"
|
|
9
9
|
require "nice_http"
|
10
10
|
require "nice_hash"
|
11
11
|
require 'cgi'
|
12
|
+
require 'yaml'
|
12
13
|
|
13
14
|
require_relative "slack/smart-bot/comm"
|
14
15
|
require_relative "slack/smart-bot/listen"
|
@@ -43,6 +44,9 @@ class SlackSmartBot
|
|
43
44
|
config[:allow_access] = Hash.new unless config.key?(:allow_access)
|
44
45
|
config[:on_maintenance] = false unless config.key?(:on_maintenance)
|
45
46
|
config[:on_maintenance_message] = "Sorry I'm on maintenance so I cannot attend your request." unless config.key?(:on_maintenance_message)
|
47
|
+
config[:general_message] = "" unless config.key?(:general_message)
|
48
|
+
config[:logrtm] = false unless config.key?(:logrtm)
|
49
|
+
config[:status_channel] = 'smartbot-status' unless config.key?(:status_channel)
|
46
50
|
|
47
51
|
if config.path.to_s!='' and config.file.to_s==''
|
48
52
|
config.file = File.basename($0)
|
@@ -61,6 +65,10 @@ class SlackSmartBot
|
|
61
65
|
Dir.mkdir("#{config.path}/logs") unless Dir.exist?("#{config.path}/logs")
|
62
66
|
Dir.mkdir("#{config.path}/shortcuts") unless Dir.exist?("#{config.path}/shortcuts")
|
63
67
|
Dir.mkdir("#{config.path}/routines") unless Dir.exist?("#{config.path}/routines")
|
68
|
+
Dir.mkdir("#{config.path}/announcements") unless Dir.exist?("#{config.path}/announcements")
|
69
|
+
Dir.mkdir("#{config.path}/shares") unless Dir.exist?("#{config.path}/shares")
|
70
|
+
Dir.mkdir("#{config.path}/rules") unless Dir.exist?("#{config.path}/rules")
|
71
|
+
File.delete("#{config.path}/config_tmp.status") if File.exist?("#{config.path}/config_tmp.status")
|
64
72
|
|
65
73
|
config.masters = MASTER_USERS if config.masters.to_s=='' and defined?(MASTER_USERS)
|
66
74
|
config.master_channel = MASTER_CHANNEL if config.master_channel.to_s=='' and defined?(MASTER_CHANNEL)
|
@@ -71,7 +79,7 @@ class SlackSmartBot
|
|
71
79
|
default_rules = (__FILE__).gsub(/\.rb$/, "_rules.rb")
|
72
80
|
FileUtils.copy_file(default_rules, config.path + '/' + config.rules_file)
|
73
81
|
end
|
74
|
-
config.admins = config.masters unless config.admins.to_s!=''
|
82
|
+
config.admins = config.masters.dup unless config.admins.to_s!=''
|
75
83
|
config.channel = config.master_channel unless config.channel.to_s!=''
|
76
84
|
config.status_init = :on unless config.status_init.to_s!=''
|
77
85
|
else
|
@@ -83,7 +91,7 @@ class SlackSmartBot
|
|
83
91
|
config.rules_file[0]='' if config.rules_file[0]=='.'
|
84
92
|
config.rules_file='/'+config.rules_file if config.rules_file[0]!='/'
|
85
93
|
|
86
|
-
config.shortcuts_file = "slack-smart-bot_shortcuts_#{config.channel}.
|
94
|
+
config.shortcuts_file = "slack-smart-bot_shortcuts_#{config.channel}.yaml".gsub(" ", "_")
|
87
95
|
if config.channel == config.master_channel
|
88
96
|
config.on_master_bot = true
|
89
97
|
config.start_bots = true unless config.key?(:start_bots)
|
@@ -116,6 +124,7 @@ class SlackSmartBot
|
|
116
124
|
File.new("#{config.path}/buffer_complete.log", "w") if config[:simulate] and config.on_master_bot
|
117
125
|
|
118
126
|
self.config = config
|
127
|
+
save_status :off, :initializing, "Initializing bot: #{config_log.inspect}"
|
119
128
|
|
120
129
|
unless config.simulate and config.key?(:client)
|
121
130
|
Slack.configure do |conf|
|
@@ -127,10 +136,18 @@ class SlackSmartBot
|
|
127
136
|
while restarts < 200 and !created
|
128
137
|
begin
|
129
138
|
@logger.info "Connecting #{config_log.inspect}"
|
139
|
+
save_status :off, :connecting, "Connecting #{config_log.inspect}"
|
130
140
|
if config.simulate and config.key?(:client)
|
131
141
|
self.client = config.client
|
132
142
|
else
|
133
|
-
|
143
|
+
if config.logrtm
|
144
|
+
logrtmname = "#{config.path}/logs/rtm_#{config.channel}.log"
|
145
|
+
File.delete(logrtmname) if File.exist?(logrtmname)
|
146
|
+
@logrtm = Logger.new(logrtmname)
|
147
|
+
self.client = Slack::RealTime::Client.new(start_method: :rtm_connect, logger: @logrtm)
|
148
|
+
else
|
149
|
+
self.client = Slack::RealTime::Client.new(start_method: :rtm_connect)
|
150
|
+
end
|
134
151
|
end
|
135
152
|
created = true
|
136
153
|
rescue Exception => e
|
@@ -140,6 +157,8 @@ class SlackSmartBot
|
|
140
157
|
@logger.fatal "Rescued on creation: #{e.inspect}"
|
141
158
|
@logger.info "Waiting 60 seconds to retry. restarts: #{restarts}"
|
142
159
|
puts "#{Time.now}: Not able to create client. Waiting 60 seconds to retry: #{config_log.inspect}"
|
160
|
+
save_status :off, :waiting, "Not able to create client. Waiting 60 seconds to retry: #{config_log.inspect}"
|
161
|
+
|
143
162
|
sleep 60
|
144
163
|
else
|
145
164
|
exit!
|
@@ -157,32 +176,54 @@ class SlackSmartBot
|
|
157
176
|
@rules_imported = Hash.new()
|
158
177
|
@routines = Hash.new()
|
159
178
|
@repls = Hash.new()
|
179
|
+
@users = Hash.new()
|
180
|
+
@announcements = Hash.new()
|
181
|
+
@shares = Hash.new()
|
182
|
+
@last_status_change = Time.now
|
160
183
|
|
161
|
-
if File.exist?("#{config.path}/shortcuts/#{config.shortcuts_file}")
|
162
|
-
|
163
|
-
|
164
|
-
@shortcuts =
|
184
|
+
if File.exist?("#{config.path}/shortcuts/#{config.shortcuts_file}".gsub('.yaml','.rb')) #backwards compatible
|
185
|
+
file_conf = IO.readlines("#{config.path}/shortcuts/#{config.shortcuts_file}".gsub('.yaml','.rb')).join
|
186
|
+
if file_conf.to_s() == ""
|
187
|
+
@shortcuts = {}
|
188
|
+
else
|
189
|
+
@shortcuts = eval(file_conf)
|
165
190
|
end
|
191
|
+
File.open("#{config.path}/shortcuts/#{config.shortcuts_file}", 'w') {|file| file.write(@shortcuts.to_yaml) }
|
192
|
+
File.delete("#{config.path}/shortcuts/#{config.shortcuts_file}".gsub('.yaml','.rb'))
|
193
|
+
elsif File.exist?("#{config.path}/shortcuts/#{config.shortcuts_file}")
|
194
|
+
@shortcuts = YAML.load(File.read("#{config.path}/shortcuts/#{config.shortcuts_file}"))
|
166
195
|
end
|
167
|
-
if File.exist?("#{config.path}/shortcuts/shortcuts_global.rb")
|
196
|
+
if File.exist?("#{config.path}/shortcuts/shortcuts_global.rb") #backwards compatible
|
168
197
|
file_sc = IO.readlines("#{config.path}/shortcuts/shortcuts_global.rb").join
|
198
|
+
@shortcuts_global = {}
|
169
199
|
unless file_sc.to_s() == ""
|
170
200
|
@shortcuts_global = eval(file_sc)
|
171
201
|
end
|
202
|
+
File.open("#{config.path}/shortcuts/shortcuts_global.yaml", 'w') {|file| file.write(@shortcuts_global.to_yaml) }
|
203
|
+
File.delete("#{config.path}/shortcuts/shortcuts_global.rb")
|
204
|
+
elsif File.exist?("#{config.path}/shortcuts/shortcuts_global.yaml")
|
205
|
+
@shortcuts_global = YAML.load(File.read("#{config.path}/shortcuts/shortcuts_global.yaml"))
|
172
206
|
end
|
173
207
|
|
174
208
|
get_routines()
|
175
209
|
get_repls()
|
176
210
|
|
177
|
-
if config.on_master_bot and File.exist?(config.file_path.gsub(".rb", "_bots.rb"))
|
211
|
+
if config.on_master_bot and (File.exist?(config.file_path.gsub(".rb", "_bots.rb")) or File.exist?(config.file_path.gsub('.rb', '_bots.yaml')))
|
178
212
|
get_bots_created()
|
179
213
|
if @bots_created.kind_of?(Hash) and config.start_bots
|
180
214
|
@bots_created.each { |key, value|
|
181
215
|
if !value.key?(:cloud) or (value.key?(:cloud) and value[:cloud] == false)
|
182
|
-
|
216
|
+
if value.key?(:silent) and value.silent!=config.silent
|
217
|
+
silent = value.silent
|
218
|
+
else
|
219
|
+
silent = config.silent
|
220
|
+
end
|
221
|
+
@logger.info "BOT_SILENT=#{silent} ruby #{config.file_path} \"#{value[:channel_name]}\" \"#{value[:admins]}\" \"#{value[:rules_file]}\" #{value[:status].to_sym}"
|
183
222
|
puts "Starting #{value[:channel_name]} Smart Bot"
|
223
|
+
save_status :off, :starting, "Starting #{value[:channel_name]} Smart Bot"
|
224
|
+
|
184
225
|
t = Thread.new do
|
185
|
-
`ruby #{config.file_path} \"#{value[:channel_name]}\" \"#{value[:admins]}\" \"#{value[:rules_file]}\" #{value[:status].to_sym}`
|
226
|
+
`BOT_SILENT=#{silent} ruby #{config.file_path} \"#{value[:channel_name]}\" \"#{value[:admins]}\" \"#{value[:rules_file]}\" #{value[:status].to_sym}`
|
186
227
|
end
|
187
228
|
value[:thread] = t
|
188
229
|
sleep value[:admins].size
|
@@ -190,6 +231,12 @@ class SlackSmartBot
|
|
190
231
|
}
|
191
232
|
end
|
192
233
|
end
|
234
|
+
general_rules_file = "/rules/general_rules.rb"
|
235
|
+
general_commands_file = "/rules/general_commands.rb"
|
236
|
+
default_general_rules = (__FILE__).gsub(/\/slack-smart-bot\.rb$/, "/slack-smart-bot_general_rules.rb")
|
237
|
+
default_general_commands = (__FILE__).gsub(/\/slack-smart-bot\.rb$/, "/slack-smart-bot_general_commands.rb")
|
238
|
+
FileUtils.copy_file(default_general_rules, config.path + general_rules_file) unless File.exist?(config.path + general_rules_file)
|
239
|
+
FileUtils.copy_file(default_general_commands, config.path + general_commands_file) unless File.exist?(config.path + general_commands_file)
|
193
240
|
|
194
241
|
get_rules_imported()
|
195
242
|
|
@@ -212,9 +259,11 @@ class SlackSmartBot
|
|
212
259
|
end
|
213
260
|
rescue Slack::Web::Api::Errors::TooManyRequestsError
|
214
261
|
@logger.fatal "TooManyRequestsError"
|
262
|
+
save_status :off, :TooManyRequestsError, "TooManyRequestsError please re run the bot and be sure of executing first: killall ruby"
|
215
263
|
abort("TooManyRequestsError please re run the bot and be sure of executing first: killall ruby")
|
216
264
|
rescue Exception => stack
|
217
265
|
pp stack if config.testing
|
266
|
+
save_status :off, :wrong_admin_user, "The admin user specified on settings: #{config.admins.join(", ")}, doesn't exist on Slack. Execution aborted"
|
218
267
|
abort("The admin user specified on settings: #{config.admins.join(", ")}, doesn't exist on Slack. Execution aborted")
|
219
268
|
end
|
220
269
|
|
@@ -230,14 +279,23 @@ class SlackSmartBot
|
|
230
279
|
@questions = Hash.new()
|
231
280
|
@answer = Hash.new()
|
232
281
|
@repl_sessions = Hash.new()
|
282
|
+
@datetime_general_commands = 0
|
233
283
|
@channels_id = Hash.new()
|
234
284
|
@channels_name = Hash.new()
|
285
|
+
@channels_creator = Hash.new()
|
286
|
+
@channels_list = Hash.new()
|
235
287
|
get_channels_name_and_id()
|
236
288
|
@channel_id = @channels_id[config.channel].dup
|
237
289
|
@master_bot_id = @channels_id[config.master_channel].dup
|
238
290
|
|
291
|
+
Dir.mkdir("#{config.path}/rules/#{@channel_id}") unless Dir.exist?("#{config.path}/rules/#{@channel_id}/")
|
292
|
+
|
239
293
|
get_routines()
|
240
294
|
get_repls()
|
295
|
+
get_shares()
|
296
|
+
get_admins_channels()
|
297
|
+
get_access_channels()
|
298
|
+
|
241
299
|
if @routines.key?(@channel_id)
|
242
300
|
@routines[@channel_id].each do |k, v|
|
243
301
|
@routines[@channel_id][k][:running] = false
|
@@ -249,7 +307,7 @@ class SlackSmartBot
|
|
249
307
|
@routines.each do |ch, rout|
|
250
308
|
rout.each do |k, v|
|
251
309
|
if !v[:running] and v[:channel_name] == config.channel
|
252
|
-
create_routine_thread(k)
|
310
|
+
create_routine_thread(k, v)
|
253
311
|
end
|
254
312
|
end
|
255
313
|
end
|
@@ -258,12 +316,14 @@ class SlackSmartBot
|
|
258
316
|
m = "Connection closing, exiting. #{Time.now}"
|
259
317
|
@logger.info m
|
260
318
|
@logger.info _data
|
319
|
+
#save_status :off, :closing, "Connection closing, exiting." #todo: don't notify for the moment, remove when checked
|
261
320
|
end
|
262
321
|
|
263
322
|
client.on :closed do |_data|
|
264
323
|
m = "Connection has been disconnected. #{Time.now}"
|
265
324
|
@logger.info m
|
266
325
|
@logger.info _data
|
326
|
+
save_status :off, :disconnected, "Connection has been disconnected."
|
267
327
|
end
|
268
328
|
end
|
269
329
|
self
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# add here the general commands you will be using in any channel where The SmartBot is part of. Not necessary to use ! or ^, it will answer directly.
|
2
|
+
def general_commands(user, command, dest, files = [])
|
3
|
+
|
4
|
+
begin
|
5
|
+
case command
|
6
|
+
|
7
|
+
# help: ----------------------------------------------
|
8
|
+
# help: `cls`
|
9
|
+
# help: `clear`
|
10
|
+
# help: `clear screen`
|
11
|
+
# help: `NUMBER cls`
|
12
|
+
# help: It will send a big empty message.
|
13
|
+
# help: NUMBER (optional): number of lines. Default 100. Max 200.
|
14
|
+
# help: command_id: :cls
|
15
|
+
# help:
|
16
|
+
when /\A\s*(\d*)\s*(clear|cls|clear\s+screen)\s*\z/i
|
17
|
+
save_stats :cls
|
18
|
+
$1.to_s == '' ? lines = 100 : lines = $1.to_i
|
19
|
+
lines = 200 if lines > 200
|
20
|
+
respond (">#{"\n"*lines}<")
|
21
|
+
|
22
|
+
|
23
|
+
# this is a hidden command that it is not listed when calling bot help
|
24
|
+
when /\s*(that's\s+)?(thanks|thank\s+you|I\s+love\s+you|nice|cool)\s+(#{@salutations.join("|")})\s*!*\s*$/i
|
25
|
+
save_stats :thanks
|
26
|
+
reactions = [:heart, :heart_eyes, :blush, :relaxed, :simple_smile, :smiley, :two_hearts, :heartbeat, :green_heart ]
|
27
|
+
reactions.sample(rand(3)+1).each {|rt| react rt }
|
28
|
+
responses = ['Thank YOU', "You're welcome", "You're very welcome", 'No problem', 'No worries', "Don't mention it", 'My pleasure',
|
29
|
+
'Anytime', 'It was the least I could do', 'Glad to help', 'Sure', 'Pleasure', 'The pleasure is mine', 'It was nothing', 'Much obliged', "I'm happy to help",
|
30
|
+
'Það var ekkert', 'De nada', 'No hay de qué', 'De rien', 'Bitte', 'Prego', 'मेरा सौभाग्य है', '不客氣', 'Παρακαλώ']
|
31
|
+
respond "#{responses.sample}#{'!'*rand(4)}"
|
32
|
+
|
33
|
+
# this is a hidden command that it is not listed when calling bot help
|
34
|
+
when /\s*.*happy\s+birthday.*(<@\w+>)\s*.*$/i, /\s*.*(<@\w+>).*happy\s+birthday\s*.*$/i
|
35
|
+
unless Thread.current[:on_thread]
|
36
|
+
save_stats :happy_birthday
|
37
|
+
happy_user = $1
|
38
|
+
reactions = [:tada, :cake, :birthday]
|
39
|
+
sleep 30
|
40
|
+
reactions.sample(rand(3)+1).each {|rt| react rt }
|
41
|
+
sleep (rand(10)+5)*60 # so SmartBot is not the first one
|
42
|
+
responses = ['Happy birthday', "Very happy birthday", "Happy happy happy birthday", "Have a fabulous birthday", 'May all your wishes come true',
|
43
|
+
'Many happy returns of the day', 'I wish you a wonderful birthday', 'Have a great one', 'I hope you have a fantastic day and a fantastic year to come',
|
44
|
+
'To your happiness', "Don't count the candles. Enjoy the party", 'May your day be as awesome as you are', 'The best things in life are yet to come']
|
45
|
+
respond "#{happy_user} #{responses.sample}#{'!'*rand(4)}", :on_thread
|
46
|
+
end
|
47
|
+
|
48
|
+
else
|
49
|
+
return false
|
50
|
+
end
|
51
|
+
return true
|
52
|
+
rescue => exception
|
53
|
+
if defined?(@logger)
|
54
|
+
@logger.fatal exception
|
55
|
+
respond "Unexpected error!! Please contact an admin to solve it: <@#{config.admins.join(">, <@")}>"
|
56
|
+
else
|
57
|
+
puts exception
|
58
|
+
end
|
59
|
+
return false
|
60
|
+
end
|
61
|
+
end
|
@@ -13,7 +13,9 @@ def general_rules(user, command, processed, dest, files = [], rules_file = "")
|
|
13
13
|
# help: Examples:
|
14
14
|
# help: _echo I am the Smart Bot_
|
15
15
|
# help: _100 echo :heart:_
|
16
|
-
|
16
|
+
# help: command_id: :echo
|
17
|
+
# help:
|
18
|
+
when /\A\s*(\d*)\s*echo\s(.+)/i
|
17
19
|
save_stats :echo
|
18
20
|
$1.to_s == '' ? times = 1 : times = $1.to_i
|
19
21
|
respond ($2*times).to_s
|
@@ -25,9 +27,10 @@ def general_rules(user, command, processed, dest, files = [], rules_file = "")
|
|
25
27
|
rescue => exception
|
26
28
|
if defined?(@logger)
|
27
29
|
@logger.fatal exception
|
28
|
-
respond "Unexpected error!! Please contact an admin to solve it: <@#{
|
30
|
+
respond "Unexpected error!! Please contact an admin to solve it: <@#{config.admins.join(">, <@")}>"
|
29
31
|
else
|
30
32
|
puts exception
|
31
33
|
end
|
34
|
+
return false
|
32
35
|
end
|
33
36
|
end
|
@@ -40,15 +40,18 @@ def rules(user, command, processed, dest, files = [], rules_file = "")
|
|
40
40
|
|
41
41
|
load "#{config.path}/rules/general_rules.rb"
|
42
42
|
|
43
|
-
|
43
|
+
if general_rules(user, command, processed, dest, files, rules_file)
|
44
|
+
return true
|
45
|
+
else
|
44
46
|
begin
|
45
47
|
case command
|
46
48
|
|
47
49
|
# help: ----------------------------------------------
|
48
50
|
# help: `go to sleep`
|
49
51
|
# help: it will sleep the bot for 5 seconds
|
52
|
+
# help: command_id: :go_to_sleep
|
50
53
|
# help:
|
51
|
-
when
|
54
|
+
when /\A\s*go\sto\ssleep/i
|
52
55
|
save_stats :go_to_sleep
|
53
56
|
if answer.empty?
|
54
57
|
ask "do you want me to take a siesta?"
|
@@ -74,32 +77,41 @@ def rules(user, command, processed, dest, files = [], rules_file = "")
|
|
74
77
|
# help: ----------------------------------------------
|
75
78
|
# help: `run something`
|
76
79
|
# help: It will run the process and report the results when done
|
80
|
+
# help: command_id: :run_something
|
77
81
|
# help:
|
78
|
-
when
|
82
|
+
when /\Arun something/i
|
79
83
|
save_stats :run_something
|
80
|
-
|
84
|
+
if has_access?(:run_something, user)
|
85
|
+
react :runner
|
81
86
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
87
|
+
process_to_run = "ruby -v"
|
88
|
+
process_to_run = ("cd #{project_folder} &&" + process_to_run) if defined?(project_folder)
|
89
|
+
stdout, stderr, status = Open3.capture3(process_to_run)
|
90
|
+
unreact :runner
|
91
|
+
if stderr == ""
|
92
|
+
if stdout == ""
|
93
|
+
respond "#{display_name}: Nothing returned."
|
94
|
+
else
|
95
|
+
respond "#{display_name}: #{stdout}"
|
96
|
+
end
|
89
97
|
else
|
90
|
-
respond "#{display_name}: #{stdout}"
|
98
|
+
respond "#{display_name}: #{stdout} #{stderr}"
|
91
99
|
end
|
92
|
-
else
|
93
|
-
respond "#{display_name}: #{stdout} #{stderr}"
|
94
100
|
end
|
95
101
|
|
96
102
|
# Emoticons you can use with `react` command https://www.webfx.com/tools/emoji-cheat-sheet/
|
97
103
|
|
98
|
-
# Examples for respond and respond_direct
|
104
|
+
# Examples for respond, respond_thread and respond_direct
|
99
105
|
# # send 'the message' to the channel or direct message where the command was written
|
100
106
|
# respond "the message"
|
101
107
|
# # send 'the message' privately as a direct message to the user that sent the command
|
102
108
|
# respond_direct "the message"
|
109
|
+
# # same thing can be done:
|
110
|
+
# respond "the message", :direct
|
111
|
+
# # send 'the message' opening a thread
|
112
|
+
# respond_thread "the message"
|
113
|
+
# # same thing can be done:
|
114
|
+
# respond 'the message', :on_thread
|
103
115
|
# # send 'the message' to a specific channel name
|
104
116
|
# respond "the message", 'my_channel'
|
105
117
|
# # send 'the message' to a specific channel id
|
@@ -109,6 +121,19 @@ def rules(user, command, processed, dest, files = [], rules_file = "")
|
|
109
121
|
# # send 'the message' to a specific user id as direct message
|
110
122
|
# respond "the message", 'US3344D3'
|
111
123
|
|
124
|
+
# Example sending blocks https://api.slack.com/block-kit
|
125
|
+
# my_blocks = [
|
126
|
+
# { type: "context",
|
127
|
+
# elements:
|
128
|
+
# [
|
129
|
+
# { type: "plain_text", :text=>"\tInfo: " },
|
130
|
+
# { type: "image", image_url: "https://avatars.slack-edge.com/2021-03-23/182815_e54abb1dd_24.jpg", alt_text: "mario" },
|
131
|
+
# { type: "mrkdwn", text: " *Mario Ruiz* (marior) " }
|
132
|
+
# ]
|
133
|
+
# }
|
134
|
+
# ]
|
135
|
+
# respond blocks: my_blocks
|
136
|
+
|
112
137
|
# Example downloading a file from slack
|
113
138
|
# if !files.nil? and files.size == 1 and files[0].filetype == 'yaml'
|
114
139
|
# require 'nice_http'
|
@@ -120,16 +145,17 @@ def rules(user, command, processed, dest, files = [], rules_file = "")
|
|
120
145
|
# send_file(to, msg, filepath, title, format, type = "text")
|
121
146
|
# send_file(dest, 'the message', "#{project_folder}/temp/logs_ptBI.log", 'title', 'text/plain', "text")
|
122
147
|
# send_file(dest, 'the message', "#{project_folder}/temp/example.jpeg", 'title', 'image/jpeg', "jpg")
|
123
|
-
|
124
|
-
|
125
148
|
else
|
126
149
|
unless processed
|
127
150
|
dont_understand()
|
128
151
|
end
|
152
|
+
return false
|
129
153
|
end
|
154
|
+
return true
|
130
155
|
rescue => exception
|
131
156
|
@logger.fatal exception
|
132
157
|
respond "Unexpected error!! Please contact an admin to solve it: <@#{config.admins.join(">, <@")}>"
|
158
|
+
return false
|
133
159
|
end
|
134
160
|
end
|
135
161
|
end
|
data/whats_new.txt
CHANGED
@@ -1,18 +1,23 @@
|
|
1
|
-
*Version 1.
|
1
|
+
*Version 1.11.0* Released 2022-May-09
|
2
2
|
|
3
3
|
*For General users*
|
4
|
-
-
|
5
|
-
- `
|
6
|
-
-
|
7
|
-
-
|
8
|
-
-
|
9
|
-
-
|
10
|
-
-
|
11
|
-
-
|
12
|
-
|
13
|
-
------------------------------
|
4
|
+
- `run repl` displays results as code in case a value on stdout is returned as Hash or Array (<https://github.com/MarioRuiz/slack-smart-bot/issues/41|#41>).
|
5
|
+
- `repl` command displays results when using iterators and printing results (<https://github.com/MarioRuiz/slack-smart-bot/issues/35|#35>).
|
6
|
+
- `see command ids` will return the command ids. (<https://github.com/MarioRuiz/slack-smart-bot/issues/43|#43>)
|
7
|
+
- `poster MESSAGE`, `poster :EMOTICON_TEXT: MESSAGE`, `poster :EMOTICON_TEXT: :EMOTICON_BACKGROUND: MESSAGE`, `poster MINUTESm MESSAGE` It will create a poster with the message supplied. By default will be autodeleted 1 minute later. (<https://github.com/MarioRuiz/slack-smart-bot/issues/34|#34>)
|
8
|
+
- `who is available?` show members of the channel that are on line and not on a meeting or vacation or sick. (<https://github.com/MarioRuiz/slack-smart-bot/issues/52|#52>)
|
9
|
+
- You can add, update, see, ping, contact, and delete teams. When calling `see TEAM_NAME team` the availability of the members will be displayed. Call `bot help teams` for more info. (<https://github.com/MarioRuiz/slack-smart-bot/issues/53|#53>)
|
10
|
+
- repl improvements (<https://github.com/MarioRuiz/slack-smart-bot/issues/54|#54>)
|
11
|
+
- new Master command `where is smartbot?` will return the channels where the SmartBot is a member. (<https://github.com/MarioRuiz/slack-smart-bot/issues/56|#56>)
|
12
|
+
|
14
13
|
*For Admin users*
|
15
|
-
-
|
16
|
-
-
|
17
|
-
-
|
18
|
-
- `
|
14
|
+
- When calling `respond` it can be supplied the argument `return_message: true` to get access to the posted message. `msg = respond('my message', return_message: true)` (<https://github.com/MarioRuiz/slack-smart-bot/issues/31|#31>)
|
15
|
+
- New command `delete message URL` will delete the SmartBot message supplied. Only for Master Admins (<https://github.com/MarioRuiz/slack-smart-bot/issues/32|#32>).
|
16
|
+
- `send message` accept also the url of the message to respond on a thread. Only for Master Admins (<https://github.com/MarioRuiz/slack-smart-bot/issues/39|#39>).
|
17
|
+
- `react to` accept also the url of the message. Only for Master Admins (<https://github.com/MarioRuiz/slack-smart-bot/issues/40|#40>).
|
18
|
+
- You can add, remove and list admins of any channel by using: `add admin @user`, `remove admin @user` and `see admins`. You need to be the creator of the channel, a Master admin or an admin (<https://github.com/MarioRuiz/slack-smart-bot/issues/42|#42>).
|
19
|
+
- `see access COMMAND_ID`, `allow access COMMAND_ID`, `allow access COMMAND_ID @user1 @user99` and `deny access COMMAND_ID`: Allows us to decide which commands are accessible on every channel. (<https://github.com/MarioRuiz/slack-smart-bot/issues/44|#44>).
|
20
|
+
|
21
|
+
------------------------------
|
22
|
+
|
23
|
+
*Previous*: <https://github.com/MarioRuiz/slack-smart-bot/blob/dd23939f93ee95aca3c04d33cd1ce197d6efbd37/whats_new.txt|1.10.0>
|
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.11.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:
|
11
|
+
date: 2022-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slack-ruby-client
|
@@ -58,6 +58,26 @@ dependencies:
|
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '1'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: string_pattern
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '2'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 2.2.3
|
71
|
+
type: :runtime
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 2.2.3
|
61
81
|
- !ruby/object:Gem::Dependency
|
62
82
|
name: async-websocket
|
63
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -125,31 +145,53 @@ files:
|
|
125
145
|
- LICENSE
|
126
146
|
- README.md
|
127
147
|
- lib/slack-smart-bot.rb
|
148
|
+
- lib/slack-smart-bot_general_commands.rb
|
128
149
|
- lib/slack-smart-bot_general_rules.rb
|
129
150
|
- lib/slack-smart-bot_rules.rb
|
130
151
|
- lib/slack/smart-bot/comm.rb
|
131
152
|
- lib/slack/smart-bot/comm/ask.rb
|
153
|
+
- lib/slack/smart-bot/comm/delete.rb
|
132
154
|
- lib/slack/smart-bot/comm/dont_understand.rb
|
133
155
|
- lib/slack/smart-bot/comm/event_hello.rb
|
134
156
|
- lib/slack/smart-bot/comm/get_channel_members.rb
|
135
157
|
- lib/slack/smart-bot/comm/get_channels.rb
|
158
|
+
- lib/slack/smart-bot/comm/get_presence.rb
|
136
159
|
- lib/slack/smart-bot/comm/get_user_info.rb
|
160
|
+
- lib/slack/smart-bot/comm/get_users.rb
|
137
161
|
- lib/slack/smart-bot/comm/react.rb
|
138
162
|
- lib/slack/smart-bot/comm/respond.rb
|
139
163
|
- lib/slack/smart-bot/comm/respond_direct.rb
|
164
|
+
- lib/slack/smart-bot/comm/respond_thread.rb
|
140
165
|
- lib/slack/smart-bot/comm/send_file.rb
|
141
166
|
- lib/slack/smart-bot/comm/send_msg_channel.rb
|
142
167
|
- lib/slack/smart-bot/comm/send_msg_user.rb
|
143
168
|
- lib/slack/smart-bot/comm/unreact.rb
|
144
169
|
- lib/slack/smart-bot/commands.rb
|
170
|
+
- lib/slack/smart-bot/commands/general/add_admin.rb
|
171
|
+
- lib/slack/smart-bot/commands/general/add_announcement.rb
|
172
|
+
- lib/slack/smart-bot/commands/general/add_team.rb
|
173
|
+
- lib/slack/smart-bot/commands/general/allow_access.rb
|
145
174
|
- lib/slack/smart-bot/commands/general/bot_help.rb
|
146
|
-
- lib/slack/smart-bot/commands/general/bot_stats.rb
|
147
|
-
- lib/slack/smart-bot/commands/general/bot_status.rb
|
148
175
|
- lib/slack/smart-bot/commands/general/bye_bot.rb
|
176
|
+
- lib/slack/smart-bot/commands/general/delete_announcement.rb
|
177
|
+
- lib/slack/smart-bot/commands/general/delete_share.rb
|
178
|
+
- lib/slack/smart-bot/commands/general/delete_team.rb
|
179
|
+
- lib/slack/smart-bot/commands/general/deny_access.rb
|
149
180
|
- lib/slack/smart-bot/commands/general/hi_bot.rb
|
150
|
-
- lib/slack/smart-bot/commands/general/
|
151
|
-
- lib/slack/smart-bot/commands/general/
|
152
|
-
- lib/slack/smart-bot/commands/general/
|
181
|
+
- lib/slack/smart-bot/commands/general/ping_team.rb
|
182
|
+
- lib/slack/smart-bot/commands/general/poster.rb
|
183
|
+
- lib/slack/smart-bot/commands/general/remove_admin.rb
|
184
|
+
- lib/slack/smart-bot/commands/general/see_access.rb
|
185
|
+
- lib/slack/smart-bot/commands/general/see_admins.rb
|
186
|
+
- lib/slack/smart-bot/commands/general/see_announcements.rb
|
187
|
+
- lib/slack/smart-bot/commands/general/see_command_ids.rb
|
188
|
+
- lib/slack/smart-bot/commands/general/see_favorite_commands.rb
|
189
|
+
- lib/slack/smart-bot/commands/general/see_shares.rb
|
190
|
+
- lib/slack/smart-bot/commands/general/see_statuses.rb
|
191
|
+
- lib/slack/smart-bot/commands/general/see_teams.rb
|
192
|
+
- lib/slack/smart-bot/commands/general/share_messages.rb
|
193
|
+
- lib/slack/smart-bot/commands/general/update_team.rb
|
194
|
+
- lib/slack/smart-bot/commands/general_bot_commands.rb
|
153
195
|
- lib/slack/smart-bot/commands/on_bot/add_shortcut.rb
|
154
196
|
- lib/slack/smart-bot/commands/on_bot/admin/add_routine.rb
|
155
197
|
- lib/slack/smart-bot/commands/on_bot/admin/extend_rules.rb
|
@@ -157,13 +199,24 @@ files:
|
|
157
199
|
- lib/slack/smart-bot/commands/on_bot/admin/pause_routine.rb
|
158
200
|
- lib/slack/smart-bot/commands/on_bot/admin/remove_routine.rb
|
159
201
|
- lib/slack/smart-bot/commands/on_bot/admin/run_routine.rb
|
202
|
+
- lib/slack/smart-bot/commands/on_bot/admin/see_result_routine.rb
|
160
203
|
- lib/slack/smart-bot/commands/on_bot/admin/see_routines.rb
|
161
204
|
- lib/slack/smart-bot/commands/on_bot/admin/start_bot.rb
|
162
205
|
- lib/slack/smart-bot/commands/on_bot/admin/start_routine.rb
|
163
206
|
- lib/slack/smart-bot/commands/on_bot/admin/stop_using_rules_on.rb
|
207
|
+
- lib/slack/smart-bot/commands/on_bot/admin_master/delete_message.rb
|
164
208
|
- lib/slack/smart-bot/commands/on_bot/admin_master/get_bot_logs.rb
|
209
|
+
- lib/slack/smart-bot/commands/on_bot/admin_master/react_to.rb
|
210
|
+
- lib/slack/smart-bot/commands/on_bot/admin_master/send_message.rb
|
165
211
|
- lib/slack/smart-bot/commands/on_bot/delete_repl.rb
|
166
212
|
- lib/slack/smart-bot/commands/on_bot/delete_shortcut.rb
|
213
|
+
- lib/slack/smart-bot/commands/on_bot/general/bot_stats.rb
|
214
|
+
- lib/slack/smart-bot/commands/on_bot/general/bot_status.rb
|
215
|
+
- lib/slack/smart-bot/commands/on_bot/general/leaderboard.rb
|
216
|
+
- lib/slack/smart-bot/commands/on_bot/general/stop_using_rules.rb
|
217
|
+
- lib/slack/smart-bot/commands/on_bot/general/suggest_command.rb
|
218
|
+
- lib/slack/smart-bot/commands/on_bot/general/use_rules.rb
|
219
|
+
- lib/slack/smart-bot/commands/on_bot/general/whats_new.rb
|
167
220
|
- lib/slack/smart-bot/commands/on_bot/get_repl.rb
|
168
221
|
- lib/slack/smart-bot/commands/on_bot/repl.rb
|
169
222
|
- lib/slack/smart-bot/commands/on_bot/ruby_code.rb
|
@@ -174,8 +227,11 @@ files:
|
|
174
227
|
- lib/slack/smart-bot/commands/on_master/admin/kill_bot_on_channel.rb
|
175
228
|
- lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb
|
176
229
|
- lib/slack/smart-bot/commands/on_master/admin_master/notify_message.rb
|
230
|
+
- lib/slack/smart-bot/commands/on_master/admin_master/publish_announcements.rb
|
231
|
+
- lib/slack/smart-bot/commands/on_master/admin_master/set_general_message.rb
|
177
232
|
- lib/slack/smart-bot/commands/on_master/admin_master/set_maintenance.rb
|
178
233
|
- lib/slack/smart-bot/commands/on_master/create_bot.rb
|
234
|
+
- lib/slack/smart-bot/commands/on_master/where_smartbot.rb
|
179
235
|
- lib/slack/smart-bot/listen.rb
|
180
236
|
- lib/slack/smart-bot/process.rb
|
181
237
|
- lib/slack/smart-bot/process_first.rb
|
@@ -185,19 +241,30 @@ files:
|
|
185
241
|
- lib/slack/smart-bot/utils/answer_delete.rb
|
186
242
|
- lib/slack/smart-bot/utils/build_help.rb
|
187
243
|
- lib/slack/smart-bot/utils/create_routine_thread.rb
|
244
|
+
- lib/slack/smart-bot/utils/get_access_channels.rb
|
245
|
+
- lib/slack/smart-bot/utils/get_admins_channels.rb
|
188
246
|
- lib/slack/smart-bot/utils/get_bots_created.rb
|
189
247
|
- lib/slack/smart-bot/utils/get_channels_name_and_id.rb
|
248
|
+
- lib/slack/smart-bot/utils/get_command_ids.rb
|
190
249
|
- lib/slack/smart-bot/utils/get_help.rb
|
191
250
|
- lib/slack/smart-bot/utils/get_repls.rb
|
192
251
|
- lib/slack/smart-bot/utils/get_routines.rb
|
193
252
|
- lib/slack/smart-bot/utils/get_rules_imported.rb
|
253
|
+
- lib/slack/smart-bot/utils/get_shares.rb
|
254
|
+
- lib/slack/smart-bot/utils/get_teams.rb
|
255
|
+
- lib/slack/smart-bot/utils/has_access.rb
|
256
|
+
- lib/slack/smart-bot/utils/is_admin.rb
|
194
257
|
- lib/slack/smart-bot/utils/remove_hash_keys.rb
|
195
258
|
- lib/slack/smart-bot/utils/save_stats.rb
|
259
|
+
- lib/slack/smart-bot/utils/save_status.rb
|
260
|
+
- lib/slack/smart-bot/utils/update_access_channels.rb
|
261
|
+
- lib/slack/smart-bot/utils/update_admins_channels.rb
|
196
262
|
- lib/slack/smart-bot/utils/update_bots_file.rb
|
197
263
|
- lib/slack/smart-bot/utils/update_repls.rb
|
198
264
|
- lib/slack/smart-bot/utils/update_routines.rb
|
199
265
|
- lib/slack/smart-bot/utils/update_rules_imported.rb
|
200
266
|
- lib/slack/smart-bot/utils/update_shortcuts_file.rb
|
267
|
+
- lib/slack/smart-bot/utils/update_teams.rb
|
201
268
|
- whats_new.txt
|
202
269
|
homepage: https://github.com/MarioRuiz/slack-smart-bot
|
203
270
|
licenses:
|
@@ -211,14 +278,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
211
278
|
requirements:
|
212
279
|
- - ">="
|
213
280
|
- !ruby/object:Gem::Version
|
214
|
-
version: '2.
|
281
|
+
version: '2.6'
|
215
282
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
216
283
|
requirements:
|
217
284
|
- - ">="
|
218
285
|
- !ruby/object:Gem::Version
|
219
286
|
version: '0'
|
220
287
|
requirements: []
|
221
|
-
rubygems_version: 3.2.
|
288
|
+
rubygems_version: 3.2.15
|
222
289
|
signing_key:
|
223
290
|
specification_version: 4
|
224
291
|
summary: Create a Slack bot that is smart and so easy to expand, create new bots on
|