slack-smart-bot 1.8.1 → 1.10.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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +127 -21
  3. data/lib/slack/smart-bot/comm/ask.rb +55 -42
  4. data/lib/slack/smart-bot/comm/dont_understand.rb +2 -2
  5. data/lib/slack/smart-bot/comm/event_hello.rb +34 -0
  6. data/lib/slack/smart-bot/comm/get_channel_members.rb +13 -0
  7. data/lib/slack/smart-bot/comm/get_channels.rb +35 -0
  8. data/lib/slack/smart-bot/comm/get_user_info.rb +20 -0
  9. data/lib/slack/smart-bot/comm/get_users.rb +24 -0
  10. data/lib/slack/smart-bot/comm/react.rb +38 -8
  11. data/lib/slack/smart-bot/comm/respond.rb +219 -48
  12. data/lib/slack/smart-bot/comm/respond_direct.rb +2 -3
  13. data/lib/slack/smart-bot/comm/respond_thread.rb +5 -0
  14. data/lib/slack/smart-bot/comm/send_file.rb +38 -34
  15. data/lib/slack/smart-bot/comm/send_msg_channel.rb +27 -22
  16. data/lib/slack/smart-bot/comm/send_msg_user.rb +58 -33
  17. data/lib/slack/smart-bot/comm/unreact.rb +24 -7
  18. data/lib/slack/smart-bot/comm.rb +7 -1
  19. data/lib/slack/smart-bot/commands/general/add_announcement.rb +32 -0
  20. data/lib/slack/smart-bot/commands/general/bot_help.rb +68 -28
  21. data/lib/slack/smart-bot/commands/general/bot_stats.rb +314 -0
  22. data/lib/slack/smart-bot/commands/general/bot_status.rb +3 -5
  23. data/lib/slack/smart-bot/commands/general/bye_bot.rb +0 -7
  24. data/lib/slack/smart-bot/commands/general/delete_announcement.rb +34 -0
  25. data/lib/slack/smart-bot/commands/general/delete_share.rb +34 -0
  26. data/lib/slack/smart-bot/commands/general/hi_bot.rb +16 -11
  27. data/lib/slack/smart-bot/commands/general/leaderboard.rb +200 -0
  28. data/lib/slack/smart-bot/commands/general/see_announcements.rb +113 -0
  29. data/lib/slack/smart-bot/commands/general/see_favorite_commands.rb +54 -0
  30. data/lib/slack/smart-bot/commands/general/see_shares.rb +41 -0
  31. data/lib/slack/smart-bot/commands/general/see_statuses.rb +78 -0
  32. data/lib/slack/smart-bot/commands/general/share_messages.rb +58 -0
  33. data/lib/slack/smart-bot/commands/general/stop_using_rules.rb +11 -6
  34. data/lib/slack/smart-bot/commands/general/suggest_command.rb +30 -0
  35. data/lib/slack/smart-bot/commands/general/use_rules.rb +13 -16
  36. data/lib/slack/smart-bot/commands/general/whats_new.rb +19 -0
  37. data/lib/slack/smart-bot/commands/general_bot_commands.rb +243 -0
  38. data/lib/slack/smart-bot/commands/on_bot/add_shortcut.rb +67 -38
  39. data/lib/slack/smart-bot/commands/on_bot/admin/add_routine.rb +49 -14
  40. data/lib/slack/smart-bot/commands/on_bot/admin/extend_rules.rb +5 -7
  41. data/lib/slack/smart-bot/commands/on_bot/admin/pause_bot.rb +4 -1
  42. data/lib/slack/smart-bot/commands/on_bot/admin/pause_routine.rb +1 -0
  43. data/lib/slack/smart-bot/commands/on_bot/admin/remove_routine.rb +2 -3
  44. data/lib/slack/smart-bot/commands/on_bot/admin/run_routine.rb +6 -1
  45. data/lib/slack/smart-bot/commands/on_bot/admin/see_result_routine.rb +32 -0
  46. data/lib/slack/smart-bot/commands/on_bot/admin/see_routines.rb +12 -4
  47. data/lib/slack/smart-bot/commands/on_bot/admin/start_bot.rb +4 -1
  48. data/lib/slack/smart-bot/commands/on_bot/admin/start_routine.rb +1 -0
  49. data/lib/slack/smart-bot/commands/on_bot/admin/stop_using_rules_on.rb +2 -0
  50. data/lib/slack/smart-bot/commands/on_bot/admin_master/react_to.rb +32 -0
  51. data/lib/slack/smart-bot/commands/on_bot/admin_master/send_message.rb +24 -0
  52. data/lib/slack/smart-bot/commands/on_bot/delete_repl.rb +3 -5
  53. data/lib/slack/smart-bot/commands/on_bot/delete_shortcut.rb +54 -25
  54. data/lib/slack/smart-bot/commands/on_bot/get_repl.rb +7 -9
  55. data/lib/slack/smart-bot/commands/on_bot/repl.rb +55 -25
  56. data/lib/slack/smart-bot/commands/on_bot/ruby_code.rb +36 -13
  57. data/lib/slack/smart-bot/commands/on_bot/run_repl.rb +5 -7
  58. data/lib/slack/smart-bot/commands/on_bot/see_repls.rb +4 -6
  59. data/lib/slack/smart-bot/commands/on_bot/see_shortcuts.rb +29 -13
  60. data/lib/slack/smart-bot/commands/on_extended/bot_rules.rb +55 -9
  61. data/lib/slack/smart-bot/commands/on_master/admin/kill_bot_on_channel.rb +4 -1
  62. data/lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb +5 -3
  63. data/lib/slack/smart-bot/commands/on_master/admin_master/notify_message.rb +2 -1
  64. data/lib/slack/smart-bot/commands/on_master/admin_master/publish_announcements.rb +32 -0
  65. data/lib/slack/smart-bot/commands/on_master/admin_master/set_general_message.rb +38 -0
  66. data/lib/slack/smart-bot/commands/on_master/admin_master/set_maintenance.rb +49 -0
  67. data/lib/slack/smart-bot/commands/on_master/create_bot.rb +30 -21
  68. data/lib/slack/smart-bot/commands.rb +19 -1
  69. data/lib/slack/smart-bot/listen.rb +7 -8
  70. data/lib/slack/smart-bot/process.rb +373 -192
  71. data/lib/slack/smart-bot/process_first.rb +202 -104
  72. data/lib/slack/smart-bot/treat_message.rb +325 -186
  73. data/lib/slack/smart-bot/utils/answer.rb +18 -0
  74. data/lib/slack/smart-bot/utils/answer_delete.rb +15 -0
  75. data/lib/slack/smart-bot/utils/build_help.rb +57 -5
  76. data/lib/slack/smart-bot/utils/create_routine_thread.rb +83 -30
  77. data/lib/slack/smart-bot/utils/get_bots_created.rb +4 -1
  78. data/lib/slack/smart-bot/utils/get_channels_name_and_id.rb +1 -7
  79. data/lib/slack/smart-bot/utils/get_help.rb +87 -35
  80. data/lib/slack/smart-bot/utils/get_shares.rb +12 -0
  81. data/lib/slack/smart-bot/utils/has_access.rb +12 -0
  82. data/lib/slack/smart-bot/utils/save_stats.rb +23 -8
  83. data/lib/slack/smart-bot/utils/save_status.rb +52 -0
  84. data/lib/slack/smart-bot/utils/update_shortcuts_file.rb +6 -0
  85. data/lib/slack/smart-bot/utils.rb +5 -0
  86. data/lib/slack-smart-bot.rb +88 -47
  87. data/lib/slack-smart-bot_general_commands.rb +46 -0
  88. data/lib/slack-smart-bot_general_rules.rb +5 -2
  89. data/lib/slack-smart-bot_rules.rb +49 -23
  90. data/whats_new.txt +36 -0
  91. metadata +44 -13
  92. data/lib/slack/smart-bot/commands/on_bot/admin_master/bot_stats.rb +0 -195
