slack-smart-bot 1.8.1 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +127 -21
- data/lib/slack/smart-bot/comm/ask.rb +55 -42
- data/lib/slack/smart-bot/comm/dont_understand.rb +2 -2
- data/lib/slack/smart-bot/comm/event_hello.rb +34 -0
- data/lib/slack/smart-bot/comm/get_channel_members.rb +13 -0
- data/lib/slack/smart-bot/comm/get_channels.rb +35 -0
- data/lib/slack/smart-bot/comm/get_user_info.rb +20 -0
- data/lib/slack/smart-bot/comm/get_users.rb +24 -0
- data/lib/slack/smart-bot/comm/react.rb +38 -8
- data/lib/slack/smart-bot/comm/respond.rb +219 -48
- 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 +58 -33
- data/lib/slack/smart-bot/comm/unreact.rb +24 -7
- data/lib/slack/smart-bot/comm.rb +7 -1
- data/lib/slack/smart-bot/commands/general/add_announcement.rb +32 -0
- data/lib/slack/smart-bot/commands/general/bot_help.rb +68 -28
- data/lib/slack/smart-bot/commands/general/bot_stats.rb +314 -0
- data/lib/slack/smart-bot/commands/general/bot_status.rb +3 -5
- 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/hi_bot.rb +16 -11
- data/lib/slack/smart-bot/commands/general/leaderboard.rb +200 -0
- data/lib/slack/smart-bot/commands/general/see_announcements.rb +113 -0
- data/lib/slack/smart-bot/commands/general/see_favorite_commands.rb +54 -0
- data/lib/slack/smart-bot/commands/general/see_shares.rb +41 -0
- data/lib/slack/smart-bot/commands/general/see_statuses.rb +78 -0
- data/lib/slack/smart-bot/commands/general/share_messages.rb +58 -0
- data/lib/slack/smart-bot/commands/general/stop_using_rules.rb +11 -6
- data/lib/slack/smart-bot/commands/general/suggest_command.rb +30 -0
- data/lib/slack/smart-bot/commands/general/use_rules.rb +13 -16
- data/lib/slack/smart-bot/commands/general/whats_new.rb +19 -0
- data/lib/slack/smart-bot/commands/general_bot_commands.rb +243 -0
- data/lib/slack/smart-bot/commands/on_bot/add_shortcut.rb +67 -38
- data/lib/slack/smart-bot/commands/on_bot/admin/add_routine.rb +49 -14
- data/lib/slack/smart-bot/commands/on_bot/admin/extend_rules.rb +5 -7
- data/lib/slack/smart-bot/commands/on_bot/admin/pause_bot.rb +4 -1
- data/lib/slack/smart-bot/commands/on_bot/admin/pause_routine.rb +1 -0
- data/lib/slack/smart-bot/commands/on_bot/admin/remove_routine.rb +2 -3
- data/lib/slack/smart-bot/commands/on_bot/admin/run_routine.rb +6 -1
- data/lib/slack/smart-bot/commands/on_bot/admin/see_result_routine.rb +32 -0
- data/lib/slack/smart-bot/commands/on_bot/admin/see_routines.rb +12 -4
- data/lib/slack/smart-bot/commands/on_bot/admin/start_bot.rb +4 -1
- data/lib/slack/smart-bot/commands/on_bot/admin/start_routine.rb +1 -0
- data/lib/slack/smart-bot/commands/on_bot/admin/stop_using_rules_on.rb +2 -0
- data/lib/slack/smart-bot/commands/on_bot/admin_master/react_to.rb +32 -0
- data/lib/slack/smart-bot/commands/on_bot/admin_master/send_message.rb +24 -0
- data/lib/slack/smart-bot/commands/on_bot/delete_repl.rb +3 -5
- data/lib/slack/smart-bot/commands/on_bot/delete_shortcut.rb +54 -25
- data/lib/slack/smart-bot/commands/on_bot/get_repl.rb +7 -9
- data/lib/slack/smart-bot/commands/on_bot/repl.rb +55 -25
- data/lib/slack/smart-bot/commands/on_bot/ruby_code.rb +36 -13
- data/lib/slack/smart-bot/commands/on_bot/run_repl.rb +5 -7
- data/lib/slack/smart-bot/commands/on_bot/see_repls.rb +4 -6
- data/lib/slack/smart-bot/commands/on_bot/see_shortcuts.rb +29 -13
- data/lib/slack/smart-bot/commands/on_extended/bot_rules.rb +55 -9
- data/lib/slack/smart-bot/commands/on_master/admin/kill_bot_on_channel.rb +4 -1
- data/lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb +5 -3
- data/lib/slack/smart-bot/commands/on_master/admin_master/notify_message.rb +2 -1
- data/lib/slack/smart-bot/commands/on_master/admin_master/publish_announcements.rb +32 -0
- data/lib/slack/smart-bot/commands/on_master/admin_master/set_general_message.rb +38 -0
- data/lib/slack/smart-bot/commands/on_master/admin_master/set_maintenance.rb +49 -0
- data/lib/slack/smart-bot/commands/on_master/create_bot.rb +30 -21
- data/lib/slack/smart-bot/commands.rb +19 -1
- data/lib/slack/smart-bot/listen.rb +7 -8
- data/lib/slack/smart-bot/process.rb +373 -192
- data/lib/slack/smart-bot/process_first.rb +202 -104
- data/lib/slack/smart-bot/treat_message.rb +325 -186
- data/lib/slack/smart-bot/utils/answer.rb +18 -0
- data/lib/slack/smart-bot/utils/answer_delete.rb +15 -0
- data/lib/slack/smart-bot/utils/build_help.rb +57 -5
- data/lib/slack/smart-bot/utils/create_routine_thread.rb +83 -30
- data/lib/slack/smart-bot/utils/get_bots_created.rb +4 -1
- data/lib/slack/smart-bot/utils/get_channels_name_and_id.rb +1 -7
- data/lib/slack/smart-bot/utils/get_help.rb +87 -35
- data/lib/slack/smart-bot/utils/get_shares.rb +12 -0
- data/lib/slack/smart-bot/utils/has_access.rb +12 -0
- data/lib/slack/smart-bot/utils/save_stats.rb +23 -8
- data/lib/slack/smart-bot/utils/save_status.rb +52 -0
- data/lib/slack/smart-bot/utils/update_shortcuts_file.rb +6 -0
- data/lib/slack/smart-bot/utils.rb +5 -0
- data/lib/slack-smart-bot.rb +88 -47
- data/lib/slack-smart-bot_general_commands.rb +46 -0
- data/lib/slack-smart-bot_general_rules.rb +5 -2
- data/lib/slack-smart-bot_rules.rb +49 -23
- data/whats_new.txt +36 -0
- metadata +44 -13
- data/lib/slack/smart-bot/commands/on_bot/admin_master/bot_stats.rb +0 -195
@@ -7,8 +7,10 @@ class SlackSmartBot
|
|
7
7
|
# help: `add sc for all NAME: COMMAND`
|
8
8
|
# help: `shortcut NAME: COMMAND`
|
9
9
|
# help: `shortcut for all NAME: COMMAND`
|
10
|
+
# help: `add global sc for all NAME: COMMAND`
|
10
11
|
# help: It will add a shortcut that will execute the command we supply.
|
11
12
|
# help: In case we supply 'for all' then the shorcut will be available for everybody
|
13
|
+
# help: If 'global' or 'generic' supplied and in Master channel then the shortcut will be available in all Bot channels.
|
12
14
|
# help: If you want to use a shortcut as a inline shortcut inside a command you can do it by adding a $ fex: _!run tests $cust1_
|
13
15
|
# help: Example:
|
14
16
|
# help: _add shortcut for all Spanish account: code require 'iso/iban'; 10.times {puts ISO::IBAN.random('ES')}_
|
@@ -16,52 +18,79 @@ class SlackSmartBot
|
|
16
18
|
# help: _sc spanish account_
|
17
19
|
# help: _shortcut Spanish Account_
|
18
20
|
# help: _Spanish Account_
|
21
|
+
# help: <https://github.com/MarioRuiz/slack-smart-bot#shortcuts|more info>
|
19
22
|
# help:
|
20
|
-
def add_shortcut(dest, user, typem, for_all, shortcut_name, command, command_to_run)
|
23
|
+
def add_shortcut(dest, user, typem, for_all, shortcut_name, command, command_to_run, global)
|
21
24
|
save_stats(__method__)
|
22
25
|
unless typem == :on_extended
|
23
26
|
from = user.name
|
24
|
-
if
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
27
|
+
if has_access?(__method__, user)
|
28
|
+
if global
|
29
|
+
if !config.on_master_bot or typem != :on_master
|
30
|
+
respond "It is only possible to add global shortcuts from Master channel"
|
31
|
+
else
|
32
|
+
@shortcuts_global[from] = Hash.new() unless @shortcuts_global.keys.include?(from)
|
33
|
+
found_other = false
|
34
|
+
if for_all.to_s != ""
|
35
|
+
@shortcuts_global.each { |sck, scv|
|
36
|
+
if sck != :all and sck != from and scv.key?(shortcut_name)
|
37
|
+
found_other = true
|
38
|
+
end
|
39
|
+
}
|
35
40
|
end
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
if @shortcuts_global[:all].include?(shortcut_name) or @shortcuts_global[from].include?(shortcut_name)
|
42
|
+
respond "Global shortcut name already in use. Please use another shortcut name."
|
43
|
+
elsif found_other
|
44
|
+
respond "You cannot create a global shortcut for all with the same name than other user is using."
|
45
|
+
elsif !@shortcuts_global[from].include?(shortcut_name)
|
46
|
+
#new shortcut
|
47
|
+
@shortcuts_global[from][shortcut_name] = command_to_run
|
48
|
+
@shortcuts_global[:all][shortcut_name] = command_to_run if for_all.to_s != ""
|
49
|
+
update_shortcuts_file()
|
50
|
+
respond "global shortcut added"
|
51
|
+
else
|
52
|
+
respond "Not possible to add the global shortcut" #todo: check if this is ever gonna be the case
|
53
|
+
end
|
54
|
+
end
|
48
55
|
else
|
49
|
-
|
50
|
-
|
51
|
-
|
56
|
+
@shortcuts[from] = Hash.new() unless @shortcuts.keys.include?(from)
|
57
|
+
|
58
|
+
found_other = false
|
59
|
+
if for_all.to_s != ""
|
60
|
+
@shortcuts.each { |sck, scv|
|
61
|
+
if sck != :all and sck != from and scv.key?(shortcut_name)
|
62
|
+
found_other = true
|
63
|
+
end
|
64
|
+
}
|
65
|
+
end
|
66
|
+
if !config.admins.include?(from) and @shortcuts[:all].include?(shortcut_name) and !@shortcuts[from].include?(shortcut_name)
|
67
|
+
respond "Only the creator of the shortcut can modify it", dest
|
68
|
+
elsif found_other
|
69
|
+
respond "You cannot create a shortcut for all with the same name than other user is using", dest
|
70
|
+
elsif !@shortcuts[from].include?(shortcut_name)
|
71
|
+
#new shortcut
|
72
|
+
@shortcuts[from][shortcut_name] = command_to_run
|
73
|
+
@shortcuts[:all][shortcut_name] = command_to_run if for_all.to_s != ""
|
74
|
+
update_shortcuts_file()
|
75
|
+
respond "shortcut added", dest
|
52
76
|
else
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
@shortcuts[:all][shortcut_name] = command_to_run if for_all.to_s != ""
|
57
|
-
update_shortcuts_file()
|
58
|
-
respond "shortcut added", dest
|
59
|
-
@questions.delete(from)
|
60
|
-
when /^no/i
|
61
|
-
respond "ok, I won't add it", dest
|
62
|
-
@questions.delete(from)
|
77
|
+
#are you sure? to avoid overwriting existing
|
78
|
+
if answer.empty?
|
79
|
+
ask("The shortcut already exists, are you sure you want to overwrite it?", command, from, dest)
|
63
80
|
else
|
64
|
-
|
81
|
+
case answer
|
82
|
+
when /^(yes|yep)/i
|
83
|
+
@shortcuts[from][shortcut_name] = command_to_run
|
84
|
+
@shortcuts[:all][shortcut_name] = command_to_run if for_all.to_s != ""
|
85
|
+
update_shortcuts_file()
|
86
|
+
respond "shortcut added", dest
|
87
|
+
answer_delete(from)
|
88
|
+
when /^no/i
|
89
|
+
respond "ok, I won't add it", dest
|
90
|
+
answer_delete(from)
|
91
|
+
else
|
92
|
+
ask "I don't understand, yes or no?", command, from, dest
|
93
|
+
end
|
65
94
|
end
|
66
95
|
end
|
67
96
|
end
|
@@ -1,31 +1,42 @@
|
|
1
1
|
class SlackSmartBot
|
2
2
|
# helpadmin: ----------------------------------------------
|
3
3
|
# helpadmin: `add routine NAME every NUMBER PERIOD COMMAND`
|
4
|
+
# helpadmin: `add routine NAME every NUMBER PERIOD #CHANNEL COMMAND`
|
4
5
|
# helpadmin: `add routine NAME every NUMBER PERIOD`
|
6
|
+
# helpadmin: `add bgroutine NAME every NUMBER PERIOD`
|
5
7
|
# helpadmin: `add silent routine NAME every NUMBER PERIOD`
|
8
|
+
# helpadmin: `add silent bgroutine NAME every NUMBER PERIOD`
|
6
9
|
# helpadmin: `create routine NAME every NUMBER PERIOD`
|
7
10
|
# helpadmin: `add routine NAME at TIME COMMAND`
|
11
|
+
# helpadmin: `add routine NAME at TIME #CHANNEL COMMAND`
|
8
12
|
# helpadmin: `add routine NAME on DAYWEEK at TIME COMMAND`
|
13
|
+
# helpadmin: `add routine NAME on DAYWEEK at TIME #CHANNEL COMMAND`
|
9
14
|
# helpadmin: `add routine NAME at TIME`
|
10
15
|
# helpadmin: `add silent routine NAME at TIME`
|
11
16
|
# helpadmin: `create routine NAME at TIME`
|
12
17
|
# helpadmin: It will execute the command/rule supplied. Only for Admin and Master Admins.
|
13
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`
|
14
20
|
# helpadmin: In case *silent* provided then when executed will be only displayed if the routine returns a message
|
15
21
|
# helpadmin: NAME: one word to identify the routine
|
16
22
|
# helpadmin: NUMBER: Integer
|
17
23
|
# helpadmin: PERIOD: days, d, hours, h, minutes, mins, min, m, seconds, secs, sec, s
|
18
24
|
# helpadmin: TIME: time at format HH:MM:SS
|
19
|
-
# 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'
|
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.
|
20
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.
|
21
29
|
# helpadmin: Examples:
|
22
|
-
# helpadmin: _add routine example every 30s ruby puts 'a'_
|
23
|
-
# helpadmin: _add
|
24
|
-
# helpadmin: _add routine example at 17:05 ruby puts 'a'_
|
25
|
-
# helpadmin: _create silent routine every 12 hours !Run customer tests_
|
26
|
-
# helpadmin: _add
|
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'_
|
33
|
+
# helpadmin: _create silent routine Example every 12 hours !Run customer tests_
|
34
|
+
# helpadmin: _add bgroutine example on Mondays at 05:00 !run customer tests_
|
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>
|
27
38
|
# helpadmin:
|
28
|
-
def add_routine(dest, from, user, name, type, number_time, period, command_to_run, files, silent)
|
39
|
+
def add_routine(dest, from, user, name, type, number_time, period, command_to_run, files, silent, channel, routine_type)
|
29
40
|
save_stats(__method__)
|
30
41
|
if files.nil? or files.size == 0 or (files.size > 0 and config.masters.include?(from))
|
31
42
|
if config.admins.include?(from)
|
@@ -56,8 +67,9 @@ class SlackSmartBot
|
|
56
67
|
every = "#{number_time} seconds"
|
57
68
|
every_in_seconds = number_time.to_i
|
58
69
|
else # time
|
59
|
-
if type != 'at'
|
70
|
+
if type != 'at' and type!='weekday' and type!='weekend'
|
60
71
|
dayweek = type.downcase
|
72
|
+
|
61
73
|
days = ['sunday','monday','tuesday','wednesday','thursday','friday','saturday']
|
62
74
|
incr = days.index(dayweek) - Time.now.wday
|
63
75
|
if incr < 0
|
@@ -67,6 +79,14 @@ class SlackSmartBot
|
|
67
79
|
end
|
68
80
|
days = incr/(24*60*60)
|
69
81
|
every_in_seconds = 7 * 24 * 60 * 60 # one week
|
82
|
+
elsif type=='weekend'
|
83
|
+
dayweek = type.downcase
|
84
|
+
days = 0
|
85
|
+
every_in_seconds = 24 * 60 * 60 # one day
|
86
|
+
elsif type=='weekday'
|
87
|
+
dayweek = type.downcase
|
88
|
+
days = 0
|
89
|
+
every_in_seconds = 24 * 60 * 60 # one day
|
70
90
|
else
|
71
91
|
days = 0
|
72
92
|
every_in_seconds = 24 * 60 * 60 # one day
|
@@ -90,20 +110,35 @@ class SlackSmartBot
|
|
90
110
|
if files[0].filetype == "ruby" and files[0].name.scan(/[^\.]+(\.\w+$)/).join == ''
|
91
111
|
file_path += ".rb"
|
92
112
|
end
|
93
|
-
|
94
|
-
|
113
|
+
if files[0].key?(:content)
|
114
|
+
File.open(file_path, 'w') do |f|
|
115
|
+
f.write files[0].content
|
116
|
+
end
|
117
|
+
else
|
118
|
+
http = NiceHttp.new(host: "https://files.slack.com", headers: { "Authorization" => "Bearer #{config[:token]}" }, log_headers: :partial)
|
119
|
+
http.get(files[0].url_private_download, save_data: file_path)
|
120
|
+
end
|
95
121
|
system("chmod +x #{file_path}")
|
96
122
|
end
|
97
|
-
|
123
|
+
get_channels_name_and_id() unless @channels_name.keys.include?(channel) or @channels_id.keys.include?(channel)
|
124
|
+
channel_id = nil
|
125
|
+
if @channels_name.key?(channel) #it is an id
|
126
|
+
channel_id = channel
|
127
|
+
channel = @channels_name[channel_id]
|
128
|
+
elsif @channels_id.key?(channel) #it is a channel name
|
129
|
+
channel_id = @channels_id[channel]
|
130
|
+
end
|
131
|
+
|
132
|
+
channel_id = dest if channel_id.to_s == ''
|
98
133
|
@routines[@channel_id] = {} unless @routines.key?(@channel_id)
|
99
134
|
@routines[@channel_id][name] = { channel_name: config.channel, creator: from, creator_id: user.id, status: :on,
|
100
135
|
every: every, every_in_seconds: every_in_seconds, at: at, dayweek: dayweek, file_path: file_path,
|
101
136
|
command: command_to_run.to_s.strip, silent: silent,
|
102
|
-
next_run: next_run.to_s, dest:
|
103
|
-
running: false }
|
137
|
+
next_run: next_run.to_s, dest: channel_id, last_run: "", last_elapsed: "",
|
138
|
+
running: false, routine_type: routine_type}
|
104
139
|
update_routines
|
105
140
|
respond "Added routine *`#{name}`* to the channel", dest
|
106
|
-
create_routine_thread(name)
|
141
|
+
create_routine_thread(name, @routines[@channel_id][name])
|
107
142
|
end
|
108
143
|
end
|
109
144
|
else
|
@@ -4,6 +4,7 @@ class SlackSmartBot
|
|
4
4
|
# helpadmin: `extend rules to CHANNEL_NAME`
|
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
|
+
# helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#extending-rules-to-other-channels|more info>
|
7
8
|
# helpadmin:
|
8
9
|
def extend_rules(dest, user, from, channel, typem)
|
9
10
|
save_stats(__method__)
|
@@ -14,15 +15,12 @@ class SlackSmartBot
|
|
14
15
|
respond "Only admins can extend the rules. Admins on this channel: #{config.admins}", dest
|
15
16
|
else
|
16
17
|
#todo: add pagination for case more than 1000 channels on the workspace
|
17
|
-
channels =
|
18
|
-
|
19
|
-
limit: "1000",
|
20
|
-
exclude_archived: "true",
|
21
|
-
).channels
|
18
|
+
channels = get_channels()
|
19
|
+
channel = @channels_name[channel] if @channels_name.key?(channel)
|
22
20
|
|
23
21
|
channel_found = channels.detect { |c| c.name == channel }
|
24
22
|
get_channels_name_and_id()
|
25
|
-
members =
|
23
|
+
members = get_channel_members(@channels_id[channel]) unless channel_found.nil?
|
26
24
|
get_bots_created()
|
27
25
|
channels_in_use = []
|
28
26
|
@bots_created.each do |k, v|
|
@@ -39,7 +37,7 @@ class SlackSmartBot
|
|
39
37
|
elsif !members.include?(user.id)
|
40
38
|
respond "You need to join that channel first", dest
|
41
39
|
elsif !members.include?(config[:nick_id])
|
42
|
-
respond "You need to add first to the channel the smart bot user:
|
40
|
+
respond "You need to add first to the channel the smart bot user: <@#{config[:nick_id]}>", dest
|
43
41
|
else
|
44
42
|
channels_in_use.each do |channel_in_use|
|
45
43
|
respond "The rules from channel <##{@channels_id[channel_in_use]}> are already in use on that channel", dest
|
@@ -5,6 +5,7 @@ class SlackSmartBot
|
|
5
5
|
# helpadmin: `pause this bot`
|
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
|
+
# helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#bot-management|more info>
|
8
9
|
# helpadmin:
|
9
10
|
def pause_bot(dest, from)
|
10
11
|
save_stats(__method__)
|
@@ -12,10 +13,12 @@ class SlackSmartBot
|
|
12
13
|
respond "This bot is paused from now on. You can start it again: start this bot", dest
|
13
14
|
respond "zZzzzzZzzzzZZZZZZzzzzzzzz", dest
|
14
15
|
@status = :paused
|
15
|
-
@bots_created[@channel_id][:status] = :paused
|
16
16
|
unless config.on_master_bot
|
17
|
+
@bots_created[@channel_id][:status] = :paused
|
18
|
+
update_bots_file()
|
17
19
|
send_msg_channel config.master_channel, "Changed status on #{config.channel} to :paused"
|
18
20
|
end
|
21
|
+
save_status :off, :paused, 'The admin paused this bot'
|
19
22
|
else
|
20
23
|
respond "Only admin users can put me on pause", dest
|
21
24
|
end
|
@@ -6,6 +6,7 @@ class SlackSmartBot
|
|
6
6
|
# helpadmin: NAME: one word to identify the routine
|
7
7
|
# helpadmin: Examples:
|
8
8
|
# helpadmin: _pause routine example_
|
9
|
+
# helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#routines|more info>
|
9
10
|
# helpadmin:
|
10
11
|
def pause_routine(dest, from, name)
|
11
12
|
save_stats(__method__)
|
@@ -9,13 +9,12 @@ class SlackSmartBot
|
|
9
9
|
# helpadmin: NAME: one word to identify the routine
|
10
10
|
# helpadmin: Examples:
|
11
11
|
# helpadmin: _kill routine example_
|
12
|
+
# helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#routines|more info>
|
12
13
|
# helpadmin:
|
13
14
|
def remove_routine(dest, from, name)
|
14
15
|
save_stats(__method__)
|
15
16
|
if config.admins.include?(from) #admin user
|
16
|
-
if
|
17
|
-
respond "It's only possible to remove routines from MASTER channel from a direct message with the bot.", dest
|
18
|
-
elsif @routines.key?(@channel_id) and @routines[@channel_id].key?(name)
|
17
|
+
if @routines.key?(@channel_id) and @routines[@channel_id].key?(name)
|
19
18
|
@routines[@channel_id][name][:thread].exit
|
20
19
|
@routines[@channel_id].delete(name)
|
21
20
|
update_routines()
|
@@ -8,6 +8,7 @@ class SlackSmartBot
|
|
8
8
|
# helpadmin: NAME: one word to identify the routine
|
9
9
|
# helpadmin: Examples:
|
10
10
|
# helpadmin: _run routine example_
|
11
|
+
# helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#routines|more info>
|
11
12
|
# helpadmin:
|
12
13
|
|
13
14
|
def run_routine(dest, from, name)
|
@@ -16,6 +17,7 @@ class SlackSmartBot
|
|
16
17
|
if !config.on_master_bot and dest[0] == "D"
|
17
18
|
respond "It's only possible to run routines from MASTER channel from a direct message with the bot.", dest
|
18
19
|
elsif @routines.key?(@channel_id) and @routines[@channel_id].key?(name)
|
20
|
+
File.delete "#{config.path}/routines/#{@channel_id}/#{name}_output.txt" if File.exists?("#{config.path}/routines/#{@channel_id}/#{name}_output.txt")
|
19
21
|
if @routines[@channel_id][name][:file_path] != ""
|
20
22
|
if @routines[@channel_id][name][:file_path].match?(/\.rb$/i)
|
21
23
|
ruby = "ruby "
|
@@ -40,7 +42,10 @@ class SlackSmartBot
|
|
40
42
|
treat_message({ channel: @routines[@channel_id][name][:dest],
|
41
43
|
user: @routines[@channel_id][name][:creator_id],
|
42
44
|
text: @routines[@channel_id][name][:command],
|
43
|
-
files: nil
|
45
|
+
files: nil,
|
46
|
+
routine_name: name,
|
47
|
+
routine_type: @routines[@channel_id][name][:routine_type],
|
48
|
+
routine: true })
|
44
49
|
end
|
45
50
|
@routines[@channel_id][name][:last_elapsed] = (Time.now - started)
|
46
51
|
@routines[@channel_id][name][:last_run] = started.to_s
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class SlackSmartBot
|
2
|
+
|
3
|
+
# helpadmin: ----------------------------------------------
|
4
|
+
# helpadmin: `see routine result NAME`
|
5
|
+
# helpadmin: `see result routine NAME`
|
6
|
+
# helpadmin: `result routine NAME`
|
7
|
+
# helpadmin: It will display the last result of the routine run.
|
8
|
+
# helpadmin: You can use this command only if you are an admin user
|
9
|
+
# helpadmin: NAME: one word to identify the routine
|
10
|
+
# helpadmin: Examples:
|
11
|
+
# helpadmin: _see routine result example_
|
12
|
+
# helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#routines|more info>
|
13
|
+
# helpadmin:
|
14
|
+
def see_result_routine(dest, from, name)
|
15
|
+
save_stats(__method__)
|
16
|
+
if config.admins.include?(from) #admin user
|
17
|
+
if @routines.key?(@channel_id) and @routines[@channel_id].key?(name)
|
18
|
+
if File.exist?("#{config.path}/routines/#{@channel_id}/#{name}_output.txt")
|
19
|
+
msg = "*Results from routine run #{File.mtime("#{config.path}/routines/#{@channel_id}/#{name}_output.txt")}*\n"
|
20
|
+
msg += File.read("#{config.path}/routines/#{@channel_id}/#{name}_output.txt")
|
21
|
+
respond msg, dest
|
22
|
+
else
|
23
|
+
respond "The routine *`#{name}`* doesn't have any result yet.", dest
|
24
|
+
end
|
25
|
+
else
|
26
|
+
respond "There isn't a routine with that name: *`#{name}`*.\nCall `see routines` to see added routines", dest
|
27
|
+
end
|
28
|
+
else
|
29
|
+
respond "Only admin users can see the routines results", dest
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -5,6 +5,7 @@ class SlackSmartBot
|
|
5
5
|
# helpadmin: It will show the routines of the channel
|
6
6
|
# helpadmin: In case of `all` and on the master channel, it will show all the routines from all channels
|
7
7
|
# helpadmin: You can use this command only if you are an admin user
|
8
|
+
# helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#routines|more info>
|
8
9
|
# helpadmin:
|
9
10
|
def see_routines(dest, from, user, all)
|
10
11
|
save_stats(__method__)
|
@@ -23,8 +24,8 @@ class SlackSmartBot
|
|
23
24
|
routines = @routines.dup
|
24
25
|
end
|
25
26
|
else
|
26
|
-
if @rules_imported.key?(user.
|
27
|
-
file_conf = IO.readlines("#{config.path}/routines/routines_#{@rules_imported[user.
|
27
|
+
if @rules_imported.key?(user.name) and @rules_imported[user.name].key?(user.name) and dest[0] == "D"
|
28
|
+
file_conf = IO.readlines("#{config.path}/routines/routines_#{@rules_imported[user.name][user.name]}.rb").join
|
28
29
|
routines = eval(file_conf)
|
29
30
|
else
|
30
31
|
routines = @routines.dup
|
@@ -38,8 +39,14 @@ class SlackSmartBot
|
|
38
39
|
respond "Routines on channel *#{rout_ch.get_values(:channel_name).values.flatten.uniq[0]}*", dest
|
39
40
|
rout_ch.each do |k, v|
|
40
41
|
msg = []
|
41
|
-
|
42
|
-
|
42
|
+
if v[:dest][0] == 'D'
|
43
|
+
extram = " (*DM to #{v[:creator]}*)"
|
44
|
+
elsif v[:dest] != ch
|
45
|
+
extram = " (*publish on <##{v[:dest]}>*)"
|
46
|
+
else
|
47
|
+
extram = ''
|
48
|
+
end
|
49
|
+
msg << "*`#{k}`*#{extram}"
|
43
50
|
msg << "\tCreator: #{v[:creator]}"
|
44
51
|
msg << "\tStatus: #{v[:status]}"
|
45
52
|
msg << "\tEvery: #{v[:every]}" unless v[:every] == ""
|
@@ -51,6 +58,7 @@ class SlackSmartBot
|
|
51
58
|
msg << "\tCommand: #{v[:command]}" unless v[:command].to_s.strip == ''
|
52
59
|
msg << "\tFile: #{v[:file_path]}" unless v[:file_path] == ''
|
53
60
|
msg << "\tSilent: #{v[:silent]}" unless !v[:silent]
|
61
|
+
msg << "\tType: #{v[:routine_type]}" if v[:routine_type].to_s == 'bgroutine'
|
54
62
|
respond msg.join("\n"), dest
|
55
63
|
end
|
56
64
|
end
|
@@ -5,16 +5,19 @@ class SlackSmartBot
|
|
5
5
|
# helpadmin: `start this bot`
|
6
6
|
# helpadmin: the bot will start to listen
|
7
7
|
# helpadmin: You can use this command only if you are an admin user
|
8
|
+
# helpadmin: <https://github.com/MarioRuiz/slack-smart-bot#bot-management|more info>
|
8
9
|
# helpadmin:
|
9
10
|
def start_bot(dest, from)
|
10
11
|
save_stats(__method__)
|
11
12
|
if config.admins.include?(from) #admin user
|
12
13
|
respond "This bot is running and listening from now on. You can pause again: pause this bot", dest
|
13
14
|
@status = :on
|
14
|
-
@bots_created[@channel_id][:status] = :on
|
15
15
|
unless config.on_master_bot
|
16
|
+
@bots_created[@channel_id][:status] = :on
|
17
|
+
update_bots_file()
|
16
18
|
send_msg_channel config.master_channel, "Changed status on #{config.channel} to :on"
|
17
19
|
end
|
20
|
+
save_status :on, :started, 'The admin started this bot'
|
18
21
|
else
|
19
22
|
respond "Only admin users can change my status", dest
|
20
23
|
end
|