slack-smart-bot 1.10.0 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +134 -23
  3. data/lib/slack/smart-bot/comm/delete.rb +13 -0
  4. data/lib/slack/smart-bot/comm/dont_understand.rb +2 -2
  5. data/lib/slack/smart-bot/comm/get_channel_members.rb +7 -3
  6. data/lib/slack/smart-bot/comm/get_presence.rb +20 -0
  7. data/lib/slack/smart-bot/comm/get_users.rb +1 -1
  8. data/lib/slack/smart-bot/comm/respond.rb +24 -13
  9. data/lib/slack/smart-bot/comm/send_msg_user.rb +12 -11
  10. data/lib/slack/smart-bot/comm/set_status.rb +21 -0
  11. data/lib/slack/smart-bot/comm.rb +3 -0
  12. data/lib/slack/smart-bot/commands/general/add_admin.rb +51 -0
  13. data/lib/slack/smart-bot/commands/general/add_announcement.rb +1 -1
  14. data/lib/slack/smart-bot/commands/general/add_memo_team.rb +117 -0
  15. data/lib/slack/smart-bot/commands/general/add_team.rb +80 -0
  16. data/lib/slack/smart-bot/commands/general/add_vacation.rb +51 -0
  17. data/lib/slack/smart-bot/commands/general/allow_access.rb +67 -0
  18. data/lib/slack/smart-bot/commands/general/bot_help.rb +20 -11
  19. data/lib/slack/smart-bot/commands/general/delete_announcement.rb +1 -1
  20. data/lib/slack/smart-bot/commands/general/delete_memo_team.rb +69 -0
  21. data/lib/slack/smart-bot/commands/general/delete_share.rb +1 -1
  22. data/lib/slack/smart-bot/commands/general/delete_team.rb +54 -0
  23. data/lib/slack/smart-bot/commands/general/deny_access.rb +36 -0
  24. data/lib/slack/smart-bot/commands/general/ping_team.rb +100 -0
  25. data/lib/slack/smart-bot/commands/general/poster.rb +116 -0
  26. data/lib/slack/smart-bot/commands/general/remove_admin.rb +58 -0
  27. data/lib/slack/smart-bot/commands/general/remove_vacation.rb +27 -0
  28. data/lib/slack/smart-bot/commands/general/see_access.rb +24 -0
  29. data/lib/slack/smart-bot/commands/general/see_admins.rb +33 -0
  30. data/lib/slack/smart-bot/commands/general/see_announcements.rb +7 -5
  31. data/lib/slack/smart-bot/commands/general/see_command_ids.rb +29 -0
  32. data/lib/slack/smart-bot/commands/general/see_favorite_commands.rb +3 -4
  33. data/lib/slack/smart-bot/commands/general/see_statuses.rb +34 -21
  34. data/lib/slack/smart-bot/commands/general/see_teams.rb +402 -0
  35. data/lib/slack/smart-bot/commands/general/see_vacations.rb +58 -0
  36. data/lib/slack/smart-bot/commands/general/see_vacations_team.rb +136 -0
  37. data/lib/slack/smart-bot/commands/general/set_memo_status.rb +58 -0
  38. data/lib/slack/smart-bot/commands/general/share_messages.rb +1 -1
  39. data/lib/slack/smart-bot/commands/general/update_team.rb +130 -0
  40. data/lib/slack/smart-bot/commands/general_bot_commands.rb +442 -13
  41. data/lib/slack/smart-bot/commands/on_bot/add_shortcut.rb +2 -1
  42. data/lib/slack/smart-bot/commands/on_bot/admin/add_routine.rb +2 -1
  43. data/lib/slack/smart-bot/commands/on_bot/admin/extend_rules.rb +2 -1
  44. data/lib/slack/smart-bot/commands/on_bot/admin/pause_bot.rb +2 -1
  45. data/lib/slack/smart-bot/commands/on_bot/admin/pause_routine.rb +2 -1
  46. data/lib/slack/smart-bot/commands/on_bot/admin/remove_routine.rb +2 -1
  47. data/lib/slack/smart-bot/commands/on_bot/admin/run_routine.rb +3 -2
  48. data/lib/slack/smart-bot/commands/on_bot/admin/see_result_routine.rb +2 -1
  49. data/lib/slack/smart-bot/commands/on_bot/admin/see_routines.rb +10 -9
  50. data/lib/slack/smart-bot/commands/on_bot/admin/start_bot.rb +2 -1
  51. data/lib/slack/smart-bot/commands/on_bot/admin/start_routine.rb +2 -1
  52. data/lib/slack/smart-bot/commands/on_bot/admin/stop_using_rules_on.rb +2 -1
  53. data/lib/slack/smart-bot/commands/on_bot/admin_master/delete_message.rb +25 -0
  54. data/lib/slack/smart-bot/commands/on_bot/admin_master/get_bot_logs.rb +1 -0
  55. data/lib/slack/smart-bot/commands/on_bot/admin_master/react_to.rb +3 -1
  56. data/lib/slack/smart-bot/commands/on_bot/admin_master/send_message.rb +15 -2
  57. data/lib/slack/smart-bot/commands/on_bot/delete_repl.rb +2 -1
  58. data/lib/slack/smart-bot/commands/on_bot/delete_shortcut.rb +5 -4
  59. data/lib/slack/smart-bot/commands/on_bot/general/bot_stats.rb +416 -0
  60. data/lib/slack/smart-bot/commands/{general → on_bot/general}/bot_status.rb +1 -0
  61. data/lib/slack/smart-bot/commands/{general → on_bot/general}/leaderboard.rb +1 -0
  62. data/lib/slack/smart-bot/commands/{general → on_bot/general}/stop_using_rules.rb +1 -0
  63. data/lib/slack/smart-bot/commands/{general → on_bot/general}/suggest_command.rb +6 -0
  64. data/lib/slack/smart-bot/commands/{general → on_bot/general}/use_rules.rb +1 -0
  65. data/lib/slack/smart-bot/commands/{general → on_bot/general}/whats_new.rb +2 -1
  66. data/lib/slack/smart-bot/commands/on_bot/get_repl.rb +2 -1
  67. data/lib/slack/smart-bot/commands/on_bot/kill_repl.rb +32 -0
  68. data/lib/slack/smart-bot/commands/on_bot/repl.rb +73 -15
  69. data/lib/slack/smart-bot/commands/on_bot/ruby_code.rb +1 -0
  70. data/lib/slack/smart-bot/commands/on_bot/run_repl.rb +117 -28
  71. data/lib/slack/smart-bot/commands/on_bot/see_repls.rb +2 -1
  72. data/lib/slack/smart-bot/commands/on_bot/see_shortcuts.rb +3 -2
  73. data/lib/slack/smart-bot/commands/on_master/admin/kill_bot_on_channel.rb +5 -4
  74. data/lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb +3 -2
  75. data/lib/slack/smart-bot/commands/on_master/admin_master/notify_message.rb +2 -1
  76. data/lib/slack/smart-bot/commands/on_master/admin_master/publish_announcements.rb +6 -3
  77. data/lib/slack/smart-bot/commands/on_master/admin_master/set_general_message.rb +2 -1
  78. data/lib/slack/smart-bot/commands/on_master/admin_master/set_maintenance.rb +2 -1
  79. data/lib/slack/smart-bot/commands/on_master/create_bot.rb +1 -0
  80. data/lib/slack/smart-bot/commands/on_master/where_smartbot.rb +41 -0
  81. data/lib/slack/smart-bot/commands.rb +30 -7
  82. data/lib/slack/smart-bot/listen.rb +30 -30
  83. data/lib/slack/smart-bot/process.rb +53 -23
  84. data/lib/slack/smart-bot/process_first.rb +2 -2
  85. data/lib/slack/smart-bot/treat_message.rb +23 -17
  86. data/lib/slack/smart-bot/utils/build_help.rb +1 -1
  87. data/lib/slack/smart-bot/utils/check_vacations.rb +43 -0
  88. data/lib/slack/smart-bot/utils/create_routine_thread.rb +1 -1
  89. data/lib/slack/smart-bot/utils/get_access_channels.rb +13 -0
  90. data/lib/slack/smart-bot/utils/get_admins_channels.rb +33 -0
  91. data/lib/slack/smart-bot/utils/get_bots_created.rb +27 -10
  92. data/lib/slack/smart-bot/utils/get_channels_name_and_id.rb +7 -2
  93. data/lib/slack/smart-bot/utils/get_command_ids.rb +84 -0
  94. data/lib/slack/smart-bot/utils/get_help.rb +36 -19
  95. data/lib/slack/smart-bot/utils/get_repls.rb +22 -2
  96. data/lib/slack/smart-bot/utils/get_routines.rb +22 -2
  97. data/lib/slack/smart-bot/utils/get_teams.rb +22 -0
  98. data/lib/slack/smart-bot/utils/get_vacations.rb +22 -0
  99. data/lib/slack/smart-bot/utils/has_access.rb +25 -9
  100. data/lib/slack/smart-bot/utils/is_admin.rb +27 -0
  101. data/lib/slack/smart-bot/utils/save_stats.rb +52 -42
  102. data/lib/slack/smart-bot/utils/save_status.rb +22 -7
  103. data/lib/slack/smart-bot/utils/update_access_channels.rb +8 -0
  104. data/lib/slack/smart-bot/utils/update_admins_channels.rb +25 -0
  105. data/lib/slack/smart-bot/utils/update_bots_file.rb +28 -7
  106. data/lib/slack/smart-bot/utils/update_repls.rb +7 -4
  107. data/lib/slack/smart-bot/utils/update_routines.rb +9 -3
  108. data/lib/slack/smart-bot/utils/update_shortcuts_file.rb +13 -6
  109. data/lib/slack/smart-bot/utils/update_teams.rb +16 -0
  110. data/lib/slack/smart-bot/utils/update_vacations.rb +16 -0
  111. data/lib/slack/smart-bot/utils.rb +11 -0
  112. data/lib/slack-smart-bot.rb +50 -12
  113. data/lib/slack-smart-bot_general_commands.rb +16 -1
  114. data/whats_new.txt +12 -30
  115. metadata +78 -21
  116. data/lib/slack/smart-bot/commands/general/bot_stats.rb +0 -314