@@ -0,0 +1,58 @@
1
+ class SlackSmartBot
2
+ #todo: reaction type not added yet since RTM doesn't support it. See if we can add it as an event
3
+ def share_messages(user, from_channel, to_channel, condition)
4
+ save_stats(__method__)
5
+ if has_access?(__method__, user)
6
+ #todo: add a @shared variable to control not to be shared more than once when using reactions
7
+ #todo: it is only possible to share if smartbot is a member in both channels and the person adding the share command also
8
+ if Thread.current[:typem] == :on_call or Thread.current[:typem] == :on_dm
9
+ respond "You can use this command only from the source channel."
10
+ elsif from_channel == to_channel
11
+ respond "You cannot share messages on the same channel than source channel."
12
+ else
13
+ channels = get_channels(types: 'public_channel')
14
+ channel_found = channels.detect { |c| c.name == from_channel }
15
+ get_channels_name_and_id() unless @channels_id.key?(to_channel)
16
+ channel_found = false if !@channels_id.key?(to_channel)
17
+ if channel_found
18
+ members = get_channel_members(@channels_id[to_channel])
19
+ if members.include?(config.nick_id) and members.include?(user.id)
20
+ if condition.match?(/^\/.+\/$/)
21
+ type = :regexp
22
+ elsif condition.match?(/^".+"$/) or condition.match?(/^'.+'$/)
23
+ type = :text
24
+ else
25
+ type = :reaction
26
+ end
27
+ if File.exists?("#{config.path}/shares/#{from_channel}.csv")
28
+ t = CSV.table("#{config.path}/shares/#{from_channel}.csv", headers: ['share_id', 'user_deleted', 'user_created', 'date', 'time', 'type', 'to_channel', 'condition'])
29
+ @shares[from_channel] = t
30
+ if t.size>0
31
+ num = t[:share_id].max + 1
32
+ else
33
+ num = 1
34
+ end
35
+ elsif !@shares.key?(from_channel)
36
+ File.open("#{config.path}/shares/#{from_channel}.csv","w")
37
+ t = CSV.table("#{config.path}/shares/#{from_channel}.csv", headers: ['share_id', 'user_deleted', 'user_created', 'date', 'time', 'type', 'to_channel', 'condition'])
38
+ num = 1
39
+ @shares[from_channel] = t
40
+ else
41
+ num = @shares[from_channel][:share_id].max + 1
42
+ end
43
+ values = [num, '', user.name, Time.now.strftime("%Y/%m/%d"), Time.now.strftime("%H:%M"), type.to_s, to_channel, condition]
44
+ @shares[from_channel] << values
45
+ CSV.open("#{config.path}/shares/#{from_channel}.csv", "a+") do |csv|
46
+ csv << values
47
+ end
48
+ respond "*Share command*: id:#{num} Messages #{condition} will be shared from now on. Related commands `see shares`, `delete share ID`"
49
+ else
50
+ respond "*Share command*: The channel ##{to_channel} need to exist and the SmartBot and you have to be members."
51
+ end
52
+ else
53
+ respond "*Share command*: The channel <##{@channels_id[from_channel]}|#{from_channel}> has to be a public channel and the destination channel has to be a valid channel."
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,10 +1,13 @@
1
1
  class SlackSmartBot
