slack-smart-bot 0.4.2 → 0.5.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 +1 -1
- data/lib/slack-smart-bot.rb +164 -116
- data/lib/slack-smart-bot_rules.rb +11 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e7d4c61f5af43020d2948de27af7ed5ee143f031c312c48eec1853938c42138
|
4
|
+
data.tar.gz: b064405f4cd90e726098d1dd1ab3c9e70c779144cd834489af62a1eb4ea743ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 514ad2e812b624790e75116fac89a98873218c72f250ce303c18bd27b2492f96c59d0a75d30fd84b7f7dc6036dc9cd3e242a0128fccb8ffce5054619e4d3abd9
|
7
|
+
data.tar.gz: a6ff2c48d41f219816ac4a658fe9cb7b71f5da47c9aa542f5b2a409c6b81ca4d60f59fbcc576d9dfe70c860bb2ff254cb4df88073cfb6595ecae9e69cf8e07a8
|
data/README.md
CHANGED
@@ -57,7 +57,7 @@ The rules file can be edited and will be only affecting this particular bot.
|
|
57
57
|
You can add all the rules you want for your bot in the rules file, this is an example:
|
58
58
|
|
59
59
|
```ruby
|
60
|
-
def rules(user, command, processed,
|
60
|
+
def rules(user, command, processed, dest)
|
61
61
|
from = user.name
|
62
62
|
firstname = from.split(" ").first
|
63
63
|
case command
|
data/lib/slack-smart-bot.rb
CHANGED
@@ -142,25 +142,63 @@ class SlackSmartBot
|
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
145
|
+
#help: ===================================
|
146
|
+
#help:
|
147
|
+
#help: *Commands from Channels without a bot:*
|
148
|
+
#help:
|
149
|
+
#help: ----------------------------------------------
|
150
|
+
#help:
|
151
|
+
#help: `@BOT_NAME on #CHANNEL_NAME COMMAND`
|
152
|
+
#help: `@BOT_NAME #CHANNEL_NAME COMMAND`
|
153
|
+
#help: It will run the supplied command using the rules on the channel supplied.
|
154
|
+
#help: You need to join the specified channel to be able to use those rules.
|
155
|
+
#help: The only
|
145
156
|
def listen
|
146
157
|
@salutations = [config[:nick], config[:nick_id], "bot", "smart"]
|
147
158
|
client.on :message do |data|
|
148
|
-
if data.channel[0] ==
|
149
|
-
|
150
|
-
else
|
151
|
-
|
159
|
+
if data.channel[0] == 'D' or data.channel[0] == "C" #Direct message or Channel
|
160
|
+
dest = data.channel
|
161
|
+
else # not treated
|
162
|
+
dest = nil
|
152
163
|
end
|
164
|
+
#todo: sometimes data.user is nil, check the problem.
|
165
|
+
@logger.warn "!dest is nil. user: #{data.user}, channel: #{data.channel}, message: #{data.text}" if dest.nil?
|
153
166
|
# Direct messages are treated only on the master bot
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
167
|
+
@logger.info dest.inspect
|
168
|
+
@logger.info data.text
|
169
|
+
if !dest.nil? and ((dest[0] == 'D' and ON_MASTER_BOT) or (dest[0] == 'C'))
|
170
|
+
user_info = wclient.users_info(user: data.user)
|
171
|
+
#todo: check to remove user_info.user.name == config[:nick] since I think we will never get messages from the bot on slack
|
172
|
+
# if Direct message or we are in the channel of the bot
|
173
|
+
if dest[0]=='D' or @channels_id[CHANNEL] == data.channel or user_info.user.name == config[:nick]
|
174
|
+
res = process_first(user_info.user, data.text, dest, data.channel)
|
175
|
+
next if res.to_s == "next"
|
176
|
+
# if @botname on #channel_rules: do something
|
177
|
+
elsif data.text.match(/^<@#{config[:nick_id]}>\s(on\s)?<#(\w+)\|(.+)>\s*:?\s*(.+)$/i)
|
178
|
+
channel_rules = $2
|
179
|
+
channel_rules_name = $3
|
180
|
+
command = $4
|
181
|
+
command = "!" + command unless command[0]=="!"
|
182
|
+
|
183
|
+
if @channels_id[CHANNEL] == channel_rules #to be treated only on the bot of the requested channel
|
184
|
+
dest = data.channel
|
185
|
+
channels = wclient.channels_list.channels
|
186
|
+
channel_found = channels.detect { |c| c.name == channel_rules_name }
|
187
|
+
if channel_found.nil?
|
188
|
+
@logger.fatal "Not possible to find the channel #{channel_rules_name}"
|
189
|
+
elsif channel_found.name == MASTER_CHANNEL
|
190
|
+
respond "You cannot use the rules from Master Channel on any other channel.", dest
|
191
|
+
elsif user_info.user.id == channel_found.creator or channel_found.members.include?(user_info.user.id)
|
192
|
+
res = process_first(user_info.user, command, dest, channel_rules)
|
193
|
+
next if res.to_s == "next"
|
194
|
+
else
|
195
|
+
respond "You need to join the channel <##{channel_found.id}> to be able to use the rules.", dest
|
196
|
+
end
|
163
197
|
end
|
198
|
+
elsif @questions.keys.include?(user_info.user.name)
|
199
|
+
dest = data.channel
|
200
|
+
res = process_first(user_info.user, data.text, dest, @channels_id[CHANNEL])
|
201
|
+
next if res.to_s == "next"
|
164
202
|
end
|
165
203
|
end
|
166
204
|
end
|
@@ -169,7 +207,7 @@ class SlackSmartBot
|
|
169
207
|
client.start!
|
170
208
|
end
|
171
209
|
|
172
|
-
def process_first(user, text,
|
210
|
+
def process_first(user, text, dest, dchannel)
|
173
211
|
nick = user.name
|
174
212
|
#todo: verify if on slack on anytime nick == config[:nick]
|
175
213
|
if nick == config[:nick] or nick == (config[:nick] + " · Bot") #if message is coming from the bot
|
@@ -204,7 +242,7 @@ class SlackSmartBot
|
|
204
242
|
elsif @shortcuts.keys.include?(:all) and @shortcuts[:all].keys.include?(shortcut)
|
205
243
|
text = @shortcuts[:all][shortcut].dup
|
206
244
|
else
|
207
|
-
respond "Shortcut not found",
|
245
|
+
respond "Shortcut not found", dest
|
208
246
|
return :next
|
209
247
|
end
|
210
248
|
text = "!" + text if addexcl and text[0] != "!"
|
@@ -219,7 +257,7 @@ class SlackSmartBot
|
|
219
257
|
begin
|
220
258
|
t = Thread.new do
|
221
259
|
begin
|
222
|
-
processed = process(user, command,
|
260
|
+
processed = process(user, command, dest, dchannel)
|
223
261
|
@logger.info "command: #{nick}> #{command}" if processed
|
224
262
|
on_demand = false
|
225
263
|
if command.match(/^@?(#{config[:nick]}):*\s+(.+)$/i) or
|
@@ -231,10 +269,10 @@ class SlackSmartBot
|
|
231
269
|
if @status == :on and
|
232
270
|
(@questions.keys.include?(nick) or
|
233
271
|
@listening.include?(nick) or
|
234
|
-
|
272
|
+
dest[0]=='D' or on_demand)
|
235
273
|
@logger.info "command: #{nick}> #{command}" unless processed
|
236
274
|
#todo: verify this
|
237
|
-
if
|
275
|
+
if dest[0]=='C' #only for channels, not for DM
|
238
276
|
rules_file = RULES_FILE
|
239
277
|
if @rules_imported.key?(user.id) and @rules_imported[user.id].key?(dchannel)
|
240
278
|
unless @bots_created.key?(@rules_imported[user.id][dchannel])
|
@@ -256,7 +294,7 @@ class SlackSmartBot
|
|
256
294
|
if defined?(rules)
|
257
295
|
command[0] = "" if command[0] == "!"
|
258
296
|
command.gsub!(/^@\w+:*\s*/, "")
|
259
|
-
rules(user, command, processed,
|
297
|
+
rules(user, command, processed, dest)
|
260
298
|
else
|
261
299
|
@logger.warn "It seems like rules method is not defined"
|
262
300
|
end
|
@@ -281,7 +319,7 @@ class SlackSmartBot
|
|
281
319
|
if defined?(rules)
|
282
320
|
command[0] = "" if command[0] == "!"
|
283
321
|
command.gsub!(/^@\w+:*\s*/, "")
|
284
|
-
rules(user, command, processed,
|
322
|
+
rules(user, command, processed, dest)
|
285
323
|
else
|
286
324
|
@logger.warn "It seems like rules method is not defined"
|
287
325
|
end
|
@@ -289,7 +327,7 @@ class SlackSmartBot
|
|
289
327
|
@logger.info "it is a direct message with no rules file selected so no rules file executed."
|
290
328
|
unless processed
|
291
329
|
resp = ["what", "huh", "sorry", "what do you mean", "I don't understand"].sample
|
292
|
-
respond "#{resp}?",
|
330
|
+
respond "#{resp}?", dest
|
293
331
|
end
|
294
332
|
end
|
295
333
|
end
|
@@ -306,7 +344,7 @@ class SlackSmartBot
|
|
306
344
|
#help:
|
307
345
|
#help: *General commands:*
|
308
346
|
#help:
|
309
|
-
def process(user, command,
|
347
|
+
def process(user, command, dest, dchannel)
|
310
348
|
from = user.name
|
311
349
|
firstname = from.split(/ /).first
|
312
350
|
processed = true
|
@@ -317,17 +355,17 @@ class SlackSmartBot
|
|
317
355
|
#help: `Hello Bot`
|
318
356
|
#help: `Hello Smart`
|
319
357
|
#help: `Hello THE_NAME_OF_THE_BOT`
|
320
|
-
#help:
|
358
|
+
#help: Also apart of Hello you can use _Hallo, Hi, Hola, What's up, Hey, Hæ_
|
321
359
|
#help: Bot starts listening to you
|
322
360
|
#help:
|
323
361
|
when /^(Hello|Hallo|Hi|Hola|What's\sup|Hey|Hæ)\s(#{@salutations.join("|")})\s*$/i
|
324
362
|
if @status == :on
|
325
363
|
greetings = ["Hello", "Hallo", "Hi", "Hola", "What's up", "Hey", "Hæ"].sample
|
326
|
-
respond "#{greetings} #{firstname}",
|
327
|
-
if @rules_imported.key?(user.id) and @rules_imported[user.id].key?(user.id) and
|
328
|
-
respond "You are using specific rules for channel: <##{@rules_imported[user.id][user.id]}>",
|
329
|
-
elsif @rules_imported.key?(user.id) and @rules_imported[user.id].key?(dchannel) and
|
330
|
-
respond "You are using specific rules for channel: <##{@rules_imported[user.id][dchannel]}>",
|
364
|
+
respond "#{greetings} #{firstname}", dest
|
365
|
+
if @rules_imported.key?(user.id) and @rules_imported[user.id].key?(user.id) and dest[0]=='D'
|
366
|
+
respond "You are using specific rules for channel: <##{@rules_imported[user.id][user.id]}>", dest
|
367
|
+
elsif @rules_imported.key?(user.id) and @rules_imported[user.id].key?(dchannel) and dest[0]=='C'
|
368
|
+
respond "You are using specific rules for channel: <##{@rules_imported[user.id][dchannel]}>", dest
|
331
369
|
end
|
332
370
|
@listening << from unless @listening.include?(from)
|
333
371
|
end
|
@@ -336,13 +374,13 @@ class SlackSmartBot
|
|
336
374
|
#help: `Bye Bot`
|
337
375
|
#help: `Bye Smart`
|
338
376
|
#help: `Bye NAME_OF_THE_BOT`
|
339
|
-
#help:
|
377
|
+
#help: Also apart of Bye you can use _Bæ, Good Bye, Adiós, Ciao, Bless, Bless Bless, Adeu_
|
340
378
|
#help: Bot stops listening to you
|
341
379
|
#help:
|
342
380
|
when /^(Bye|Bæ|Good\sBye|Adiós|Ciao|Bless|Bless\sBless|Adeu)\s(#{@salutations.join("|")})\s*$/i
|
343
381
|
if @status == :on
|
344
382
|
bye = ["Bye", "Bæ", "Good Bye", "Adiós", "Ciao", "Bless", "Bless bless", "Adeu"].sample
|
345
|
-
respond "#{bye} #{firstname}",
|
383
|
+
respond "#{bye} #{firstname}", dest
|
346
384
|
@listening.delete(from)
|
347
385
|
end
|
348
386
|
|
@@ -357,12 +395,12 @@ class SlackSmartBot
|
|
357
395
|
if ON_MASTER_BOT
|
358
396
|
if ADMIN_USERS.include?(from) #admin user
|
359
397
|
unless @questions.keys.include?(from)
|
360
|
-
ask("are you sure?", command, from,
|
398
|
+
ask("are you sure?", command, from, dest)
|
361
399
|
else
|
362
400
|
case @questions[from]
|
363
401
|
when /yes/i, /yep/i, /sure/i
|
364
|
-
respond "Game over!",
|
365
|
-
respond "Ciao #{firstname}!",
|
402
|
+
respond "Game over!", dest
|
403
|
+
respond "Ciao #{firstname}!", dest
|
366
404
|
@bots_created.each { |key, value|
|
367
405
|
value[:thread] = ""
|
368
406
|
send_msg_channel(key, "Bot has been closed by #{from}")
|
@@ -373,17 +411,17 @@ class SlackSmartBot
|
|
373
411
|
exit!
|
374
412
|
when /no/i, /nope/i, /cancel/i
|
375
413
|
@questions.delete(from)
|
376
|
-
respond "Thanks, I'm happy to be alive",
|
414
|
+
respond "Thanks, I'm happy to be alive", dest
|
377
415
|
else
|
378
|
-
respond "I don't understand",
|
379
|
-
ask("are you sure do you want me to close? (yes or no)", "quit bot", from,
|
416
|
+
respond "I don't understand", dest
|
417
|
+
ask("are you sure do you want me to close? (yes or no)", "quit bot", from, dest)
|
380
418
|
end
|
381
419
|
end
|
382
420
|
else
|
383
|
-
respond "Only admin users can kill me",
|
421
|
+
respond "Only admin users can kill me", dest
|
384
422
|
end
|
385
423
|
else
|
386
|
-
respond "To do this you need to be an admin user in the master channel: <##{@channels_id[MASTER_CHANNEL]}>",
|
424
|
+
respond "To do this you need to be an admin user in the master channel: <##{@channels_id[MASTER_CHANNEL]}>", dest
|
387
425
|
end
|
388
426
|
|
389
427
|
#helpadmin: ----------------------------------------------
|
@@ -394,14 +432,14 @@ class SlackSmartBot
|
|
394
432
|
#helpadmin:
|
395
433
|
when /^start\s(this\s)?bot$/i
|
396
434
|
if ADMIN_USERS.include?(from) #admin user
|
397
|
-
respond "This bot is running and listening from now on. You can pause again: pause this bot",
|
435
|
+
respond "This bot is running and listening from now on. You can pause again: pause this bot", dest
|
398
436
|
@status = :on
|
399
437
|
unless ON_MASTER_BOT
|
400
438
|
get_channels_name_and_id() unless @channels_name.keys.include?(MASTER_CHANNEL) and @channels_name.keys.include?(CHANNEL)
|
401
439
|
send_msg_channel @channels_name[MASTER_CHANNEL], "Changed status on #{@channels_name[CHANNEL]} to :on"
|
402
440
|
end
|
403
441
|
else
|
404
|
-
respond "Only admin users can change my status",
|
442
|
+
respond "Only admin users can change my status", dest
|
405
443
|
end
|
406
444
|
|
407
445
|
#helpadmin: ----------------------------------------------
|
@@ -412,15 +450,15 @@ class SlackSmartBot
|
|
412
450
|
#helpadmin:
|
413
451
|
when /^pause\s(this\s)?bot$/i
|
414
452
|
if ADMIN_USERS.include?(from) #admin user
|
415
|
-
respond "This bot is paused from now on. You can start it again: start this bot",
|
416
|
-
respond "zZzzzzZzzzzZZZZZZzzzzzzzz",
|
453
|
+
respond "This bot is paused from now on. You can start it again: start this bot", dest
|
454
|
+
respond "zZzzzzZzzzzZZZZZZzzzzzzzz", dest
|
417
455
|
@status = :paused
|
418
456
|
unless ON_MASTER_BOT
|
419
457
|
get_channels_name_and_id() unless @channels_name.keys.include?(MASTER_CHANNEL) and @channels_name.keys.include?(CHANNEL)
|
420
458
|
send_msg_channel @channels_name[MASTER_CHANNEL], "Changed status on #{@channels_name[CHANNEL]} to :paused"
|
421
459
|
end
|
422
460
|
else
|
423
|
-
respond "Only admin users can put me on pause",
|
461
|
+
respond "Only admin users can put me on pause", dest
|
424
462
|
end
|
425
463
|
|
426
464
|
#helpadmin: ----------------------------------------------
|
@@ -429,12 +467,12 @@ class SlackSmartBot
|
|
429
467
|
#helpadmin: If on master channel and admin user also it will display info about bots created
|
430
468
|
#helpadmin:
|
431
469
|
when /^bot\sstatus/i
|
432
|
-
respond "Status: #{@status}. Version: #{VERSION}. Rules file: #{File.basename RULES_FILE} ",
|
470
|
+
respond "Status: #{@status}. Version: #{VERSION}. Rules file: #{File.basename RULES_FILE} ", dest
|
433
471
|
if @status == :on
|
434
|
-
respond "I'm listening to [#{@listening.join(", ")}]",
|
472
|
+
respond "I'm listening to [#{@listening.join(", ")}]", dest
|
435
473
|
if ON_MASTER_BOT and ADMIN_USERS.include?(from)
|
436
474
|
@bots_created.each { |key, value|
|
437
|
-
respond "#{key}: #{value}",
|
475
|
+
respond "#{key}: #{value}", dest
|
438
476
|
}
|
439
477
|
end
|
440
478
|
end
|
@@ -460,13 +498,13 @@ class SlackSmartBot
|
|
460
498
|
channel_found = channels.detect { |c| c.name == channel }
|
461
499
|
|
462
500
|
if channel_id.nil?
|
463
|
-
respond "There is no channel with that name: #{channel}, please be sure is written exactly the same",
|
501
|
+
respond "There is no channel with that name: #{channel}, please be sure is written exactly the same", dest
|
464
502
|
elsif channel == MASTER_CHANNEL
|
465
|
-
respond "There is already a bot in this channel: #{channel}",
|
503
|
+
respond "There is already a bot in this channel: #{channel}", dest
|
466
504
|
elsif @bots_created.keys.include?(channel_id)
|
467
|
-
respond "There is already a bot in this channel: #{channel}, kill it before",
|
505
|
+
respond "There is already a bot in this channel: #{channel}, kill it before", dest
|
468
506
|
elsif config[:nick_id] != channel_found.creator and !channel_found.members.include?(config[:nick_id])
|
469
|
-
respond "You need to add first to the channel the smart bot user: #{config[:nick]}, kill it before",
|
507
|
+
respond "You need to add first to the channel the smart bot user: #{config[:nick]}, kill it before", dest
|
470
508
|
else
|
471
509
|
if channel_id != config[:channel]
|
472
510
|
begin
|
@@ -498,22 +536,22 @@ class SlackSmartBot
|
|
498
536
|
admins: admin_users.join(","),
|
499
537
|
thread: t,
|
500
538
|
}
|
501
|
-
respond "The bot has been created on channel: #{channel}. Rules file: #{File.basename rules_file}",
|
539
|
+
respond "The bot has been created on channel: #{channel}. Rules file: #{File.basename rules_file}", dest
|
502
540
|
update_bots_file()
|
503
541
|
rescue Exception => stack
|
504
542
|
@logger.fatal stack
|
505
543
|
message = "Problem creating the bot on channel #{channel}. Error: <#{stack}>."
|
506
544
|
@logger.error message
|
507
|
-
respond message,
|
545
|
+
respond message, dest
|
508
546
|
end
|
509
547
|
else
|
510
|
-
respond "There is already a bot in this channel: #{channel}, and it is the Master Channel!",
|
548
|
+
respond "There is already a bot in this channel: #{channel}, and it is the Master Channel!", dest
|
511
549
|
end
|
512
550
|
end
|
513
551
|
else
|
514
552
|
@logger.info MASTER_CHANNEL
|
515
553
|
@logger.info @channel_id.inspect
|
516
|
-
respond "Sorry I cannot create bots from this channel, please visit the master channel: <##{@channels_id[MASTER_CHANNEL]}>",
|
554
|
+
respond "Sorry I cannot create bots from this channel, please visit the master channel: <##{@channels_id[MASTER_CHANNEL]}>", dest
|
517
555
|
end
|
518
556
|
|
519
557
|
#helpmaster: ----------------------------------------------
|
@@ -534,7 +572,7 @@ class SlackSmartBot
|
|
534
572
|
channel_id = @channels_id[channel]
|
535
573
|
end
|
536
574
|
if channel_id.nil?
|
537
|
-
respond "There is no channel with that name: #{channel}, please be sure is written exactly the same",
|
575
|
+
respond "There is no channel with that name: #{channel}, please be sure is written exactly the same", dest
|
538
576
|
elsif @bots_created.keys.include?(channel_id)
|
539
577
|
if @bots_created[channel_id][:admins].split(",").include?(from)
|
540
578
|
if @bots_created[channel_id][:thread].kind_of?(Thread) and @bots_created[channel_id][:thread].alive?
|
@@ -542,16 +580,16 @@ class SlackSmartBot
|
|
542
580
|
end
|
543
581
|
@bots_created.delete(channel_id)
|
544
582
|
update_bots_file()
|
545
|
-
respond "Bot on channel: #{channel}, has been killed and deleted.",
|
583
|
+
respond "Bot on channel: #{channel}, has been killed and deleted.", dest
|
546
584
|
send_msg_channel(channel, "Bot has been killed by #{from}")
|
547
585
|
else
|
548
|
-
respond "You need to be the creator or an admin of that bot channel",
|
586
|
+
respond "You need to be the creator or an admin of that bot channel", dest
|
549
587
|
end
|
550
588
|
else
|
551
|
-
respond "There is no bot in this channel: #{channel}",
|
589
|
+
respond "There is no bot in this channel: #{channel}", dest
|
552
590
|
end
|
553
591
|
else
|
554
|
-
respond "Sorry I cannot kill bots from this channel, please visit the master channel: <##{@channels_id[MASTER_CHANNEL]}>",
|
592
|
+
respond "Sorry I cannot kill bots from this channel, please visit the master channel: <##{@channels_id[MASTER_CHANNEL]}>", dest
|
555
593
|
end
|
556
594
|
|
557
595
|
#help: ----------------------------------------------
|
@@ -565,21 +603,21 @@ class SlackSmartBot
|
|
565
603
|
channels = wclient.channels_list.channels
|
566
604
|
channel_found = channels.detect { |c| c.name == channel }
|
567
605
|
if channel_found.nil?
|
568
|
-
respond "The channel you are trying to use doesn't exist",
|
606
|
+
respond "The channel you are trying to use doesn't exist", dest
|
569
607
|
elsif channel_found.name == MASTER_CHANNEL
|
570
|
-
respond "You cannot use the rules from Master Channel on any other channel.",
|
608
|
+
respond "You cannot use the rules from Master Channel on any other channel.", dest
|
571
609
|
else
|
572
610
|
if user.id == channel_found.creator or channel_found.members.include?(user.id)
|
573
611
|
@rules_imported[user.id] = {} unless @rules_imported.key?(user.id)
|
574
|
-
if
|
612
|
+
if dest[0]=="C" #todo: take in consideration bots that are not master
|
575
613
|
@rules_imported[user.id][dchannel] = channel_found.id
|
576
614
|
else
|
577
615
|
@rules_imported[user.id][user.id] = channel_found.id
|
578
616
|
end
|
579
617
|
update_rules_imported() if ON_MASTER_BOT
|
580
|
-
respond "I'm using now the rules from <##{channel_found.id}>",
|
618
|
+
respond "I'm using now the rules from <##{channel_found.id}>", dest
|
581
619
|
else
|
582
|
-
respond "You need to join the channel <##{channel_found.id}> to be able to use the rules.",
|
620
|
+
respond "You need to join the channel <##{channel_found.id}> to be able to use the rules.", dest
|
583
621
|
end
|
584
622
|
end
|
585
623
|
|
@@ -595,29 +633,29 @@ class SlackSmartBot
|
|
595
633
|
else
|
596
634
|
channel_id = channel
|
597
635
|
end
|
598
|
-
if
|
636
|
+
if dest[0]=='C' #channel
|
599
637
|
if @rules_imported.key?(user.id) and @rules_imported[user.id].key?(dchannel)
|
600
638
|
if @rules_imported[user.id][dchannel] != channel_id
|
601
|
-
respond "You are not using those rules.",
|
639
|
+
respond "You are not using those rules.", dest
|
602
640
|
else
|
603
641
|
@rules_imported[user.id].delete(dchannel)
|
604
642
|
update_rules_imported() if ON_MASTER_BOT
|
605
|
-
respond "You won't be using those rules from now on.",
|
643
|
+
respond "You won't be using those rules from now on.", dest
|
606
644
|
end
|
607
645
|
else
|
608
|
-
respond "You were not using those rules.",
|
646
|
+
respond "You were not using those rules.", dest
|
609
647
|
end
|
610
648
|
else #direct message
|
611
649
|
if @rules_imported.key?(user.id) and @rules_imported[user.id].key?(user.id)
|
612
650
|
if @rules_imported[user.id][user.id] != channel_id
|
613
|
-
respond "You are not using those rules.",
|
651
|
+
respond "You are not using those rules.", dest
|
614
652
|
else
|
615
653
|
@rules_imported[user.id].delete(user.id)
|
616
654
|
update_rules_imported() if ON_MASTER_BOT
|
617
|
-
respond "You won't be using those rules from now on.",
|
655
|
+
respond "You won't be using those rules from now on.", dest
|
618
656
|
end
|
619
657
|
else
|
620
|
-
respond "You were not using those rules.",
|
658
|
+
respond "You were not using those rules.", dest
|
621
659
|
end
|
622
660
|
end
|
623
661
|
|
@@ -636,14 +674,14 @@ class SlackSmartBot
|
|
636
674
|
if !specific
|
637
675
|
help_message = IO.readlines(__FILE__).join
|
638
676
|
if ADMIN_USERS.include?(from) #admin user
|
639
|
-
respond "*Commands for administrators:*\n#{help_message.scan(/#\s*help\s*admin:(.*)/).join("\n")}",
|
677
|
+
respond "*Commands for administrators:*\n#{help_message.scan(/#\s*help\s*admin:(.*)/).join("\n")}", dest
|
640
678
|
end
|
641
|
-
if ON_MASTER_BOT and
|
642
|
-
respond "*Commands only on Master Channel <##{@channels_id[MASTER_CHANNEL]}>:*\n#{help_message.scan(/#\s*help\s*master:(.*)/).join("\n")}",
|
679
|
+
if ON_MASTER_BOT and dest[0]=="C"
|
680
|
+
respond "*Commands only on Master Channel <##{@channels_id[MASTER_CHANNEL]}>:*\n#{help_message.scan(/#\s*help\s*master:(.*)/).join("\n")}", dest
|
643
681
|
end
|
644
|
-
respond help_message.scan(/#\s*help\s*:(.*)/).join("\n"),
|
682
|
+
respond help_message.scan(/#\s*help\s*:(.*)/).join("\n"), dest
|
645
683
|
end
|
646
|
-
if
|
684
|
+
if dest[0]=="C" # on a channel
|
647
685
|
rules_file = RULES_FILE
|
648
686
|
|
649
687
|
if @rules_imported.key?(user.id) and @rules_imported[user.id].key?(dchannel)
|
@@ -655,12 +693,12 @@ class SlackSmartBot
|
|
655
693
|
end
|
656
694
|
if @bots_created.key?(@rules_imported[user.id][dchannel])
|
657
695
|
rules_file = @bots_created[@rules_imported[user.id][dchannel]][:rules_file]
|
658
|
-
respond "*You are using rules from another channel: <##{@rules_imported[user.id][dchannel]}>. These are the specific commands for that channel:*",
|
696
|
+
respond "*You are using rules from another channel: <##{@rules_imported[user.id][dchannel]}>. These are the specific commands for that channel:*", dest
|
659
697
|
end
|
660
698
|
end
|
661
699
|
help_message_rules = IO.readlines(rules_file).join
|
662
|
-
respond help_message_rules.scan(/#\s*help\s*:(.*)/).join("\n"),
|
663
|
-
elsif
|
700
|
+
respond help_message_rules.scan(/#\s*help\s*:(.*)/).join("\n"), dest
|
701
|
+
elsif dest[0]=='D' and @rules_imported.key?(user.id) and @rules_imported[user.id].key?(user.id) #direct message
|
664
702
|
unless @bots_created.key?(@rules_imported[user.id][user.id])
|
665
703
|
file_conf = IO.readlines($0.gsub(".rb", "_bots.rb")).join
|
666
704
|
unless file_conf.to_s() == ""
|
@@ -669,12 +707,12 @@ class SlackSmartBot
|
|
669
707
|
end
|
670
708
|
if @bots_created.key?(@rules_imported[user.id][user.id])
|
671
709
|
rules_file = @bots_created[@rules_imported[user.id][user.id]][:rules_file]
|
672
|
-
respond "*You are using rules from channel: <##{@rules_imported[user.id][user.id]}>. These are the specific commands for that channel:*",
|
710
|
+
respond "*You are using rules from channel: <##{@rules_imported[user.id][user.id]}>. These are the specific commands for that channel:*", dest
|
673
711
|
help_message_rules = IO.readlines(rules_file).join
|
674
|
-
respond help_message_rules.scan(/#\s*help\s*:(.*)/).join("\n"),
|
712
|
+
respond help_message_rules.scan(/#\s*help\s*:(.*)/).join("\n"), dest
|
675
713
|
end
|
676
714
|
end
|
677
|
-
respond "Github project: https://github.com/MarioRuiz/slack-smart-bot",
|
715
|
+
respond "Github project: https://github.com/MarioRuiz/slack-smart-bot", dest if !specific
|
678
716
|
else
|
679
717
|
processed = false
|
680
718
|
end
|
@@ -691,7 +729,7 @@ class SlackSmartBot
|
|
691
729
|
if @status == :on and
|
692
730
|
(@questions.keys.include?(from) or
|
693
731
|
@listening.include?(from) or
|
694
|
-
|
732
|
+
dest[0]=='D' or on_demand)
|
695
733
|
processed2 = true
|
696
734
|
|
697
735
|
#help: ===================================
|
@@ -725,31 +763,31 @@ class SlackSmartBot
|
|
725
763
|
@shortcuts[from] = Hash.new() unless @shortcuts.keys.include?(from)
|
726
764
|
|
727
765
|
if !ADMIN_USERS.include?(from) and @shortcuts[:all].include?(shortcut_name) and !@shortcuts[from].include?(shortcut_name)
|
728
|
-
respond "Only the creator of the shortcut or an admin user can modify it",
|
766
|
+
respond "Only the creator of the shortcut or an admin user can modify it", dest
|
729
767
|
elsif !@shortcuts[from].include?(shortcut_name)
|
730
768
|
#new shortcut
|
731
769
|
@shortcuts[from][shortcut_name] = command_to_run
|
732
770
|
@shortcuts[:all][shortcut_name] = command_to_run if for_all.to_s != ""
|
733
771
|
update_shortcuts_file()
|
734
|
-
respond "shortcut added",
|
772
|
+
respond "shortcut added", dest
|
735
773
|
else
|
736
774
|
|
737
775
|
#are you sure? to avoid overwriting existing
|
738
776
|
unless @questions.keys.include?(from)
|
739
|
-
ask("The shortcut already exists, are you sure you want to overwrite it?", command, from,
|
777
|
+
ask("The shortcut already exists, are you sure you want to overwrite it?", command, from, dest)
|
740
778
|
else
|
741
779
|
case @questions[from]
|
742
780
|
when /^(yes|yep)/i
|
743
781
|
@shortcuts[from][shortcut_name] = command_to_run
|
744
782
|
@shortcuts[:all][shortcut_name] = command_to_run if for_all.to_s != ""
|
745
783
|
update_shortcuts_file()
|
746
|
-
respond "shortcut added",
|
784
|
+
respond "shortcut added", dest
|
747
785
|
@questions.delete(from)
|
748
786
|
when /^no/i
|
749
|
-
respond "ok, I won't add it",
|
787
|
+
respond "ok, I won't add it", dest
|
750
788
|
@questions.delete(from)
|
751
789
|
else
|
752
|
-
respond "I don't understand, yes or no?",
|
790
|
+
respond "I don't understand, yes or no?", dest
|
753
791
|
end
|
754
792
|
end
|
755
793
|
end
|
@@ -764,30 +802,30 @@ class SlackSmartBot
|
|
764
802
|
deleted = false
|
765
803
|
|
766
804
|
if !ADMIN_USERS.include?(from) and @shortcuts[:all].include?(shortcut) and !@shortcuts[from].include?(shortcut)
|
767
|
-
respond "Only the creator of the shortcut or an admin user can delete it",
|
805
|
+
respond "Only the creator of the shortcut or an admin user can delete it", dest
|
768
806
|
elsif (@shortcuts.keys.include?(from) and @shortcuts[from].keys.include?(shortcut)) or
|
769
807
|
(ADMIN_USERS.include?(from) and @shortcuts[:all].include?(shortcut))
|
770
808
|
#are you sure? to avoid deleting by mistake
|
771
809
|
unless @questions.keys.include?(from)
|
772
|
-
ask("are you sure you want to delete it?", command, from,
|
810
|
+
ask("are you sure you want to delete it?", command, from, dest)
|
773
811
|
else
|
774
812
|
case @questions[from]
|
775
813
|
when /^(yes|yep)/i
|
776
|
-
respond "shortcut deleted!",
|
777
|
-
respond "#{shortcut}: #{@shortcuts[from][shortcut]}",
|
814
|
+
respond "shortcut deleted!", dest
|
815
|
+
respond "#{shortcut}: #{@shortcuts[from][shortcut]}", dest
|
778
816
|
@shortcuts[from].delete(shortcut)
|
779
817
|
@shortcuts[:all].delete(shortcut)
|
780
818
|
@questions.delete(from)
|
781
819
|
update_shortcuts_file()
|
782
820
|
when /^no/i
|
783
|
-
respond "ok, I won't delete it",
|
821
|
+
respond "ok, I won't delete it", dest
|
784
822
|
@questions.delete(from)
|
785
823
|
else
|
786
|
-
respond "I don't understand, yes or no?",
|
824
|
+
respond "I don't understand, yes or no?", dest
|
787
825
|
end
|
788
826
|
end
|
789
827
|
else
|
790
|
-
respond "shortcut not found",
|
828
|
+
respond "shortcut not found", dest
|
791
829
|
end
|
792
830
|
|
793
831
|
#help: ----------------------------------------------
|
@@ -802,7 +840,7 @@ class SlackSmartBot
|
|
802
840
|
@shortcuts[:all].each { |name, value|
|
803
841
|
msg += " _#{name}: #{value}_\n"
|
804
842
|
}
|
805
|
-
respond msg,
|
843
|
+
respond msg, dest
|
806
844
|
end
|
807
845
|
|
808
846
|
if @shortcuts.keys.include?(from) and @shortcuts[from].keys.size > 0
|
@@ -813,10 +851,10 @@ class SlackSmartBot
|
|
813
851
|
new_hash.each { |name, value|
|
814
852
|
msg += " _#{name}: #{value}_\n"
|
815
853
|
}
|
816
|
-
respond msg,
|
854
|
+
respond msg, dest
|
817
855
|
end
|
818
856
|
end
|
819
|
-
respond "No shortcuts found",
|
857
|
+
respond "No shortcuts found", dest if msg == ""
|
820
858
|
|
821
859
|
#help: ----------------------------------------------
|
822
860
|
#help: `id channel CHANNEL_NAME`
|
@@ -826,9 +864,9 @@ class SlackSmartBot
|
|
826
864
|
channel_name = $1
|
827
865
|
get_channels_name_and_id()
|
828
866
|
if @channels_id.keys.include?(channel_name)
|
829
|
-
respond "the id of #{channel_name} is #{@channels_id[channel_name]}",
|
867
|
+
respond "the id of #{channel_name} is #{@channels_id[channel_name]}", dest
|
830
868
|
else
|
831
|
-
respond "channel: #{channel_name} not found",
|
869
|
+
respond "channel: #{channel_name} not found", dest
|
832
870
|
end
|
833
871
|
|
834
872
|
#help: ----------------------------------------------
|
@@ -849,18 +887,18 @@ class SlackSmartBot
|
|
849
887
|
stdout, stderr, status = Open3.capture3("ruby -e \"#{code.gsub('"', '\"')}\"")
|
850
888
|
if stderr == ""
|
851
889
|
if stdout == ""
|
852
|
-
respond "Nothing returned. Remember you need to use p or puts to print",
|
890
|
+
respond "Nothing returned. Remember you need to use p or puts to print", dest
|
853
891
|
else
|
854
|
-
respond stdout,
|
892
|
+
respond stdout, dest
|
855
893
|
end
|
856
894
|
else
|
857
|
-
respond stderr,
|
895
|
+
respond stderr, dest
|
858
896
|
end
|
859
897
|
rescue Exception => exc
|
860
|
-
respond exc,
|
898
|
+
respond exc, dest
|
861
899
|
end
|
862
900
|
else
|
863
|
-
respond "Sorry I cannot run this due security issues",
|
901
|
+
respond "Sorry I cannot run this due security issues", dest
|
864
902
|
end
|
865
903
|
else
|
866
904
|
processed2 = false
|
@@ -871,21 +909,27 @@ class SlackSmartBot
|
|
871
909
|
return processed
|
872
910
|
end
|
873
911
|
|
874
|
-
def respond(msg,
|
875
|
-
if
|
912
|
+
def respond(msg, dest = nil)
|
913
|
+
if dest.nil?
|
876
914
|
client.message(channel: @channels_id[CHANNEL], text: msg, as_user: true)
|
877
|
-
|
878
|
-
|
915
|
+
elsif dest[0]=="C" # channel
|
916
|
+
client.message(channel: dest, text: msg, as_user: true)
|
917
|
+
elsif dest[0]=='D' # Direct message
|
918
|
+
send_msg_user(dest, msg)
|
919
|
+
else
|
920
|
+
@logger.warn("method respond not treated correctly: msg:#{msg} dest:#{dest}")
|
879
921
|
end
|
880
922
|
end
|
881
923
|
|
882
924
|
#context: previous message
|
883
925
|
#to: user that should answer
|
884
|
-
def ask(question, context, to,
|
885
|
-
if
|
926
|
+
def ask(question, context, to, dest = nil)
|
927
|
+
if dest.nil?
|
886
928
|
client.message(channel: @channels_id[CHANNEL], text: "#{to}: #{question}", as_user: true)
|
887
|
-
|
888
|
-
|
929
|
+
elsif dest[0]=="C" # channel
|
930
|
+
client.message(channel: dest, text: "#{to}: #{question}", as_user: true)
|
931
|
+
elsif dest[0]=='D' #private message
|
932
|
+
send_msg_user(dest, "#{to}: #{question}")
|
889
933
|
end
|
890
934
|
@questions[to] = context
|
891
935
|
end
|
@@ -909,8 +953,12 @@ class SlackSmartBot
|
|
909
953
|
#to send messages without listening for a response to users
|
910
954
|
def send_msg_user(id_user, msg)
|
911
955
|
unless msg == ""
|
912
|
-
|
913
|
-
|
956
|
+
if id_user[0]=="D"
|
957
|
+
client.message(channel: id_user, as_user: true, text: msg)
|
958
|
+
else
|
959
|
+
im = wclient.im_open(user: id_user)
|
960
|
+
client.message(channel: im["channel"]["id"], as_user: true, text: msg)
|
961
|
+
end
|
914
962
|
end
|
915
963
|
end
|
916
964
|
|
@@ -5,13 +5,13 @@ else
|
|
5
5
|
@testing = true
|
6
6
|
@questions = Hash.new()
|
7
7
|
|
8
|
-
def respond(message,
|
8
|
+
def respond(message, dest)
|
9
9
|
puts message
|
10
10
|
end
|
11
11
|
|
12
12
|
#context: previous message
|
13
13
|
#to: user that should answer
|
14
|
-
def ask(question, context, to,
|
14
|
+
def ask(question, context, to, dest)
|
15
15
|
puts "Bot: #{question}"
|
16
16
|
@questions[to] = context
|
17
17
|
end
|
@@ -30,7 +30,7 @@ end
|
|
30
30
|
# help: `@NAME_OF_BOT THE_COMMAND`
|
31
31
|
# help: `NAME_OF_BOT THE_COMMAND`
|
32
32
|
# help:
|
33
|
-
def rules(user, command, processed,
|
33
|
+
def rules(user, command, processed, dest)
|
34
34
|
from = user.name
|
35
35
|
if @testing
|
36
36
|
puts "#{from}: #{command}"
|
@@ -48,7 +48,7 @@ def rules(user, command, processed, id_user)
|
|
48
48
|
# help: repeats SOMETHING
|
49
49
|
# help:
|
50
50
|
when /^echo\s(.+)/i
|
51
|
-
respond $1,
|
51
|
+
respond $1, dest
|
52
52
|
|
53
53
|
# help: ----------------------------------------------
|
54
54
|
# help: `go to sleep`
|
@@ -56,26 +56,26 @@ def rules(user, command, processed, id_user)
|
|
56
56
|
# help:
|
57
57
|
when /^go\sto\ssleep/i
|
58
58
|
unless @questions.keys.include?(from)
|
59
|
-
ask("do you want me to take a siesta?", command, from,
|
59
|
+
ask("do you want me to take a siesta?", command, from, dest)
|
60
60
|
else
|
61
61
|
case @questions[from]
|
62
62
|
when /yes/i, /yep/i, /sure/i
|
63
63
|
@questions.delete(from)
|
64
|
-
respond "zZzzzzzZZZZZZzzzzzzz!",
|
65
|
-
respond "I'll be sleeping for 5 secs... just for you",
|
64
|
+
respond "zZzzzzzZZZZZZzzzzzzz!", dest
|
65
|
+
respond "I'll be sleeping for 5 secs... just for you", dest
|
66
66
|
sleep 5
|
67
67
|
when /no/i, /nope/i, /cancel/i
|
68
68
|
@questions.delete(from)
|
69
|
-
respond "Thanks, I'm happy to be awake",
|
69
|
+
respond "Thanks, I'm happy to be awake", dest
|
70
70
|
else
|
71
|
-
respond "I don't understand",
|
72
|
-
ask("are you sure do you want me to sleep? (yes or no)", "go to sleep", from,
|
71
|
+
respond "I don't understand", dest
|
72
|
+
ask("are you sure do you want me to sleep? (yes or no)", "go to sleep", from, dest)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
else
|
76
76
|
unless processed
|
77
77
|
resp = %w{ what huh sorry }.sample
|
78
|
-
respond "#{firstname}: #{resp}?",
|
78
|
+
respond "#{firstname}: #{resp}?", dest
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
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.
|
4
|
+
version: 0.5.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-05-
|
11
|
+
date: 2019-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slack-ruby-client
|