slack-smart-bot 1.9.1 → 1.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +184 -16
- data/lib/slack/smart-bot/comm/ask.rb +55 -49
- data/lib/slack/smart-bot/comm/delete.rb +13 -0
- data/lib/slack/smart-bot/comm/dont_understand.rb +3 -3
- data/lib/slack/smart-bot/comm/event_hello.rb +8 -4
- data/lib/slack/smart-bot/comm/get_channel_members.rb +13 -4
- data/lib/slack/smart-bot/comm/get_channels.rb +31 -16
- data/lib/slack/smart-bot/comm/get_presence.rb +20 -0
- data/lib/slack/smart-bot/comm/get_user_info.rb +12 -8
- data/lib/slack/smart-bot/comm/get_users.rb +24 -0
- data/lib/slack/smart-bot/comm/react.rb +19 -2
- data/lib/slack/smart-bot/comm/respond.rb +224 -53
- data/lib/slack/smart-bot/comm/respond_direct.rb +2 -3
- data/lib/slack/smart-bot/comm/respond_thread.rb +5 -0
- data/lib/slack/smart-bot/comm/send_file.rb +38 -34
- data/lib/slack/smart-bot/comm/send_msg_channel.rb +27 -22
- data/lib/slack/smart-bot/comm/send_msg_user.rb +59 -33
- data/lib/slack/smart-bot/comm/unreact.rb +22 -18
- data/lib/slack/smart-bot/comm.rb +4 -0
- data/lib/slack/smart-bot/commands/general/add_admin.rb +51 -0
- data/lib/slack/smart-bot/commands/general/add_announcement.rb +32 -0
- data/lib/slack/smart-bot/commands/general/add_team.rb +80 -0
- data/lib/slack/smart-bot/commands/general/allow_access.rb +67 -0
- data/lib/slack/smart-bot/commands/general/bot_help.rb +69 -33
- data/lib/slack/smart-bot/commands/general/bye_bot.rb +0 -7
- data/lib/slack/smart-bot/commands/general/delete_announcement.rb +34 -0
- data/lib/slack/smart-bot/commands/general/delete_share.rb +34 -0
- data/lib/slack/smart-bot/commands/general/delete_team.rb +34 -0
- data/lib/slack/smart-bot/commands/general/deny_access.rb +36 -0
- data/lib/slack/smart-bot/commands/general/hi_bot.rb +16 -11
- data/lib/slack/smart-bot/commands/general/ping_team.rb +100 -0
- data/lib/slack/smart-bot/commands/general/poster.rb +116 -0
- data/lib/slack/smart-bot/commands/general/remove_admin.rb +58 -0
- data/lib/slack/smart-bot/commands/general/see_access.rb +24 -0
- data/lib/slack/smart-bot/commands/general/see_admins.rb +33 -0
- data/lib/slack/smart-bot/commands/general/see_announcements.rb +115 -0
- data/lib/slack/smart-bot/commands/general/see_command_ids.rb +29 -0
- data/lib/slack/smart-bot/commands/general/see_favorite_commands.rb +53 -0
- data/lib/slack/smart-bot/commands/general/see_shares.rb +41 -0
- data/lib/slack/smart-bot/commands/general/see_statuses.rb +91 -0
- data/lib/slack/smart-bot/commands/general/see_teams.rb +252 -0
- data/lib/slack/smart-bot/commands/general/share_messages.rb +58 -0
- data/lib/slack/smart-bot/commands/general/update_team.rb +109 -0
- data/lib/slack/smart-bot/commands/general_bot_commands.rb +504 -0
- data/lib/slack/smart-bot/commands/on_bot/add_shortcut.rb +4 -6
- data/lib/slack/smart-bot/commands/on_bot/admin/add_routine.rb +45 -14
- data/lib/slack/smart-bot/commands/on_bot/admin/extend_rules.rb +4 -1
- data/lib/slack/smart-bot/commands/on_bot/admin/pause_bot.rb +6 -3
- data/lib/slack/smart-bot/commands/on_bot/admin/pause_routine.rb +3 -1
- data/lib/slack/smart-bot/commands/on_bot/admin/remove_routine.rb +4 -4
- data/lib/slack/smart-bot/commands/on_bot/admin/run_routine.rb +8 -2
- data/lib/slack/smart-bot/commands/on_bot/admin/see_result_routine.rb +33 -0
- data/lib/slack/smart-bot/commands/on_bot/admin/see_routines.rb +13 -10
- data/lib/slack/smart-bot/commands/on_bot/admin/start_bot.rb +6 -3
- data/lib/slack/smart-bot/commands/on_bot/admin/start_routine.rb +3 -1
- data/lib/slack/smart-bot/commands/on_bot/admin/stop_using_rules_on.rb +4 -1
- data/lib/slack/smart-bot/commands/on_bot/admin_master/delete_message.rb +25 -0
- data/lib/slack/smart-bot/commands/on_bot/admin_master/get_bot_logs.rb +1 -0
- data/lib/slack/smart-bot/commands/on_bot/admin_master/react_to.rb +34 -0
- data/lib/slack/smart-bot/commands/on_bot/admin_master/send_message.rb +37 -0
- data/lib/slack/smart-bot/commands/on_bot/delete_repl.rb +4 -5
- data/lib/slack/smart-bot/commands/on_bot/delete_shortcut.rb +7 -8
- data/lib/slack/smart-bot/commands/on_bot/general/bot_stats.rb +400 -0
- data/lib/slack/smart-bot/commands/{general → on_bot/general}/bot_status.rb +3 -4
- data/lib/slack/smart-bot/commands/on_bot/general/leaderboard.rb +201 -0
- data/lib/slack/smart-bot/commands/{general → on_bot/general}/stop_using_rules.rb +12 -6
- data/lib/slack/smart-bot/commands/on_bot/general/suggest_command.rb +36 -0
- data/lib/slack/smart-bot/commands/{general → on_bot/general}/use_rules.rb +13 -11
- data/lib/slack/smart-bot/commands/{general → on_bot/general}/whats_new.rb +2 -1
- data/lib/slack/smart-bot/commands/on_bot/get_repl.rb +4 -5
- data/lib/slack/smart-bot/commands/on_bot/repl.rb +76 -21
- data/lib/slack/smart-bot/commands/on_bot/ruby_code.rb +3 -4
- data/lib/slack/smart-bot/commands/on_bot/run_repl.rb +15 -7
- data/lib/slack/smart-bot/commands/on_bot/see_repls.rb +5 -6
- data/lib/slack/smart-bot/commands/on_bot/see_shortcuts.rb +5 -6
- data/lib/slack/smart-bot/commands/on_extended/bot_rules.rb +45 -12
- data/lib/slack/smart-bot/commands/on_master/admin/kill_bot_on_channel.rb +7 -3
- data/lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb +4 -1
- data/lib/slack/smart-bot/commands/on_master/admin_master/notify_message.rb +3 -1
- data/lib/slack/smart-bot/commands/on_master/admin_master/publish_announcements.rb +33 -0
- data/lib/slack/smart-bot/commands/on_master/admin_master/set_general_message.rb +39 -0
- data/lib/slack/smart-bot/commands/on_master/admin_master/set_maintenance.rb +10 -1
- data/lib/slack/smart-bot/commands/on_master/create_bot.rb +28 -14
- data/lib/slack/smart-bot/commands/on_master/where_smartbot.rb +41 -0
- data/lib/slack/smart-bot/commands.rb +36 -5
- data/lib/slack/smart-bot/listen.rb +31 -33
- data/lib/slack/smart-bot/process.rb +234 -73
- data/lib/slack/smart-bot/process_first.rb +119 -38
- data/lib/slack/smart-bot/treat_message.rb +310 -237
- data/lib/slack/smart-bot/utils/build_help.rb +2 -2
- data/lib/slack/smart-bot/utils/create_routine_thread.rb +81 -46
- data/lib/slack/smart-bot/utils/get_access_channels.rb +13 -0
- data/lib/slack/smart-bot/utils/get_admins_channels.rb +13 -0
- data/lib/slack/smart-bot/utils/get_bots_created.rb +28 -8
- data/lib/slack/smart-bot/utils/get_channels_name_and_id.rb +7 -2
- data/lib/slack/smart-bot/utils/get_command_ids.rb +84 -0
- data/lib/slack/smart-bot/utils/get_help.rb +79 -73
- data/lib/slack/smart-bot/utils/get_repls.rb +22 -2
- data/lib/slack/smart-bot/utils/get_routines.rb +22 -2
- data/lib/slack/smart-bot/utils/get_shares.rb +12 -0
- data/lib/slack/smart-bot/utils/get_teams.rb +22 -0
- data/lib/slack/smart-bot/utils/has_access.rb +28 -0
- data/lib/slack/smart-bot/utils/is_admin.rb +27 -0
- data/lib/slack/smart-bot/utils/save_stats.rb +46 -41
- data/lib/slack/smart-bot/utils/save_status.rb +67 -0
- data/lib/slack/smart-bot/utils/update_access_channels.rb +8 -0
- data/lib/slack/smart-bot/utils/update_admins_channels.rb +8 -0
- data/lib/slack/smart-bot/utils/update_bots_file.rb +28 -7
- data/lib/slack/smart-bot/utils/update_repls.rb +7 -4
- data/lib/slack/smart-bot/utils/update_routines.rb +9 -3
- data/lib/slack/smart-bot/utils/update_shortcuts_file.rb +13 -6
- data/lib/slack/smart-bot/utils/update_teams.rb +16 -0
- data/lib/slack/smart-bot/utils.rb +11 -0
- data/lib/slack-smart-bot.rb +72 -12
- data/lib/slack-smart-bot_general_commands.rb +61 -0
- data/lib/slack-smart-bot_general_rules.rb +5 -2
- data/lib/slack-smart-bot_rules.rb +43 -17
- data/whats_new.txt +20 -15
- metadata +76 -9
- data/lib/slack/smart-bot/commands/general/bot_stats.rb +0 -313
@@ -0,0 +1,504 @@
|
|
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: command_id: :bot_help
|
31
|
+
# help:
|
32
|
+
|
33
|
+
|
34
|
+
# help: ----------------------------------------------
|
35
|
+
# help: `Hi Bot`
|
36
|
+
# help: `Hi Smart`
|
37
|
+
# help: `Hello Bot` `Hola Bot` `Hallo Bot` `What's up Bot` `Hey Bot` `Hæ Bot`
|
38
|
+
# help: `Hello THE_NAME_OF_THE_BOT`
|
39
|
+
# help: Bot starts listening to you if you are on a Bot channel
|
40
|
+
# help: After that if you want to avoid a single message to be treated by the smart bot, start the message by -
|
41
|
+
# help: Also apart of Hello you can use _Hallo, Hi, Hola, What's up, Hey, Hæ_
|
42
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#how-to-access-the-smart-bot|more info>
|
43
|
+
# help: command_id: :hi_bot
|
44
|
+
# help:
|
45
|
+
when /\A\s*(Hello|Hallo|Hi|Hola|What's\sup|Hey|Hæ)\s+(#{@salutations.join("|")})\s*$/i
|
46
|
+
hi_bot(user, dest, user.name, display_name)
|
47
|
+
|
48
|
+
# help: ----------------------------------------------
|
49
|
+
# help: `Bye Bot`
|
50
|
+
# help: `Bye Smart`
|
51
|
+
# help: `Bye NAME_OF_THE_BOT`
|
52
|
+
# help: Bot stops listening to you if you are on a Bot channel
|
53
|
+
# help: Also apart of Bye you can use _Bæ, Good Bye, Adiós, Ciao, Bless, Bless Bless, Adeu_
|
54
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#how-to-access-the-smart-bot|more info>
|
55
|
+
# help: command_id: :bye_bot
|
56
|
+
# help:
|
57
|
+
when /\A\s*(Bye|Bæ|Good\s+Bye|Adiós|Ciao|Bless|Bless\sBless|Adeu)\s+(#{@salutations.join("|")})\s*$/i
|
58
|
+
bye_bot(dest, user.name, display_name)
|
59
|
+
|
60
|
+
# help: ----------------------------------------------
|
61
|
+
# help: `add announcement MESSAGE`
|
62
|
+
# help: `add red announcement MESSAGE`
|
63
|
+
# help: `add green announcement MESSAGE`
|
64
|
+
# help: `add yellow announcement MESSAGE`
|
65
|
+
# help: `add white announcement MESSAGE`
|
66
|
+
# help: `add EMOJI announcement MESSAGE`
|
67
|
+
# help: It will store the message on the announcement list labeled with the color or emoji specified, white by default.
|
68
|
+
# help: aliases for announcement: statement, declaration, message
|
69
|
+
# help: Examples:
|
70
|
+
# help: _add green announcement :heavy_check_mark: All customer services are up and running_
|
71
|
+
# help: _add red declaration Customers db is down :x:_
|
72
|
+
# help: _add yellow statement Don't access the linux server without VPN_
|
73
|
+
# help: _add message `*Party* will start at *20:00* :tada:`_
|
74
|
+
# help: _add :heavy_exclamation_mark: message Pay attention all DB are on maintenance until 20:00 GMT_
|
75
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#announcements|more info>
|
76
|
+
# help: command_id: :add_announcement
|
77
|
+
# help:
|
78
|
+
when /\A\s*(add|create)\s+(red\s+|green\s+|white\s+|yellow\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
|
80
|
+
type = $2.to_s.downcase.strip
|
81
|
+
type = 'white' if type == ''
|
82
|
+
message = $4
|
83
|
+
add_announcement(user, type, message)
|
84
|
+
|
85
|
+
|
86
|
+
# help: ----------------------------------------------
|
87
|
+
# help: `delete announcement ID`
|
88
|
+
# help: It will delete the message on the announcement list.
|
89
|
+
# help: aliases for announcement: statement, declaration, message
|
90
|
+
# help: Examples:
|
91
|
+
# help: _delete announcement 24_
|
92
|
+
# help: _delete message 645_
|
93
|
+
# help: _delete statement 77_
|
94
|
+
# help: _delete declaration 334_
|
95
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#announcements|more info>
|
96
|
+
# help: command_id: :delete_announcement
|
97
|
+
# help:
|
98
|
+
when /\A\s*(delete|remove)\s+(announcement|statement|declaration|message)\s+(\d+)\s*\z/i
|
99
|
+
message_id = $3
|
100
|
+
delete_announcement(user, message_id)
|
101
|
+
|
102
|
+
# help: ----------------------------------------------
|
103
|
+
# help: `see announcements`
|
104
|
+
# help: `see red announcements`
|
105
|
+
# help: `see green announcements`
|
106
|
+
# help: `see yellow announcements`
|
107
|
+
# help: `see white announcements`
|
108
|
+
# help: `see EMOJI announcements`
|
109
|
+
# helpmaster: `see announcements #CHANNEL`
|
110
|
+
# helpmaster: `see all announcements`
|
111
|
+
# help: It will display the announcements for the channel.
|
112
|
+
# help: aliases for announcements: statements, declarations, messages
|
113
|
+
# helpmaster: In case #CHANNEL it will display the announcements for that channel. Only master admins can use it from a DM with the Smartbot.
|
114
|
+
# 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.
|
115
|
+
# help: Examples:
|
116
|
+
# help: _see announcements_
|
117
|
+
# help: _see white messages_
|
118
|
+
# help: _see red statements_
|
119
|
+
# help: _see yellow declarations_
|
120
|
+
# help: _see messages_
|
121
|
+
# help: _see :heavy_exclamation_mark: messages_
|
122
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#announcements|more info>
|
123
|
+
# help: command_id: :see_announcements
|
124
|
+
# help:
|
125
|
+
when /\A\s*see\s+(red\s+|green\s+|white\s+|yellow\s+|:\w+:\s+)?(announcements|statements|declarations|messages)()\s*\z/i,
|
126
|
+
/\A\s*see\s+(all\s+)?(announcements|statements|declarations|messages)()\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
|
129
|
+
|
130
|
+
type = $1.to_s.downcase.strip
|
131
|
+
channel = $3.to_s
|
132
|
+
|
133
|
+
see_announcements(user, type, channel)
|
134
|
+
|
135
|
+
|
136
|
+
# help: ----------------------------------------------
|
137
|
+
# help: `share messages /REGEXP/ on #CHANNEL`
|
138
|
+
# help: `share messages "TEXT" on #CHANNEL`
|
139
|
+
# xhelp: `share messages :EMOJI: on #CHANNEL`
|
140
|
+
# help: It will automatically share new messages published that meet the specified criteria.
|
141
|
+
# xhelp: In case :EMOJI: it will share the messages with the indicated reaction.
|
142
|
+
# help: SmartBot user and user adding the share need to be members on both channels.
|
143
|
+
# help: The Regexp will automatically add the parameters /im
|
144
|
+
# help: Only available on public channels.
|
145
|
+
# help: Examples:
|
146
|
+
# help: _share messages /(last\s+|previous\s+)sales\s+results\s+/ on #sales_
|
147
|
+
# help: _share messages "share post" on #announcements_
|
148
|
+
# xhelp: _share messages :tada: on #announcements_
|
149
|
+
# xhelp: _share messages :moneybag: from #sales_
|
150
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#share-messages|more info>
|
151
|
+
# help: command_id: :share_messages
|
152
|
+
# help:
|
153
|
+
when /\A\s*share\s+messages\s+(\/.+\/|".+"|'.+')\s+on\s+<#\w+\|(.+)>\s*\z/i,
|
154
|
+
/\A\s*share\s+messages\s+(\/.+\/|".+"|'.+')\s+on\s+<#(\w+)\|>\s*\z/,
|
155
|
+
/\A\s*share\s+messages\s+(\/.+\/|".+"|'.+')\s+on\s+(.+)\s*\z/i
|
156
|
+
condition = $1
|
157
|
+
channel = $2
|
158
|
+
channel.gsub!('#','') # for the case the channel name is in plain text including #
|
159
|
+
channel = @channels_name[channel] if @channels_name.key?(channel)
|
160
|
+
channel_from = @channels_name[dest]
|
161
|
+
channel_to = channel
|
162
|
+
share_messages(user, channel_from, channel_to, condition)
|
163
|
+
|
164
|
+
# help: ----------------------------------------------
|
165
|
+
# help: `see shares`
|
166
|
+
# help: It will display the active shares from this channel.
|
167
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#share-messages|more info>
|
168
|
+
# help: command_id: :see_shares
|
169
|
+
# help:
|
170
|
+
when /\A\s*see\s+shares\s*\z/i
|
171
|
+
see_shares()
|
172
|
+
|
173
|
+
# help: ----------------------------------------------
|
174
|
+
# help: `delete share ID`
|
175
|
+
# help: It will delete the share id specified.
|
176
|
+
# help: Examples:
|
177
|
+
# help: _delete share 24_
|
178
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#share-messages|more info>
|
179
|
+
# help: command_id: :delete_share
|
180
|
+
# help:
|
181
|
+
when /\A\s*(delete|remove)\s+share\s+(\d+)\s*\z/i
|
182
|
+
share_id = $2
|
183
|
+
delete_share(user, share_id)
|
184
|
+
|
185
|
+
# help: ----------------------------------------------
|
186
|
+
# help: `see statuses`
|
187
|
+
# help: `see statuses #CHANNEL`
|
188
|
+
# help: `see status EMOJI`
|
189
|
+
# help: `see status EMOJI #CHANNEL`
|
190
|
+
# help: `see status EMOJI1 EMOJI99`
|
191
|
+
# help: `who is on vacation?`
|
192
|
+
# help: `who is on EMOJI`
|
193
|
+
# help: `who is on EMOJI #CHANNEL`
|
194
|
+
# help: `who is on EMOJI1 EMOJI99`
|
195
|
+
# help: `who is not on vacation?`
|
196
|
+
# help: `who is not on EMOJI`
|
197
|
+
# help: `who is available?`
|
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.
|
200
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#see-statuses|more info>
|
201
|
+
# help: command_id: :see_statuses
|
202
|
+
# help:
|
203
|
+
when /\A\s*(see|get)\s+(statuses)()\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,
|
207
|
+
/\A\s*(see|get)\s+(statuses)\s+#([\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
|
215
|
+
|
216
|
+
not_on = $1.match?(/who\s+(is|are)\s+not\s+on/i)
|
217
|
+
type = $2.downcase
|
218
|
+
channel = $3.to_s
|
219
|
+
if type == 'statuses'
|
220
|
+
types = []
|
221
|
+
elsif type =='vacation' or type == 'holiday'
|
222
|
+
types = [':palm_tree:']
|
223
|
+
elsif type == 'available' or type == 'active'
|
224
|
+
types = ['available']
|
225
|
+
else
|
226
|
+
type.gsub!(' ', '')
|
227
|
+
type.gsub!('::',': :')
|
228
|
+
types = type.split(' ')
|
229
|
+
end
|
230
|
+
see_statuses(user, channel, types, dest, not_on)
|
231
|
+
|
232
|
+
|
233
|
+
# help: ----------------------------------------------
|
234
|
+
# help: `see favorite commands`
|
235
|
+
# help: `see my favorite commands`
|
236
|
+
# help: `favorite commands`
|
237
|
+
# help: `my favorite commands`
|
238
|
+
# help: It will display the favorite commands.
|
239
|
+
# help: aliases for favorite: favourite, most used, fav
|
240
|
+
# helpmaster: You need to set stats to true to generate the stats when running the bot instance and get this info.
|
241
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#see-favorite-commands|more info>
|
242
|
+
# help: command_id: :see_favorite_commands
|
243
|
+
# help:
|
244
|
+
when /\A\s*(see\s+)?(my\s+)?(fav|favorite|favourite|most\s+used)\s+commands\s*\z/i
|
245
|
+
only_mine = $2.to_s!=''
|
246
|
+
see_favorite_commands(user, only_mine)
|
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: `see teams`
|
392
|
+
# help: `see team TEAM_NAME`
|
393
|
+
# help: `team TEAM_NAME`
|
394
|
+
# help: `TEAM_NAME team`
|
395
|
+
# help: `which team @USER`
|
396
|
+
# help: `which team #CHANNEL`
|
397
|
+
# help: `which team TEXT_TO_SEARCH_ON_INFO`
|
398
|
+
# help: `which team does @USER belongs to?`
|
399
|
+
# help: It will display all teams or the team specified.
|
400
|
+
# help: In case a specific team it will show also the availability of the members.
|
401
|
+
# help: Examples:
|
402
|
+
# help: _see teams_
|
403
|
+
# help: _see team Sales_
|
404
|
+
# help: _Dev team_
|
405
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
|
406
|
+
# help: command_id: :see_teams
|
407
|
+
# help:
|
408
|
+
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
|
409
|
+
name = $1.to_s.downcase
|
410
|
+
see_teams(user, name)
|
411
|
+
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
|
412
|
+
search = $3.to_s.downcase
|
413
|
+
see_teams(user, '', search)
|
414
|
+
|
415
|
+
# help: ----------------------------------------------
|
416
|
+
# help: `update team TEAM_NAME NEW_TEAM_NAME`
|
417
|
+
# help: `update team TEAM_NAME : NEW_INFO`
|
418
|
+
# help: `update team TEAM_NAME add MEMBER_TYPE @USER`
|
419
|
+
# help: `update team TEAM_NAME add CHANNEL_TYPE #CHANNEL`
|
420
|
+
# help: `update team TEAM_NAME delete MEMBER_TYPE @USER`
|
421
|
+
# help: `update team TEAM_NAME delete CHANNEL_TYPE #CHANNEL`
|
422
|
+
# help: `update team TEAM_NAME delete @USER`
|
423
|
+
# help: `update team TEAM_NAME delete #CHANNEL`
|
424
|
+
# help: It will update a team with the info supplied.
|
425
|
+
# help: You have to be a member of the team, the creator or a Master admin to be able to update a team.
|
426
|
+
# help: Examples:
|
427
|
+
# help: _update team sales salesff_
|
428
|
+
# help: _update team salesff : Support for customers_
|
429
|
+
# help: _update sales team delete @sarah @peter_
|
430
|
+
# help: _update team sales delete public #sales_
|
431
|
+
# help: _update team sales delete #sales_support_
|
432
|
+
# help: _update sales team add public #salesff_
|
433
|
+
# help: _update sales team add qa @john @ben @ana_
|
434
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
|
435
|
+
# help: command_id: :update_team
|
436
|
+
# help:
|
437
|
+
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
|
438
|
+
name = $1.downcase
|
439
|
+
new_name = $2.downcase
|
440
|
+
update_team(user, name, new_name: new_name)
|
441
|
+
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
|
442
|
+
name = $1.downcase
|
443
|
+
new_info = Thread.current[:command_orig].to_s.gsub("\u00A0", " ").scan(/^[^:]+:\s*(.+)\s*$/im).join
|
444
|
+
update_team(user, name, new_info: new_info)
|
445
|
+
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
|
446
|
+
name = $1.downcase
|
447
|
+
delete_opts = $3
|
448
|
+
update_team(user, name, delete_opts: delete_opts)
|
449
|
+
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
|
450
|
+
name = $1.downcase
|
451
|
+
add_opts = $2
|
452
|
+
update_team(user, name, add_opts: add_opts)
|
453
|
+
|
454
|
+
# help: ----------------------------------------------
|
455
|
+
# help: `ping team TEAM_NAME MEMBER_TYPE MESSAGE`
|
456
|
+
# help: `contact team TEAM_NAME MEMBER_TYPE MESSAGE`
|
457
|
+
# help: ping: It will send the MESSAGE naming all available members of the MEMBER_TYPE supplied.
|
458
|
+
# help: contact: It will send the MESSAGE naming all members of the MEMBER_TYPE supplied.
|
459
|
+
# help: In case MEMBER_TYPE is 'all' it will name 10 random members of the team
|
460
|
+
# help: Examples:
|
461
|
+
# help: _ping team sales development How is the status on the last feature_
|
462
|
+
# help: _contact team sales qa Please finish testing of dev02 feature before noon_
|
463
|
+
# help: _contact team qa all Check the test failures please_
|
464
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
|
465
|
+
# help: command_id: :ping_team
|
466
|
+
# help: command_id: :contact_team
|
467
|
+
# help:
|
468
|
+
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
|
469
|
+
type = $1.downcase.to_sym
|
470
|
+
name = $2.downcase
|
471
|
+
member_type = $3.downcase
|
472
|
+
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
|
473
|
+
if message == ''
|
474
|
+
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
|
475
|
+
end
|
476
|
+
ping_team(user, type, name, member_type, message)
|
477
|
+
|
478
|
+
# help: ----------------------------------------------
|
479
|
+
# help: `delete team TEAM_NAME`
|
480
|
+
# help: It will delete the supplied team.
|
481
|
+
# help: You have to be a member of the team, the creator or a Master admin to be able to delete a team.
|
482
|
+
# help: Examples:
|
483
|
+
# help: _delete team sales_
|
484
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#teams|more info>
|
485
|
+
# help: command_id: :delete_team
|
486
|
+
# help:
|
487
|
+
when /\A\s*(delete|remove)\s+team\s+([\w\-]+)\s*\z/i, /\A\s*(delete|remove)\s+([\w\-]+)\s+team\s*\z/i
|
488
|
+
name = $2.downcase
|
489
|
+
delete_team(user, name)
|
490
|
+
|
491
|
+
else
|
492
|
+
return false
|
493
|
+
end
|
494
|
+
return true
|
495
|
+
rescue => exception
|
496
|
+
if defined?(@logger)
|
497
|
+
@logger.fatal exception
|
498
|
+
respond "Unexpected error!! Please contact an admin to solve it: <@#{config.admins.join(">, <@")}>"
|
499
|
+
else
|
500
|
+
puts exception
|
501
|
+
end
|
502
|
+
return false
|
503
|
+
end
|
504
|
+
end
|
@@ -18,16 +18,14 @@ class SlackSmartBot
|
|
18
18
|
# help: _sc spanish account_
|
19
19
|
# help: _shortcut Spanish Account_
|
20
20
|
# help: _Spanish Account_
|
21
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#shortcuts|more info>
|
22
|
+
# help: command_id: :add_shortcut
|
21
23
|
# help:
|
22
24
|
def add_shortcut(dest, user, typem, for_all, shortcut_name, command, command_to_run, global)
|
23
25
|
save_stats(__method__)
|
24
26
|
unless typem == :on_extended
|
25
27
|
from = user.name
|
26
|
-
if
|
27
|
-
(!user.key?(:enterprise_user) or ( user.key?(:enterprise_user) and !config[:allow_access][__method__].include?(user[:enterprise_user].id)))
|
28
|
-
respond "You don't have access to use this command, please contact an Admin to be able to use it: <@#{config.admins.join(">, <@")}>"
|
29
|
-
else
|
30
|
-
|
28
|
+
if has_access?(__method__, user)
|
31
29
|
if global
|
32
30
|
if !config.on_master_bot or typem != :on_master
|
33
31
|
respond "It is only possible to add global shortcuts from Master channel"
|
@@ -66,7 +64,7 @@ class SlackSmartBot
|
|
66
64
|
end
|
67
65
|
}
|
68
66
|
end
|
69
|
-
if !
|
67
|
+
if !is_admin?(from) and @shortcuts[:all].include?(shortcut_name) and !@shortcuts[from].include?(shortcut_name)
|
70
68
|
respond "Only the creator of the shortcut can modify it", dest
|
71
69
|
elsif found_other
|
72
70
|
respond "You cannot create a shortcut for all with the same name than other user is using", dest
|
@@ -3,7 +3,9 @@ class SlackSmartBot
|
|
3
3
|
# helpadmin: `add routine NAME every NUMBER PERIOD COMMAND`
|
4
4
|
# helpadmin: `add routine NAME every NUMBER PERIOD #CHANNEL COMMAND`
|
5
5
|
# helpadmin: `add routine NAME every NUMBER PERIOD`
|
6
|
+
# helpadmin: `add bgroutine NAME every NUMBER PERIOD`
|
6
7
|
# helpadmin: `add silent routine NAME every NUMBER PERIOD`
|
8
|
+
# helpadmin: `add silent bgroutine NAME every NUMBER PERIOD`
|
7
9
|
# helpadmin: `create routine NAME every NUMBER PERIOD`
|
8
10
|
# helpadmin: `add routine NAME at TIME COMMAND`
|
9
11
|
# helpadmin: `add routine NAME at TIME #CHANNEL COMMAND`
|
@@ -14,26 +16,31 @@ class SlackSmartBot
|
|
14
16
|
# helpadmin: `create routine NAME at TIME`
|
15
17
|
# helpadmin: It will execute the command/rule supplied. Only for Admin and Master Admins.
|
16
18
|
# helpadmin: If no COMMAND supplied, then it will be necessary to attach a file with the code to be run and add this command as message to the file. ONLY for MASTER ADMINS.
|
19
|
+
# helpadmin: In case *bgroutine* then the results of the run won't be published. To see the results call: `see result routine NAME`
|
17
20
|
# helpadmin: In case *silent* provided then when executed will be only displayed if the routine returns a message
|
18
21
|
# helpadmin: NAME: one word to identify the routine
|
19
22
|
# helpadmin: NUMBER: Integer
|
20
23
|
# helpadmin: PERIOD: days, d, hours, h, minutes, mins, min, m, seconds, secs, sec, s
|
21
24
|
# helpadmin: TIME: time at format HH:MM:SS
|
22
|
-
# helpadmin: DAYWEEK: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. And their plurals.
|
25
|
+
# helpadmin: DAYWEEK: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. And their plurals. Also possible to be used 'weekdays' and 'weekends'
|
23
26
|
# helpadmin: #CHANNEL: the destination channel where the results will be published. If not supplied then the bot channel by default or a DM if the command is run from a DM.
|
24
27
|
# helpadmin: COMMAND: any valid smart bot command or rule
|
28
|
+
# helpadmin: It is possible to add a script directly. Only master admins can do it.
|
25
29
|
# helpadmin: Examples:
|
26
|
-
# helpadmin: _add routine example every 30s ruby puts 'a'_
|
27
|
-
# helpadmin: _add
|
28
|
-
# helpadmin: _add routine example at 17:05 ruby puts 'a'_
|
30
|
+
# helpadmin: _add routine example every 30s !ruby puts 'a'_
|
31
|
+
# helpadmin: _add bgroutine example every 3 days !ruby puts 'a'_
|
32
|
+
# helpadmin: _add routine example at 17:05 !ruby puts 'a'_
|
29
33
|
# helpadmin: _create silent routine Example every 12 hours !Run customer tests_
|
30
|
-
# helpadmin: _add
|
34
|
+
# helpadmin: _add bgroutine example on Mondays at 05:00 !run customer tests_
|
31
35
|
# helpadmin: _add routine example on Tuesdays at 09:00 #SREChannel !run db cleanup_
|
36
|
+
# helpadmin: _add routine example on weekdays at 22:00 suggest command_
|
37
|
+
# helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#routines|more info>
|
38
|
+
# helpadmin: command_id: :add_routine
|
32
39
|
# helpadmin:
|
33
|
-
def add_routine(dest, from, user, name, type, number_time, period, command_to_run, files, silent, channel)
|
40
|
+
def add_routine(dest, from, user, name, type, number_time, period, command_to_run, files, silent, channel, routine_type)
|
34
41
|
save_stats(__method__)
|
35
42
|
if files.nil? or files.size == 0 or (files.size > 0 and config.masters.include?(from))
|
36
|
-
if
|
43
|
+
if is_admin?
|
37
44
|
if @routines.key?(@channel_id) && @routines[@channel_id].key?(name)
|
38
45
|
respond "I'm sorry but there is already a routine with that name.\nCall `see routines` to see added routines", dest
|
39
46
|
else
|
@@ -61,8 +68,9 @@ class SlackSmartBot
|
|
61
68
|
every = "#{number_time} seconds"
|
62
69
|
every_in_seconds = number_time.to_i
|
63
70
|
else # time
|
64
|
-
if type != 'at'
|
71
|
+
if type != 'at' and type!='weekday' and type!='weekend'
|
65
72
|
dayweek = type.downcase
|
73
|
+
|
66
74
|
days = ['sunday','monday','tuesday','wednesday','thursday','friday','saturday']
|
67
75
|
incr = days.index(dayweek) - Time.now.wday
|
68
76
|
if incr < 0
|
@@ -72,6 +80,14 @@ class SlackSmartBot
|
|
72
80
|
end
|
73
81
|
days = incr/(24*60*60)
|
74
82
|
every_in_seconds = 7 * 24 * 60 * 60 # one week
|
83
|
+
elsif type=='weekend'
|
84
|
+
dayweek = type.downcase
|
85
|
+
days = 0
|
86
|
+
every_in_seconds = 24 * 60 * 60 # one day
|
87
|
+
elsif type=='weekday'
|
88
|
+
dayweek = type.downcase
|
89
|
+
days = 0
|
90
|
+
every_in_seconds = 24 * 60 * 60 # one day
|
75
91
|
else
|
76
92
|
days = 0
|
77
93
|
every_in_seconds = 24 * 60 * 60 # one day
|
@@ -95,20 +111,35 @@ class SlackSmartBot
|
|
95
111
|
if files[0].filetype == "ruby" and files[0].name.scan(/[^\.]+(\.\w+$)/).join == ''
|
96
112
|
file_path += ".rb"
|
97
113
|
end
|
98
|
-
|
99
|
-
|
114
|
+
if files[0].key?(:content)
|
115
|
+
File.open(file_path, 'w') do |f|
|
116
|
+
f.write files[0].content
|
117
|
+
end
|
118
|
+
else
|
119
|
+
http = NiceHttp.new(host: "https://files.slack.com", headers: { "Authorization" => "Bearer #{config[:token]}" }, log_headers: :partial)
|
120
|
+
http.get(files[0].url_private_download, save_data: file_path)
|
121
|
+
end
|
100
122
|
system("chmod +x #{file_path}")
|
101
123
|
end
|
102
|
-
|
124
|
+
get_channels_name_and_id() unless @channels_name.keys.include?(channel) or @channels_id.keys.include?(channel)
|
125
|
+
channel_id = nil
|
126
|
+
if @channels_name.key?(channel) #it is an id
|
127
|
+
channel_id = channel
|
128
|
+
channel = @channels_name[channel_id]
|
129
|
+
elsif @channels_id.key?(channel) #it is a channel name
|
130
|
+
channel_id = @channels_id[channel]
|
131
|
+
end
|
132
|
+
|
133
|
+
channel_id = dest if channel_id.to_s == ''
|
103
134
|
@routines[@channel_id] = {} unless @routines.key?(@channel_id)
|
104
135
|
@routines[@channel_id][name] = { channel_name: config.channel, creator: from, creator_id: user.id, status: :on,
|
105
136
|
every: every, every_in_seconds: every_in_seconds, at: at, dayweek: dayweek, file_path: file_path,
|
106
137
|
command: command_to_run.to_s.strip, silent: silent,
|
107
|
-
next_run: next_run.to_s, dest:
|
108
|
-
running: false }
|
138
|
+
next_run: next_run.to_s, dest: channel_id, last_run: "", last_elapsed: "",
|
139
|
+
running: false, routine_type: routine_type}
|
109
140
|
update_routines
|
110
141
|
respond "Added routine *`#{name}`* to the channel", dest
|
111
|
-
create_routine_thread(name)
|
142
|
+
create_routine_thread(name, @routines[@channel_id][name])
|
112
143
|
end
|
113
144
|
end
|
114
145
|
else
|