@@ -27,6 +27,7 @@ def general_bot_commands(user, command, dest, files = [])
27
27
  # help: you can use the option 'expanded' or the alias 'extended'
28
28
  # help: `bot rules` will show only the specific rules for this channel.
29
29
  # help: <https://github.com/MarioRuiz/slack-smart-bot#bot-help|more info>
30
+ # help: command_id: :bot_help
30
31
  # help:
31
32
 
32
33
 
@@ -39,6 +40,7 @@ def general_bot_commands(user, command, dest, files = [])
39
40
  # help: After that if you want to avoid a single message to be treated by the smart bot, start the message by -
40
41
  # help: Also apart of Hello you can use _Hallo, Hi, Hola, What's up, Hey, Hæ_
41
42
  # help: <https://github.com/MarioRuiz/slack-smart-bot#how-to-access-the-smart-bot|more info>
43
+ # help: command_id: :hi_bot
42
44
  # help:
43
45
  when /\A\s*(Hello|Hallo|Hi|Hola|What's\sup|Hey|Hæ)\s+(#{@salutations.join("|")})\s*$/i
44
46
  hi_bot(user, dest, user.name, display_name)
@@ -50,6 +52,7 @@ def general_bot_commands(user, command, dest, files = [])
50
52
  # help: Bot stops listening to you if you are on a Bot channel
51
53
  # help: Also apart of Bye you can use _Bæ, Good Bye, Adiós, Ciao, Bless, Bless Bless, Adeu_
52
54
  # help: <https://github.com/MarioRuiz/slack-smart-bot#how-to-access-the-smart-bot|more info>
55
+ # help: command_id: :bye_bot
53
56
  # help:
54
57
  when /\A\s*(Bye|Bæ|Good\s+Bye|Adiós|Ciao|Bless|Bless\sBless|Adeu)\s+(#{@salutations.join("|")})\s*$/i
55
58
  bye_bot(dest, user.name, display_name)
@@ -70,9 +73,10 @@ def general_bot_commands(user, command, dest, files = [])
70
73
  # help: _add message `*Party* will start at *20:00* :tada:`_
71
74
  # help: _add :heavy_exclamation_mark: message Pay attention all DB are on maintenance until 20:00 GMT_
72
75
  # help: <https://github.com/MarioRuiz/slack-smart-bot#announcements|more info>
76
+ # help: command_id: :add_announcement
73
77
  # help:
74
78
  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
79
+ /\A\s*(add|create)\s+(:[\w\-]+:)\s+(announcement|statement|declaration|message)\s+(.+)\s*\z/i
76
80
  type = $2.to_s.downcase.strip
77
81
  type = 'white' if type == ''
78
82
  message = $4
@@ -89,6 +93,7 @@ def general_bot_commands(user, command, dest, files = [])
89
93
  # help: _delete statement 77_
90
94
  # help: _delete declaration 334_
91
95
  # help: <https://github.com/MarioRuiz/slack-smart-bot#announcements|more info>
96
+ # help: command_id: :delete_announcement
92
97
  # help:
93
98
  when /\A\s*(delete|remove)\s+(announcement|statement|declaration|message)\s+(\d+)\s*\z/i
94
99
  message_id = $3
@@ -115,11 +120,12 @@ def general_bot_commands(user, command, dest, files = [])
115
120
  # help: _see messages_
116
121
  # help: _see :heavy_exclamation_mark: messages_
117
122
  # help: <https://github.com/MarioRuiz/slack-smart-bot#announcements|more info>
123
+ # help: command_id: :see_announcements
118
124
  # help:
119
- when /\A\s*see\s+(red\s+|green\s+|white\s+|yellow\s+|:\w+:\s+)?(announcements|statements|declarations|messages)()\s*\z/i,
125
+ when /\A\s*see\s+(red\s+|green\s+|white\s+|yellow\s+|:[\w\-]+:\s+)?(announcements|statements|declarations|messages)()\s*\z/i,
120
126
  /\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
127
+ /\A\s*see\s+(red\s+|green\s+|white\s+|yellow\s+|:[\w\-]+:\s+)?(announcements|statements|declarations|messages)\s+#([\w\-]+)\s*\z/i,
128
+ /\A\s*see\s+(red\s+|green\s+|white\s+|yellow\s+|:[\w\-]+:\s+)?(announcements|statements|declarations|messages)\s+<#(\w+)\|.*>\s*\z/i
123
129
 
124
130
  type = $1.to_s.downcase.strip
125
131
  channel = $3.to_s
@@ -137,11 +143,12 @@ def general_bot_commands(user, command, dest, files = [])
137
143
  # help: The Regexp will automatically add the parameters /im
138
144
  # help: Only available on public channels.
139
145
  # help: Examples:
140
- # help: _share messages /(last\s+|previous\s+)?sales\s+results\s+/ on #sales_
146
+ # help: _share messages /(last\s+|previous\s+)sales\s+results\s+/ on #sales_
141
147
  # help: _share messages "share post" on #announcements_
142
148
  # xhelp: _share messages :tada: on #announcements_
143
149
  # xhelp: _share messages :moneybag: from #sales_
144
150
  # help: <https://github.com/MarioRuiz/slack-smart-bot#share-messages|more info>
151
+ # help: command_id: :share_messages
145
152
  # help:
146
153
  when /\A\s*share\s+messages\s+(\/.+\/|".+"|'.+')\s+on\s+<#\w+\|(.+)>\s*\z/i,
147
154
  /\A\s*share\s+messages\s+(\/.+\/|".+"|'.+')\s+on\s+<#(\w+)\|>\s*\z/,
@@ -158,6 +165,7 @@ def general_bot_commands(user, command, dest, files = [])
158
165
  # help: `see shares`
159
166
  # help: It will display the active shares from this channel.
160
167
  # help: <https://github.com/MarioRuiz/slack-smart-bot#share-messages|more info>
168
+ # help: command_id: :see_shares
161
169
  # help:
162
170
  when /\A\s*see\s+shares\s*\z/i
163
171
  see_shares()
@@ -168,6 +176,7 @@ def general_bot_commands(user, command, dest, files = [])
168
176
  # help: Examples:
169
177
  # help: _delete share 24_
170
178
  # help: <https://github.com/MarioRuiz/slack-smart-bot#share-messages|more info>
179
+ # help: command_id: :delete_share
171
180
  # help:
172
181
  when /\A\s*(delete|remove)\s+share\s+(\d+)\s*\z/i
173
182
  share_id = $2
@@ -185,26 +194,34 @@ def general_bot_commands(user, command, dest, files = [])
185
194
  # help: `who is on EMOJI1 EMOJI99`
186
195
  # help: `who is not on vacation?`
187
196
  # help: `who is not on EMOJI`
197
+ # help: `who is available?`
188
198
  # 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.
199
+ # help: In case of `who is available?` will show members of the channel that are on line and not on a meeting or vacation or sick.
189
200
  # help: <https://github.com/MarioRuiz/slack-smart-bot#see-statuses|more info>
201
+ # help: command_id: :see_statuses
190
202
  # help:
191
203
  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,
204
+ /\A\s*(see\s+status|get\s+status|who\s+is\s+on|who\s+are\s+on|who\s+is\s+not\s+on|who\s+are\s+not\s+on)\s+(:[\w\-\:\s]+:)\s*\??()\s*\z/i,
205
+ /\A\s*(who\s+is\s+on|who\s+are\s+on|who\s+is\s+not\s+on|who\s+are\s+not\s+on)\s+(vacation|holiday)\s*\??()\s*\z/i,
206
+ /\A\s*(who\s+is|who\s+are)\s+(available|active)\s*\??()\s*\z/i,
194
207
  /\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
208
+ /\A\s*(see\s+status|get\s+status|who\s+is\s+on|who\s+are\s+on|who\s+is\s+not\s+on|who\s+are\s+not\s+on)\s+(:[\w\-\:\s]+:)\s*\??\s+#([\w\-]+)\s*\z/i,
209
+ /\A\s*(who\s+is|who\s+are)\s+(available|active)\s*\??\s+#([\w\-]+)\s*\z/i,
210
+ /\A\s*(who\s+is|who\s+are)\s+(available|active)\s*\??\s+<#(\w+)\|.*>\s*\z/i,
211
+ /\A\s*(who\s+is\s+on|who\s+are\s+on|who\s+is\s+not\s+on|who\s+are\s+not\s+on)\s+(vacation|holiday)\s*\??\s+#([\w\-]+)\s*\z/i,
212
+ /\A\s*(see|get)\s+(statuses)\s+<#(\w+)\|.*>\s*\z/i,
213
+ /\A\s*(see\s+status|get\s+status|who\s+is\s+on|who\s+is\s+not\s+on|who\s+are\s+on|who\s+are\s+not\s+on)\s+(:[\w\-\:\s]+:)\s*\??\s+<#(\w+)\|.*>\s*\z/i,
214
+ /\A\s*(who\s+is\s+on|who\s+is\s+not\s+on|who\s+are\s+on|who\s+are\s+not\s+on)\s+(vacation|holiday)\s*\??\s+<#(\w+)\|.*>\s*\z/i
200
215
 
201
- not_on = $1.match?(/who\s+is\s+not\s+on/i)
216
+ not_on = $1.match?(/who\s+(is|are)\s+not\s+on/i)
202
217
  type = $2.downcase
203
218
  channel = $3.to_s
204
219
  if type == 'statuses'
205
220
  types = []
206
221
  elsif type =='vacation' or type == 'holiday'
207
222
  types = [':palm_tree:']
223
+ elsif type == 'available' or type == 'active'
224
+ types = ['available']
208
225
  else
209
226
  type.gsub!(' ', '')
210
227
  type.gsub!('::',': :')
@@ -222,11 +239,423 @@ def general_bot_commands(user, command, dest, files = [])
222
239
  # help: aliases for favorite: favourite, most used, fav
223
240
  # helpmaster: You need to set stats to true to generate the stats when running the bot instance and get this info.
224
241
  # help: <https://github.com/MarioRuiz/slack-smart-bot#see-favorite-commands|more info>
242
+ # help: command_id: :see_favorite_commands
225
243
  # help:
226
244
  when /\A\s*(see\s+)?(my\s+)?(fav|favorite|favourite|most\s+used)\s+commands\s*\z/i
227
245
  only_mine = $2.to_s!=''
228
246
  see_favorite_commands(user, only_mine)
229
247
 
248
+ # helpadmin: ----------------------------------------------
249
+ # helpadmin: `add admin @user`
250
+ # helpadmin: It will add @user as an admin of the channel.
251
+ # helpadmin: Only creator of the channel, admins and master admins can use this command.
252
+ # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#bot-management|more info>
253
+ # helpadmin: command_id: :add_admin
254
+ # helpadmin:
255
+ when /\A\s*add\s+admin\s+<@(\w+)>\s*\z/i
256
+ admin_user = $1
257
+ add_admin(user, admin_user)
258
+
259
+ # help: ----------------------------------------------
260
+ # help: `see admins`
261
+ # help: `show admins`
262
+ # help: `who are admins?`
263
+ # help: It will show who are the admins of the channel.
264
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#bot-management|more info>
265
+ # help: command_id: :see_admins
266
+ # help:
267
+ when /\A\s*(see|show)\s+admins\s*\z/i, /\A\s*who\s+are\s+(the\s+)?admins\??\s*\z/i
268
+ see_admins()
269
+
270
+ # helpadmin: ----------------------------------------------
271
+ # helpadmin: `remove admin @user`
272
+ # helpadmin: It will remove the admin privileges for @user on the channel.
273
+ # helpadmin: Only creator of the channel, admins and master admins can use this command.
274
+ # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#bot-management|more info>
275
+ # helpadmin: command_id: :remove_admin
276
+ # helpadmin:
277
+ when /\A\s*(remove|delete)\s+admin\s+<@(\w+)>\s*\z/i
278
+ admin_user = $2
279
+ remove_admin(user, admin_user)
280
+
281
+ # helpadmin: ----------------------------------------------
282
+ # helpadmin: `see command ids`
283
+ # helpadmin: It will display all available command ids.
284
+ # helpadmin: The command id can be used on `bot stats command COMMAND_ID`, `allow access COMMAND_ID` and `deny access COMMAND_ID`
285
+ # helpadmin: Only creator of the channel, admins and master admins can use this command.
286
+ # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#bot-management|more info>
287
+ # helpadmin: command_id: :see_command_ids
288
+ # helpadmin:
289
+ when /\A\s*(see|display|get)\s+command(\s+|_)ids?\s*\z/i
290
+ see_command_ids()
291
+
292
+ # helpadmin: ----------------------------------------------
293
+ # helpadmin: `allow access COMMAND_ID`
294
+ # helpadmin: `allow access COMMAND_ID @user1 @user99`
295
+ # helpadmin: It will allow the specified command to be used on the channel.
296
+ # helpadmin: If @user specified, only those users will have access to the command.
297
+ # helpadmin: Only admins of the channel can use this command
298
+ # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#control-who-has-access-to-a-command|more info>
299
+ # helpadmin: command_id: :allow_access
300
+ # helpadmin:
301
+ when /\A\s*(allow|give)\s+access\s+(\w+)\s+(.+)\s*\z/i, /\A\s*(allow|give)\s+access\s+(\w+)()\s*\z/i
302
+ command_id = $2.downcase
303
+ opt = $3.to_s.split(' ')
304
+ allow_access(user, command_id, opt)
305
+
306
+ # helpadmin: ----------------------------------------------
307
+ # helpadmin: `deny access COMMAND_ID`
308
+ # helpadmin: It won't allow the specified command to be used on the channel.
309
+ # helpadmin: Only admins of the channel can use this command
310
+ # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#control-who-has-access-to-a-command|more info>
311
+ # helpadmin: command_id: :deny_access
312
+ # helpadmin:
313
+ when /\A\s*deny\s+access(\s+rights)?\s+(\w+)\s*\z/i
314
+ command_id = $2.downcase
315
+ deny_access(user, command_id)
316
+
317
+
318
+ # help: ----------------------------------------------
319
+ # help: `see access COMMAND_ID`
320
+ # help: It will show the access rights for the specified command.
321
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#control-who-has-access-to-a-command|more info>
322
+ # help: command_id: :see_access
323
+ # help:
324
+ when /\A\s*(see|show)\s+access(\s+rights)?\s+(.+)\s*\z/i
325
+ command_id = $3.downcase
326
+ see_access(command_id)
327
+
328
+ # help: ----------------------------------------------
329
+ # help: `poster MESSAGE`
330
+ # help: `poster :EMOTICON_TEXT: MESSAGE`
331
+ # help: `poster :EMOTICON_TEXT: :EMOTICON_BACKGROUND: MESSAGE`
332
+ # help: `poster MINUTESm MESSAGE`
333
+ # help: It will create a poster with the message supplied. By default will be autodeleted 1 minute later.
334
+ # help: If you want the poster to be permanent then use the command `pposter`
335
+ # help: If minutes supplied then it will be deleted after the minutes specified. Maximum value 60.
336
+ # help: To see the messages on a mobile phone put the phone on landscape mode
337
+ # help: Max 15 characters. If the message is longer than that won't be treat it.
338
+ # help: Only letters from a to z, 0 to 9 and the chars: ? ! - + =
339
+ # help: To be displayed correctly use words with no more than 6 characters
340
+ # help: Examples:
341
+ # help: _poster nice work!_
342
+ # help: _poster :heart: nice work!_
343
+ # help: _poster :mac-spinning-wheel: :look: love!_
344
+ # help: _poster 25m :heart: woah!_
345
+ # help: command_id: :poster
346
+ # help:
347
+ when /\A()poster\s+(\d+m\s+)?(:[^:]+:)\s+(:[^:]+:)(.+)\s*\z/i, /\A()poster\s+(\d+m\s+)?(:.+:)\s+()(.+)\s*\z/i, /\A()poster\s+(\d+m\s+)?()()(.+)\s*\z/i,
348
+ /\A(p)poster\s+()(:[^:]+:)\s+(:[^:]+:)(.+)\s*\z/i, /\A(p)poster\s+()(:.+:)\s+()(.+)\s*\z/i, /\A(p)poster\s+()()()(.+)\s*\z/i
349
+ permanent = $1.to_s != ''
350
+ minutes = $2.to_s
351
+ emoticon_text = $3
352
+ emoticon_bg = $4
353
+ text = $5
354
+ minutes = minutes.scan(/(\d+)/).join
355
+
356
+ if minutes == ''
357
+ minutes = 1
358
+ elsif minutes.to_i > 60
359
+ minutes = 60
360
+ end
361
+
362
+ save_stats :poster
363
+ if text.to_s.gsub(/\s+/, '').length > 15
364
+ respond "Too long. Max 15 chars", :on_thread
365
+ else
366
+ poster(permanent, emoticon_text, emoticon_bg, text, minutes)
367
+ end
368
+
369
+ # help: ----------------------------------------------
370
+ # help: `add team TEAM_NAME members #TEAM_CHANNEL CHANNEL_TYPE #CHANNEL1 #CHANNEL99 : INFO`
371
+ # help: `add team TEAM_NAME MEMBER_TYPE @USER1 @USER99 CHANNEL_TYPE #CHANNEL1 #CHANNEL99 : INFO`
372
+ # help: `add team TEAM_NAME MEMBER_TYPE1 @USER1 @USER99 MEMBER_TYPE99 @USER1 @USER99 CHANNEL_TYPE1 #CHANNEL1 #CHANNEL99 CHANNEL_TYPE99 #CHANNEL1 #CHANNEL99 : INFO`
373
+ # help: It will add a team with the info supplied.
374
+ # help: TEAM_NAME, TYPE: one word, a-z, A-Z, 0-9, - and _
375
+ # help: In case it is supplied a channel with type 'members' the members of that channel would be considered members of the team. The SmartBot needs to be a member of the channel.
376
+ # help: Examples:
377
+ # help: _add team sales members #sales support #sales-support public #sales-ff : Contact us if you need anything related to Sales. You can also send us an email at sales@ffxaja.com_
378
+ # help: _add team Sales manager @ann qa @peter @berglind dev @john @sam @marta members #sales support #sales-support public #sales-ff : Contact us if you need anything related to Sales. You can also send us an email at sales@ffxaja.com_
379
+ # help: _add team devweb qa @jim dev @johnja @cooke @luisa members #devweb support #devweb-support : We take care of the website_
380
+ # help: _add team sandex manager @sarah members #sandex : We take care of the sand_
381
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
382
+ # help: command_id: :add_team
383
+ # help:
384
+ when /\A\s*add\s+team\s+([\w\-]+)\s+([^:]+)\s*:\s+(.+)\s*\z/im, /\A\s*add\s+([\w\-]+)\s+team\s+([^:]+)\s*:\s+(.+)\s*\z/im
385
+ name = $1.downcase
386
+ options = $2
387
+ info = Thread.current[:command_orig].to_s.gsub("\u00A0", " ").scan(/^[^:]+:\s*(.+)\s*$/im).join
388
+ add_team(user, name, options, info)
389
+
390
+ # help: ----------------------------------------------
391
+ # help: `add TYPE to TEAM_NAME team : MESSAGE`
392
+ # help: `add private TYPE to TEAM_NAME team : MESSAGE`
393
+ # help: `add personal TYPE to TEAM_NAME team : MESSAGE`
394
+ # help: `add TYPE to TEAM_NAME team TOPIC : MESSAGE`
395
+ # help: `add private TYPE to TEAM_NAME team TOPIC : MESSAGE`
396
+ # help: `add personal TYPE to TEAM_NAME team TOPIC : MESSAGE`
397
+ # help: It will add a memo to the team. The memos will be displayed with the team info.
398
+ # help: Only team members can add a memo.
399
+ # help: TYPE: memo, note, issue, task, feature, bug, jira, github
400
+ # help: TOPIC: one word, a-z, A-Z, 0-9, - and _
401
+ # help: If private then the memo will be only displayed to team members on a DM or the members channel.
402
+ # help: If personal then the memo will be only displayed to the creator on a DM.
403
+ # help: In case jira type supplied:
404
+ # help: The message should be an JQL URL, JQL string or an issue URL.
405
+ # help: To be able to use it you need to specify on the SmartBot settings the credentials.
406
+ # help: In case no TOPIC is supplied then it will create automatically the topics from the labels specified on every JIRA issue
407
+ # help: In case github type supplied:
408
+ # help: The message should be a github URL. You can filter by state (open/closed/all) and labels
409
+ # help: To be able to use it you need to specify on the SmartBot settings the github token.
410
+ # help: In case no TOPIC is supplied then it will create automatically the topics from the labels specified on every Github issue
411
+ # help: Examples:
412
+ # help: _add memo to sales team : Add tests for Michigan feature_
413
+ # help: _add private note to sales team : Bills will need to be deployed before Friday_
414
+ # help: _add memo to dev team web : Check last version_
415
+ # help: _add private bug to dev team SRE : Logs should not be accessible from outside VPN_
416
+ # help: _add memo sales team : Add tests for Michigan feature_
417
+ # help: _add memo team sales: Add tests for Michigan feature_
418
+ # help: _add personal memo team sales: Check my vacations_
419
+ # help: _add jira to sales team : labels = SalesT AND status != Done_
420
+ # help: _add github to sales team : PeterBale/SalesBoom/issues?state=open&labels=bug_
421
+ # help: _add github to sales team dev: PeterBale/DevProject/issues/71_
422
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
423
+ # help: command_id: :add_memo_team
424
+ # help:
425
+ when /\A\s*add\s+(private\s+|personal\s+)?(memo|note|issue|task|feature|bug|jira|github)\s+(to\s+)?team\s+([\w\-]+)\s*([^:]+)?\s*:\s+(.+)\s*\z/im,
426
+ /\A\s*add\s+(private\s+|personal\s+)?(memo|note|issue|task|feature|bug|jira|github)\s+(to\s+)?([\w\-]+)\s+team\s*([^:]+)?\s*:\s+(.+)\s*\z/im
427
+ privacy = $1.to_s.strip.downcase
428
+ type = $2.downcase
429
+ team_name = $4.downcase
430
+ topic = $5.to_s.strip
431
+ message = Thread.current[:command_orig].to_s.gsub("\u00A0", " ").scan(/^[^:]+:\s*(.+)\s*$/im).join
432
+ add_memo_team(user, privacy, team_name, topic, type, message)
433
+
434
+ # help: ----------------------------------------------
435
+ # help: `delete memo ID from TEAM_NAME team`
436
+ # help: It will delete the supplied memo ID on the team specified.
437
+ # help: aliases for memo: note, issue, task, feature, bug, jira, github
438
+ # help: You have to be a member of the team, the creator or a Master admin to be able to delete a memo.
439
+ # help: Examples:
440
+ # help: _delete memo 32 from sales team_
441
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
442
+ # help: command_id: :delete_memo_team
443
+ # help:
444
+ when /\A\s*(delete|remove)\s+(memo|note|issue|task|feature|bug|jira|github)\s+(\d+)\s+(from|on)\s+team\s+([\w\-]+)\s*\z/i,
445
+ /\A\s*(delete|remove)\s+(memo|note|issue|task|feature|bug|jira|github)\s+(\d+)\s+(from|on)\s+([\w\-]+)\s+team\s*\z/i
446
+ memo_id = $3
447
+ team_name = $5.downcase
448
+ delete_memo_team(user, team_name, memo_id)
449
+
450
+ # help: ----------------------------------------------
451
+ # help: `set memo ID on TEAM_NAME team STATUS`
452
+ # help: `set STATUS on memo ID TEAM_NAME team`
453
+ # help: It will assign to the ID specified the emoticon status indicated.
454
+ # help: aliases for memo: note, issue, task, feature, bug
455
+ # help: This command will be only for memo, note, issue, task, feature, bug. Not for jira or github.
456
+ # help: You have to be a member of the team, the creator or a Master admin to be able to set a status.
457
+ # help: Examples:
458
+ # help: _set memo 32 on sales team :runner:_
459
+ # help: _set bug 7 on team sales :heavy_check_mark:_
460
+ # help: _set :runner: on memo 6 sales team_
461
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
462
+ # help: command_id: :set_memo_status
463
+ # help:
464
+ when /\A\s*(set)\s+(memo|note|issue|task|feature|bug)\s+(\d+)\s+on\s+team\s+([\w\-]+)\s+(:[\w\-]+:)\s*\z/i,
465
+ /\A\s*(set)\s+(memo|note|issue|task|feature|bug)\s+(\d+)\s+on\s+([\w\-]+)\s+team\s+(:[\w\-]+:)\s*\z/i
466
+ memo_id = $3
467
+ team_name = $4.downcase
468
+ status = $5
469
+ set_memo_status(user, team_name, memo_id, status)
470
+
471
+ when /\A\s*(set)\s+(:[\w\-]+:)\s+on\s+(memo|note|issue|task|feature|bug)\s+(\d+)\s+team\s+([\w\-]+)\s*\z/i,
472
+ /\A\s*(set)\s+(:[\w\-]+:)\s+on\s+(memo|note|issue|task|feature|bug)\s+(\d+)\s+([\w\-]+)\s+team\s*\z/i
473
+ memo_id = $4
474
+ team_name = $5.downcase
475
+ status = $2
476
+ set_memo_status(user, team_name, memo_id, status)
477
+
478
+ # help: ----------------------------------------------
479
+ # help: `see teams`
480
+ # help: `see team TEAM_NAME`
481
+ # help: `team TEAM_NAME`
482
+ # help: `TEAM_NAME team`
483
+ # help: `which team @USER`
484
+ # help: `which team #CHANNEL`
485
+ # help: `which team TEXT_TO_SEARCH_ON_INFO`
486
+ # help: `which team does @USER belongs to?`
487
+ # help: It will display all teams or the team specified.
488
+ # help: In case a specific team it will show also the availability of the members.
489
+ # help: Examples:
490
+ # help: _see teams_
491
+ # help: _see team Sales_
492
+ # help: _Dev team_
493
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
494
+ # help: command_id: :see_teams
495
+ # help:
496
+ when /\A\s*see\s+teams?\s*([\w\-]+)?\s*\z/i, /\A\s*team\s+([\w\-]+)\s*\z/i, /\A\s*([\w\-]+)\s+team\s*\z/i, /\A\s*see\s+all\s+teams\s*()\z/i
497
+ name = $1.to_s.downcase
498
+ see_teams(user, name)
499
+ when /\A\s*(which|search)\s+teams?\s+(is\s+)?(.+)\??\s*\z/i, /\A\s*which\s+team\s+does\s+()()(.+)\s+belongs\s+to\??\s*\z/i
500
+ search = $3.to_s.downcase
501
+ see_teams(user, '', search)
502
+
503
+ # help: ----------------------------------------------
504
+ # help: `update team TEAM_NAME NEW_TEAM_NAME`
505
+ # help: `update team TEAM_NAME : NEW_INFO`
506
+ # help: `update team TEAM_NAME add MEMBER_TYPE @USER`
507
+ # help: `update team TEAM_NAME add CHANNEL_TYPE #CHANNEL`
508
+ # help: `update team TEAM_NAME delete MEMBER_TYPE @USER`
509
+ # help: `update team TEAM_NAME delete CHANNEL_TYPE #CHANNEL`
510
+ # help: `update team TEAM_NAME delete @USER`
511
+ # help: `update team TEAM_NAME delete #CHANNEL`
512
+ # help: It will update a team with the info supplied.
513
+ # help: You have to be a member of the team, the creator or a Master admin to be able to update a team.
514
+ # help: Examples:
515
+ # help: _update team sales salesff_
516
+ # help: _update team salesff : Support for customers_
517
+ # help: _update sales team delete @sarah @peter_
518
+ # help: _update team sales delete public #sales_
519
+ # help: _update team sales delete #sales_support_
520
+ # help: _update sales team add public #salesff_
521
+ # help: _update sales team add qa @john @ben @ana_
522
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
523
+ # help: command_id: :update_team
524
+ # help:
525
+ when /\A\s*update\s+team\s+([\w\-]+)\s+([\w\-]+)\s*\z/i, /\A\s*update\s+([\w\-]+)\s+team\s+([\w\-]+)\s*\z/i
526
+ name = $1.downcase
527
+ new_name = $2.downcase
528
+ update_team(user, name, new_name: new_name)
529
+ when /\A\s*update\s+team\s+([\w\-]+)\s*:\s+(.+)\s*\z/im, /\A\s*update\s+([\w\-]+)\s+team\s*:\s+(.+)\s*\z/im
530
+ name = $1.downcase
531
+ new_info = Thread.current[:command_orig].to_s.gsub("\u00A0", " ").scan(/^[^:]+:\s*(.+)\s*$/im).join
532
+ update_team(user, name, new_info: new_info)
533
+ when /\A\s*update\s+team\s+([\w\-]+)\s+(delete|remove)\s+(.+)\s*\z/i, /\A\s*update\s+([\w\-]+)\s+team\s+(delete|remove)\s+(.+)\s*\z/i
534
+ name = $1.downcase
535
+ delete_opts = $3
536
+ update_team(user, name, delete_opts: delete_opts)
537
+ when /\A\s*update\s+team\s+([\w\-]+)\s+add\s+(.+)\s*\z/i, /\A\s*update\s+([\w\-]+)\s+team\s+add\s+(.+)\s*\z/i
538
+ name = $1.downcase
539
+ add_opts = $2
540
+ update_team(user, name, add_opts: add_opts)
541
+
542
+ # help: ----------------------------------------------
543
+ # help: `ping team TEAM_NAME MEMBER_TYPE MESSAGE`
544
+ # help: `contact team TEAM_NAME MEMBER_TYPE MESSAGE`
545
+ # help: ping: It will send the MESSAGE naming all available members of the MEMBER_TYPE supplied.
546
+ # help: contact: It will send the MESSAGE naming all members of the MEMBER_TYPE supplied.
547
+ # help: In case MEMBER_TYPE is 'all' it will name 10 random members of the team
548
+ # help: Examples:
549
+ # help: _ping team sales development How is the status on the last feature_
550
+ # help: _contact team sales qa Please finish testing of dev02 feature before noon_
551
+ # help: _contact team qa all Check the test failures please_
552
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
553
+ # help: command_id: :ping_team
554
+ # help: command_id: :contact_team
555
+ # help:
556
+ when /\A\s*(contact|ping)\s+team\s+([\w\-]+)\s+([\w\-]+)\s+(.+)\s*\z/im, /\A\s*(contact|ping)\s+([\w\-]+)\s+team\s+([\w\-]+)\s+(.+)\s*\z/im
557
+ type = $1.downcase.to_sym
558
+ name = $2.downcase
559
+ member_type = $3.downcase
560
+ message = Thread.current[:command_orig].to_s.gsub("\u00A0", " ").scan(/\A\s*[^\s]+\s*\w+\s+team\s+[\w\-]+\s+[\w\-]+\s+(.+)\s*\z/im).join
561
+ if message == ''
562
+ message = Thread.current[:command_orig].to_s.gsub("\u00A0", " ").scan(/\A\s*[^\s]+\s*\w+\s+[\w\-]+\s+team\s+[\w\-]+\s+(.+)\s*\z/im).join
563
+ end
564
+ ping_team(user, type, name, member_type, message)
565
+
566
+ # help: ----------------------------------------------
567
+ # help: `delete team TEAM_NAME`
568
+ # help: It will delete the supplied team.
569
+ # help: You have to be a member of the team, the creator or a Master admin to be able to delete a team.
570
+ # help: Examples:
571
+ # help: _delete team sales_
572
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
573
+ # help: command_id: :delete_team
574
+ # help:
575
+ when /\A\s*(delete|remove)\s+team\s+([\w\-]+)\s*\z/i, /\A\s*(delete|remove)\s+([\w\-]+)\s+team\s*\z/i
576
+ name = $2.downcase
577
+ delete_team(user, name)
578
+
579
+
580
+ # help: ----------------------------------------------
581
+ # help: `add vacation from YYYY/MM/DD to YYYY/MM/DD`
582
+ # help: `add vacation YYYY/MM/DD`
583
+ # help: `add sick from YYYY/MM/DD to YYYY/MM/DD`
584
+ # help: `add sick YYYY/MM/DD`
585
+ # help: `add sick child YYYY/MM/DD`
586
+ # help: It will add the supplied period to your plan.
587
+ # help: Instead of YYYY/MM/DD you can use 'today' or 'tomorrow' or 'next week'
588
+ # help: To see your plan call `see my time off`
589
+ # help: If you want to see the vacation plan for the team `see team NAME`
590
+ # help: Also you can see the vacation plan for the team for a specific period: `vacations team NAME YYYY/MM/DD`
591
+ # help: The SmartBot will automatically set the users status to :palm_tree:, :baby: or :face_with_thermometer: and the expiration date.
592
+ # help: Examples:
593
+ # help: _add vacation from 2022/10/01 to 2022/10/22_
594
+ # help: _add sick 2022/08/22_
595
+ # help: _add vacation tomorrow_
596
+ # help: _add sick baby today_
597
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#time-off-management|more info>
598
+ # help: command_id: :add_vacation
599
+ # help:
600
+ when /\A\s*add\s+(sick|vacation|sick\s+baby|sick\s+child)\s+from\s+(\d\d\d\d\/\d\d\/\d\d)\s+to\s+(\d\d\d\d\/\d\d\/\d\d)\s*\z/i,
601
+ /\A\s*add\s+(sick|vacation|sick\s+baby|sick\s+child)\s+from\s+(\d\d\d\d-\d\d-\d\d)\s+to\s+(\d\d\d\d-\d\d-\d\d)\s*\z/i,
602
+ /\A\s*add\s+(sick|vacation|sick\s+baby|sick\s+child)\s+(\d\d\d\d-\d\d-\d\d)()\s*\z/i,
603
+ /\A\s*add\s+(sick|vacation|sick\s+baby|sick\s+child)\s+(\d\d\d\d\/\d\d\/\d\d)()\s*\z/i,
604
+ /\A\s*add\s+(sick|vacation|sick\s+baby|sick\s+child)\s+(today|tomorrow|next\sweek)()\s*\z/i
605
+ type = $1
606
+ from = $2.downcase
607
+ to = $3
608
+ add_vacation(user, type, from, to)
609
+
610
+ # help: ----------------------------------------------
611
+ # help: `remove vacation ID`
612
+ # help: `remove vacation period ID`
613
+ # help: `remove sick period ID`
614
+ # help: `remove time off period ID`
615
+ # help: `delete vacation ID`
616
+ # help: It will remove the specified period from your vacations/sick periods.
617
+ # help: Examples:
618
+ # help: _remove vacation 20_
619
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#time-off-management|more info>
620
+ # help: command_id: :remove_vacation
621
+ # help:
622
+ when /\A\s*(delete|remove)\s+(vacation|sick|time\s+off)(\s+period)?\s+(\d+)\s*\z/i
623
+ vacation_id = $4
624
+ remove_vacation(user, vacation_id)
625
+
626
+ # help: ----------------------------------------------
627
+ # help: `see my vacations`
628
+ # help: `see my time off`
629
+ # help: `see vacations @USER`
630
+ # help: It will display current and past time off.
631
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#time-off-management|more info>
632
+ # help: command_id: :see_vacations
633
+ # help:
634
+ when /\A\s*see\s+my\s+vacations\s*()\z/i,
635
+ /\A\s*see\s+my\s+time\s+off\s*()\z/i,
636
+ /\A\s*see\s+time\s+off\s+<@(\w+)>\s*\z/i,
637
+ /\A\s*see\s+vacations\s+<@(\w+)>\s*\z/i
638
+ from_user = $1
639
+ see_vacations(user, from_user: from_user)
640
+
641
+ # help: ----------------------------------------------
642
+ # help: `vacations team NAME`
643
+ # help: `time off team NAME`
644
+ # help: `vacations team NAME YYYY/MM/DD`
645
+ # help: `time off team NAME YYYY/MM/DD`
646
+ # help: It will display the time off plan for the team specified.
647
+ # help: <https://github.com/MarioRuiz/slack-smart-bot#time-off-management|more info>
648
+ # help: command_id: :see_vacations_team
649
+ # help:
650
+ when /\A\s*(see\s+)?(vacations|time\s+off)\s+team\s+([\w\-]+)\s*(\d\d\d\d\/\d\d\/\d\d)?\s*\z/i,
651
+ /\A\s*(see\s+)?(vacations|time\s+off)\s+([\w\-]+)\s+team\s*(\d\d\d\d\/\d\d\/\d\d)?\s*\z/i,
652
+ /\A\s*(see\s+)?(vacations|time\s+off)\s+team\s+([\w\-]+)\s*(\d\d\d\d-\d\d-\d\d)?\s*\z/i,
653
+ /\A\s*(see\s+)?(vacations|time\s+off)\s+([\w\-]+)\s+team\s*(\d\d\d\d-\d\d-\d\d)?\s*\z/i
654
+ team_name = $3.downcase
655
+ date = $4.to_s
656
+ date = Date.today.strftime("%Y/%m/%d") if date.empty?
657
+ see_vacations_team(user, team_name, date)
658
+
230
659
  else
231
660
  return false
232
661
  end
@@ -19,6 +19,7 @@ class SlackSmartBot
19
19
  # help: _shortcut Spanish Account_
20
20
  # help: _Spanish Account_
21
21
  # help: <https://github.com/MarioRuiz/slack-smart-bot#shortcuts|more info>
22
+ # help: command_id: :add_shortcut
22
23
  # help:
23
24
  def add_shortcut(dest, user, typem, for_all, shortcut_name, command, command_to_run, global)
24
25
  save_stats(__method__)
@@ -63,7 +64,7 @@ class SlackSmartBot
63
64
  end
64
65
  }
65
66
  end
66
- if !config.admins.include?(from) and @shortcuts[:all].include?(shortcut_name) and !@shortcuts[from].include?(shortcut_name)
67
+ if !is_admin?(from) and @shortcuts[:all].include?(shortcut_name) and !@shortcuts[from].include?(shortcut_name)
67
68
  respond "Only the creator of the shortcut can modify it", dest
68
69
  elsif found_other
69
70
  respond "You cannot create a shortcut for all with the same name than other user is using", dest
@@ -35,11 +35,12 @@ class SlackSmartBot
35
35
  # helpadmin: _add routine example on Tuesdays at 09:00 #SREChannel !run db cleanup_
36
36
  # helpadmin: _add routine example on weekdays at 22:00 suggest command_
37
37
  # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#routines|more info>
38
+ # helpadmin: command_id: :add_routine
38
39
  # helpadmin:
39
40
  def add_routine(dest, from, user, name, type, number_time, period, command_to_run, files, silent, channel, routine_type)
40
41
  save_stats(__method__)
41
42
  if files.nil? or files.size == 0 or (files.size > 0 and config.masters.include?(from))
42
- if config.admins.include?(from)
43
+ if is_admin?
43
44
  if @routines.key?(@channel_id) && @routines[@channel_id].key?(name)
44
45
  respond "I'm sorry but there is already a routine with that name.\nCall `see routines` to see added routines", dest
45
46
  else
@@ -5,13 +5,14 @@ class SlackSmartBot
5
5
  # helpadmin: `use rules on CHANNEL_NAME`
6
6
  # helpadmin: It will allow to use the specific rules from this channel on the CHANNEL_NAME
7
7
  # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#extending-rules-to-other-channels|more info>
8
+ # helpadmin: command_id: :extend_rules
8
9
  # helpadmin:
9
10
  def extend_rules(dest, user, from, channel, typem)
10
11
  save_stats(__method__)
11
12
  unless typem == :on_extended
12
13
  if config.on_master_bot
13
14
  respond "You cannot use the rules from Master Channel on any other channel.", dest
14
- elsif !config.admins.include?(from) #not admin
15
+ elsif !is_admin? #not admin
15
16
  respond "Only admins can extend the rules. Admins on this channel: #{config.admins}", dest
16
17
  else
17
18
  #todo: add pagination for case more than 1000 channels on the workspace
@@ -6,10 +6,11 @@ class SlackSmartBot
6
6
  # helpadmin: the bot will pause so it will listen only to admin commands
7
7
  # helpadmin: You can use this command only if you are an admin user
8
8
  # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#bot-management|more info>
9
+ # helpadmin: command_id: :pause_bot
9
10
  # helpadmin:
10
11
  def pause_bot(dest, from)
11
12
  save_stats(__method__)
12
- if config.admins.include?(from) #admin user
13
+ if is_admin?
13
14
  respond "This bot is paused from now on. You can start it again: start this bot", dest
14
15
  respond "zZzzzzZzzzzZZZZZZzzzzzzzz", dest
15
16
  @status = :paused
@@ -7,10 +7,11 @@ class SlackSmartBot
7
7
  # helpadmin: Examples:
8
8
  # helpadmin: _pause routine example_
9
9
  # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#routines|more info>
10
+ # helpadmin: command_id: :pause_routine
10
11
  # helpadmin:
11
12
  def pause_routine(dest, from, name)
12
13
  save_stats(__method__)
13
- if config.admins.include?(from) #admin user
14
+ if is_admin?
14
15
  if !config.on_master_bot and dest[0] == "D"
15
16
  respond "It's only possible to pause routines from MASTER channel from a direct message with the bot.", dest
16
17
  elsif @routines.key?(@channel_id) and @routines[@channel_id].key?(name)
@@ -10,10 +10,11 @@ class SlackSmartBot
10
10
  # helpadmin: Examples:
11
11
  # helpadmin: _kill routine example_
12
12
  # helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#routines|more info>
13
+ # helpadmin: command_id: :remove_routine
13
14
  # helpadmin:
14
15
  def remove_routine(dest, from, name)
15
16
  save_stats(__method__)
16
- if config.admins.include?(from) #admin user
17
+ if is_admin?
17
18
  if @routines.key?(@channel_id) and @routines[@channel_id].key?(name)
18
19
  @routines[@channel_id][name][:thread].exit
19
20
  @routines[@channel_id].delete(name)