2
2
  # help: ----------------------------------------------
3
3
  # help: `stop using rules from CHANNEL`
4
+ # help: `stop using CHANNEL`
4
5
  # help: it will stop using the rules from the specified channel.
6
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#using-rules-from-other-channels|more info>
5
7
  # help:
6
8
  def stop_using_rules(dest, channel, user, dchannel)
7
9
  save_stats(__method__)
10
+ channel.gsub!('#','') # for the case the channel name is in plain text including #
8
11
  if @channels_id.key?(channel)
9
12
  channel_id = @channels_id[channel]
10
13
  else
@@ -12,11 +15,12 @@ class SlackSmartBot
12
15
  end
13
16
 
14
17
  if dest[0] == "C" or dest[0] == "G" #channel
15
- if @rules_imported.key?(user.id) and @rules_imported[user.id].key?(dchannel)
16
- if @rules_imported[user.id][dchannel] != channel_id
18
+ if @rules_imported.key?(user.name) and @rules_imported[user.name].key?(dchannel)
19
+ if @rules_imported[user.name][dchannel] != channel_id
17
20
  respond "You are not using those rules.", dest
18
21
  else
19
- @rules_imported[user.id].delete(dchannel)
22
+ @rules_imported[user.name].delete(dchannel)
23
+ sleep 0.5
20
24
  update_rules_imported()
