slack-smart-bot 1.9.1 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +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
|