slack-smart-bot 1.8.1 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
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