21
25
  respond "You won't be using those rules from now on.", dest
22
26
 
@@ -27,11 +31,12 @@ class SlackSmartBot
27
31
  respond "You were not using those rules.", dest
28
32
  end
29
33
  else #direct message
30
- if @rules_imported.key?(user.id) and @rules_imported[user.id].key?(user.id)
31
- if @rules_imported[user.id][user.id] != channel_id
34
+ if @rules_imported.key?(user.name) and @rules_imported[user.name].key?(user.name)
35
+ if @rules_imported[user.name][user.name] != channel_id
32
36
  respond "You are not using those rules.", dest
33
37
  else
34
- @rules_imported[user.id].delete(user.id)
38
+ @rules_imported[user.name].delete(user.name)
39
+ sleep 0.5
35
40
  update_rules_imported()
36
41
  respond "You won't be using those rules from now on.", dest
37
42
 
@@ -0,0 +1,30 @@
1
+ class SlackSmartBot
2
+
3
+ # help: ----------------------------------------------
4
+ # help: `suggest command`
5
+ # help: `random command`
6
+ # help: `command suggestion`
7
+ # help: `suggest rule`
8
+ # help: `random rule`
9
+ # help: `rule suggestion`
10
+ # help: it will display the help content for a random command.
11
+ # help: if used 'rule' then it will display a random rule.
12
+ # help: if used 'command' it will show any kind of command or rule.
13
+ # help:
14
+ def suggest_command(from, dest, dchannel, specific, rules_file)
15
+ save_stats(__method__)
16
+ help_message = get_help(rules_file, dest, from, specific, true, descriptions: false, only_normal_user: true)
17
+ commands = help_message.gsub(/====+/,'-'*30).split(/^\s*-------*$/).flatten
18
+ commands.reject!{|c| c.match?(/These are specific commands for this bot on this/i) || c.match?(/\A\s*\z/)}
19
+ @last_suggested_commands ||= []
20
+ @last_suggested_commands.shift if @last_suggested_commands.size >=5
21
+ command = ''
22
+ begin
23
+ command = commands.sample
24
+ end until !@last_suggested_commands.include?(command) or commands.size <= 5
25
+ @last_suggested_commands << command
26
+ message = "*Command suggestion*:\n#{command}"
27
+ respond message, dest, unfurl_links: false, unfurl_media: false
28
+ end
29
+
30
+ end
@@ -6,26 +6,22 @@ class SlackSmartBot
6
6
  # help: `use CHANNEL`
7
7
  # help: it will use the rules from the specified channel.
8
8
  # help: you need to be part of that channel to be able to use the rules.
9
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#using-rules-from-other-channels|more info>
9
10
  # help:
10
11
  def use_rules(dest, channel, user, dchannel)
11
12
  save_stats(__method__)
12
13
  get_bots_created()
13
- if config[:allow_access].key?(__method__) and !config[:allow_access][__method__].include?(user.name) and !config[:allow_access][__method__].include?(user.id) and
14
- (!user.key?(:enterprise_user) or ( user.key?(:enterprise_user) and !config[:allow_access][__method__].include?(user[:enterprise_user].id)))
15
- respond "You don't have access to use this command, please contact an Admin to be able to use it: <@#{config.admins.join(">, <@")}>"
16
- else
14
+ if has_access?(__method__, user)
17
15
  #todo: add pagination for case more than 1000 channels on the workspace
18
- channels = client.web_client.conversations_list(
19
- types: "private_channel,public_channel",
20
- limit: "1000",
21
- exclude_archived: "true",
22
- ).channels
23
-
16
+ channels = get_channels()
17
+ channel.gsub!('#','') # for the case the channel name is in plain text including #
18
+ channel = @channels_name[channel] if @channels_name.key?(channel)
24
19
  channel_found = channels.detect { |c| c.name == channel }
25
- members = client.web_client.conversations_members(channel: @channels_id[channel]).members unless channel_found.nil?
20
+ get_channels_name_and_id() unless @channels_id.key?(channel)
21
+ members = get_channel_members(@channels_id[channel]) unless channel_found.nil? or !@channels_id.key?(channel)
26
22
 
27
- if channel_found.nil?
28
- respond "The channel you are trying to use doesn't exist", dest
23
+ if channel_found.nil? or !@channels_id.key?(channel)
24
+ respond "The channel you are trying to use doesn't exist or cannot be found.", dest
29
25
  elsif channel_found.name == config.master_channel
30
26
  respond "You cannot use the rules from Master Channel on any other channel.", dest
31
27
  elsif !@bots_created.key?(@channels_id[channel])
@@ -34,12 +30,13 @@ class SlackSmartBot
34
30
  respond "The bot in that channel is not :on", dest
35
31
  else
36
32
  if user.id == channel_found.creator or members.include?(user.id)
37
- @rules_imported[user.id] = {} unless @rules_imported.key?(user.id)
33
+ @rules_imported[user.name] = {} unless @rules_imported.key?(user.name)
38
34
  if dest[0] == "C" or dest[0] == "G" #todo: take in consideration bots that are not master
39
- @rules_imported[user.id][dchannel] = channel_found.id
35
+ @rules_imported[user.name][dchannel] = channel_found.id
40
36
  else
41
- @rules_imported[user.id][user.id] = channel_found.id
37
+ @rules_imported[user.name][user.name] = channel_found.id
42
38
  end
39
+ sleep 0.5
43
40
  update_rules_imported()
44
41
  respond "I'm using now the rules from <##{channel_found.id}>", dest
45
42
 
@@ -0,0 +1,19 @@
1
+ class SlackSmartBot
2
+
3
+ # help: ----------------------------------------------
4
+ # help: `What's new`
5
+ # help: It will display the last user changes on Slack Smart Bot
6
+ # help:
7
+ def whats_new(user, dest, dchannel, from, display_name)
8
+ if @status == :on
9
+ save_stats(__method__)
10
+ whats_new_file = (__FILE__).gsub(/lib\/slack\/smart-bot\/commands\/general\/whats_new\.rb$/, "whats_new.txt")
11
+ whats_new = File.read(whats_new_file)
12
+ whats_new.split(/^\-\-\-\-\-\-+$/).each do |msg|
13
+ respond msg
14
+ sleep 0.3
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,243 @@
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_bot_commands(user, command, dest, files = [])
3
+
4
+ begin
5
+ if config.simulate
6
+ display_name = user.profile.display_name
7
+ else
8
+ if user.profile.display_name.to_s.match?(/\A\s*\z/)
9
+ user.profile.display_name = user.profile.real_name
10
+ end
11
+ display_name = user.profile.display_name
12
+ end
13
+
14
+ case command
15
+
16
+
17
+ # help: ----------------------------------------------
18
+ # help: `bot help`
19
+ # help: `bot help COMMAND`
20
+ # help: `bot rules`
21
+ # help: `bot rules COMMAND`
22
+ # help: `bot help expanded`
23
+ # help: `bot rules expanded`
24
+ # help: `bot what can I do?`
25
+ # help: it will display this help. For a more detailed help call `bot help expanded` or `bot rules expanded`.
26
+ # help: if COMMAND supplied just help for that command
27
+ # help: you can use the option 'expanded' or the alias 'extended'
28
+ # help: `bot rules` will show only the specific rules for this channel.
29
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#bot-help|more info>
30
+ # help:
31
+
32
+
33
+ # help: ----------------------------------------------
34
+ # help: `Hi Bot`
35
+ # help: `Hi Smart`
36
+ # help: `Hello Bot` `Hola Bot` `Hallo Bot` `What's up Bot` `Hey Bot` `Hæ Bot`
37
+ # help: `Hello THE_NAME_OF_THE_BOT`
38
+ # help: Bot starts listening to you if you are on a Bot channel
39
+ # help: After that if you want to avoid a single message to be treated by the smart bot, start the message by -
40
+ # help: Also apart of Hello you can use _Hallo, Hi, Hola, What's up, Hey, Hæ_
41
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#how-to-access-the-smart-bot|more info>
42
+ # help:
43
+ when /\A\s*(Hello|Hallo|Hi|Hola|What's\sup|Hey|Hæ)\s+(#{@salutations.join("|")})\s*$/i
44
+ hi_bot(user, dest, user.name, display_name)
45
+
46
+ # help: ----------------------------------------------
47
+ # help: `Bye Bot`
48
+ # help: `Bye Smart`
49
+ # help: `Bye NAME_OF_THE_BOT`
50
+ # help: Bot stops listening to you if you are on a Bot channel
51
+ # help: Also apart of Bye you can use _Bæ, Good Bye, Adiós, Ciao, Bless, Bless Bless, Adeu_
52
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#how-to-access-the-smart-bot|more info>
53
+ # help:
54
+ when /\A\s*(Bye|Bæ|Good\s+Bye|Adiós|Ciao|Bless|Bless\sBless|Adeu)\s+(#{@salutations.join("|")})\s*$/i
55
+ bye_bot(dest, user.name, display_name)
56
+
57
+ # help: ----------------------------------------------
58
+ # help: `add announcement MESSAGE`
59
+ # help: `add red announcement MESSAGE`
60
+ # help: `add green announcement MESSAGE`
61
+ # help: `add yellow announcement MESSAGE`
62
+ # help: `add white announcement MESSAGE`
63
+ # help: `add EMOJI announcement MESSAGE`
64
+ # help: It will store the message on the announcement list labeled with the color or emoji specified, white by default.
65
+ # help: aliases for announcement: statement, declaration, message
66
+ # help: Examples:
67
+ # help: _add green announcement :heavy_check_mark: All customer services are up and running_
68
+ # help: _add red declaration Customers db is down :x:_
69
+ # help: _add yellow statement Don't access the linux server without VPN_
70
+ # help: _add message `*Party* will start at *20:00* :tada:`_
71
+ # help: _add :heavy_exclamation_mark: message Pay attention all DB are on maintenance until 20:00 GMT_
72
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#announcements|more info>
73
+ # help:
74
+ when /\A\s*(add|create)\s+(red\s+|green\s+|white\s+|yellow\s+)?(announcement|statement|declaration|message)\s+(.+)\s*\z/i,
75
+ /\A\s*(add|create)\s+(:\w+:)\s+(announcement|statement|declaration|message)\s+(.+)\s*\z/i
76
+ type = $2.to_s.downcase.strip
77
+ type = 'white' if type == ''
78
+ message = $4
79
+ add_announcement(user, type, message)
80
+
81
+
82
+ # help: ----------------------------------------------
83
+ # help: `delete announcement ID`
84
+ # help: It will delete the message on the announcement list.
85
+ # help: aliases for announcement: statement, declaration, message
86
+ # help: Examples:
87
+ # help: _delete announcement 24_
88
+ # help: _delete message 645_
89
+ # help: _delete statement 77_
90
+ # help: _delete declaration 334_
91
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#announcements|more info>
92
+ # help:
93
+ when /\A\s*(delete|remove)\s+(announcement|statement|declaration|message)\s+(\d+)\s*\z/i
94
+ message_id = $3
95
+ delete_announcement(user, message_id)
96
+
97
+ # help: ----------------------------------------------
98
+ # help: `see announcements`
99
+ # help: `see red announcements`
100
+ # help: `see green announcements`
101
+ # help: `see yellow announcements`
102
+ # help: `see white announcements`
103
+ # help: `see EMOJI announcements`
104
+ # helpmaster: `see announcements #CHANNEL`
105
+ # helpmaster: `see all announcements`
106
+ # help: It will display the announcements for the channel.
107
+ # help: aliases for announcements: statements, declarations, messages
108
+ # helpmaster: In case #CHANNEL it will display the announcements for that channel. Only master admins can use it from a DM with the Smartbot.
109
+ # helpmaster: In case 'all' it will display all the announcements for all channels. Only master admins can use it from a DM with the Smartbot.
110
+ # help: Examples:
111
+ # help: _see announcements_
112
+ # help: _see white messages_
113
+ # help: _see red statements_
114
+ # help: _see yellow declarations_
115
+ # help: _see messages_
116
+ # help: _see :heavy_exclamation_mark: messages_
117
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#announcements|more info>
118
+ # help:
119
+ when /\A\s*see\s+(red\s+|green\s+|white\s+|yellow\s+|:\w+:\s+)?(announcements|statements|declarations|messages)()\s*\z/i,
120
+ /\A\s*see\s+(all\s+)?(announcements|statements|declarations|messages)()\s*\z/i,
121
+ /\A\s*see\s+(red\s+|green\s+|white\s+|yellow\s+|:\w+:\s+)?(announcements|statements|declarations|messages)\s+#([\w\-]+)\s*\z/i,
122
+ /\A\s*see\s+(red\s+|green\s+|white\s+|yellow\s+|:\w+:\s+)?(announcements|statements|declarations|messages)\s+<#(C\w+)\|.*>\s*\z/i
123
+
124
+ type = $1.to_s.downcase.strip
125
+ channel = $3.to_s
126
+
127
+ see_announcements(user, type, channel)
128
+
129
+
130
+ # help: ----------------------------------------------
131
+ # help: `share messages /REGEXP/ on #CHANNEL`
132
+ # help: `share messages "TEXT" on #CHANNEL`
133
+ # xhelp: `share messages :EMOJI: on #CHANNEL`
134
+ # help: It will automatically share new messages published that meet the specified criteria.
135
+ # xhelp: In case :EMOJI: it will share the messages with the indicated reaction.
136
+ # help: SmartBot user and user adding the share need to be members on both channels.
137
+ # help: The Regexp will automatically add the parameters /im
138
+ # help: Only available on public channels.
139
+ # help: Examples:
140
+ # help: _share messages /(last\s+|previous\s+)?sales\s+results\s+/ on #sales_
141
+ # help: _share messages "share post" on #announcements_
142
+ # xhelp: _share messages :tada: on #announcements_
143
+ # xhelp: _share messages :moneybag: from #sales_
144
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#share-messages|more info>
145
+ # help:
146
+ when /\A\s*share\s+messages\s+(\/.+\/|".+"|'.+')\s+on\s+<#\w+\|(.+)>\s*\z/i,
147
+ /\A\s*share\s+messages\s+(\/.+\/|".+"|'.+')\s+on\s+<#(\w+)\|>\s*\z/,
148
+ /\A\s*share\s+messages\s+(\/.+\/|".+"|'.+')\s+on\s+(.+)\s*\z/i
149
+ condition = $1
150
+ channel = $2
151
+ channel.gsub!('#','') # for the case the channel name is in plain text including #
152
+ channel = @channels_name[channel] if @channels_name.key?(channel)
153
+ channel_from = @channels_name[dest]
154
+ channel_to = channel
155
+ share_messages(user, channel_from, channel_to, condition)
156
+
157
+ # help: ----------------------------------------------
158
+ # help: `see shares`
159
+ # help: It will display the active shares from this channel.
160
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#share-messages|more info>
161
+ # help:
162
+ when /\A\s*see\s+shares\s*\z/i
163
+ see_shares()
164
+
165
+ # help: ----------------------------------------------
166
+ # help: `delete share ID`
167
+ # help: It will delete the share id specified.
168
+ # help: Examples:
169
+ # help: _delete share 24_
170
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#share-messages|more info>
171
+ # help:
172
+ when /\A\s*(delete|remove)\s+share\s+(\d+)\s*\z/i
173
+ share_id = $2
174
+ delete_share(user, share_id)
175
+
176
+ # help: ----------------------------------------------
177
+ # help: `see statuses`
178
+ # help: `see statuses #CHANNEL`
179
+ # help: `see status EMOJI`
180
+ # help: `see status EMOJI #CHANNEL`
181
+ # help: `see status EMOJI1 EMOJI99`
182
+ # help: `who is on vacation?`
183
+ # help: `who is on EMOJI`
184
+ # help: `who is on EMOJI #CHANNEL`
185
+ # help: `who is on EMOJI1 EMOJI99`
186
+ # help: `who is not on vacation?`
187
+ # help: `who is not on EMOJI`
188
+ # help: It will display the current statuses of the members of the channel where you are calling the command or on the channel you supply.
189
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#see-statuses|more info>
190
+ # help:
191
+ when /\A\s*(see|get)\s+(statuses)()\s*\z/i,
192
+ /\A\s*(see\s+status|get\s+status|who\s+is\s+on|who\s+is\s+not\s+on)\s+(:[\w\-\:\s]+:)\s*\??()\s*\z/i,
193
+ /\A\s*(who\s+is\s+on|who\s+is\s+not\s+on)\s+(vacation|holiday)\s*\??()\s*\z/i,
194
+ /\A\s*(see|get)\s+(statuses)\s+#([\w\-]+)\s*\z/i,
195
+ /\A\s*(see\s+status|get\s+status|who\s+is\s+on|who\s+is\s+not\s+on)\s+(:[\w\-\:\s]+:)\s*\??\s+#([\w\-]+)\s*\z/i,
196
+ /\A\s*(who\s+is\s+on|who\s+is\s+not\s+on)\s+(vacation|holiday)\s*\??\s+#([\w\-]+)\s*\z/i,
197
+ /\A\s*(see|get)\s+(statuses)\s+<#(C\w+)\|.+>\s*\z/i,
198
+ /\A\s*(see\s+status|get\s+status|who\s+is\s+on|who\s+is\s+not\s+on)\s+(:[\w\-\:\s]+:)\s*\??\s+<#(C\w+)\|.+>\s*\z/i,
199
+ /\A\s*(who\s+is\s+on|who\s+is\s+not\s+on)\s+(vacation|holiday)\s*\??\s+<#(C\w+)\|.+>\s*\z/i
200
+
201
+ not_on = $1.match?(/who\s+is\s+not\s+on/i)
202
+ type = $2.downcase
203
+ channel = $3.to_s
204
+ if type == 'statuses'
205
+ types = []
206
+ elsif type =='vacation' or type == 'holiday'
207
+ types = [':palm_tree:']
208
+ else
209
+ type.gsub!(' ', '')
210
+ type.gsub!('::',': :')
211
+ types = type.split(' ')
212
+ end
213
+ see_statuses(user, channel, types, dest, not_on)
214
+
215
+
216
+ # help: ----------------------------------------------
217
+ # help: `see favorite commands`
218
+ # help: `see my favorite commands`
219
+ # help: `favorite commands`
220
+ # help: `my favorite commands`
221
+ # help: It will display the favorite commands.
222
+ # help: aliases for favorite: favourite, most used, fav
223
+ # helpmaster: You need to set stats to true to generate the stats when running the bot instance and get this info.
224
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#see-favorite-commands|more info>
225
+ # help:
226
+ when /\A\s*(see\s+)?(my\s+)?(fav|favorite|favourite|most\s+used)\s+commands\s*\z/i
227
+ only_mine = $2.to_s!=''
228
+ see_favorite_commands(user, only_mine)
229
+
230
+ else
231
+ return false
232
+ end
233
+ return true
234
+ rescue => exception
235
+ if defined?(@logger)
236
+ @logger.fatal exception
237
+ respond "Unexpected error!! Please contact an admin to solve it: <@#{config.admins.join(">, <@")}>"
238
+ else
239
+ puts exception
240
+ end
241
+ return false
242
+ end
243
+ end