lib/slack/smart-bot/process.rb in slack-smart-bot-1.5.1 vs lib/slack/smart-bot/process.rb in slack-smart-bot-1.6.0
- old
+ new
@@ -1,8 +1,9 @@
class SlackSmartBot
def process(user, command, dest, dchannel, rules_file, typem, files, ts)
from = user.name
+
if user.profile.display_name.to_s.match?(/\A\s*\z/)
user.profile.display_name = user.profile.real_name
end
display_name = user.profile.display_name
processed = true
@@ -54,19 +55,19 @@
when /^\s*start\s(this\s)?bot$/i
start_bot(dest, from)
when /^\s*pause\s(this\s)?bot$/i
pause_bot(dest, from)
when /^\s*bot\sstatus/i
- bot_status(dest, from)
+ bot_status(dest, user)
when /\Anotify\s+<#(C\w+)\|.+>\s+(.+)\s*\z/im, /\Anotify\s+(all)?\s*(.+)\s*\z/im
where = $1
message = $2
notify_message(dest, from, where, message)
when /^\s*create\s+(cloud\s+)?bot\s+on\s+<#C\w+\|(.+)>\s*/i, /^create\s+(cloud\s+)?bot\s+on\s+(.+)\s*/i
cloud = !$1.nil?
channel = $2
- create_bot(dest, from, cloud, channel)
+ create_bot(dest, user, cloud, channel)
when /^\s*kill\sbot\son\s<#C\w+\|(.+)>\s*$/i, /^kill\sbot\son\s(.+)\s*$/i
channel = $1
kill_bot_on_channel(dest, from, channel)
when /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+(every)\s+(\d+)\s*(days|hours|minutes|seconds|mins|min|secs|sec|d|h|m|s)\s*(\s.+)?\s*$/i,
/^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+(at)\s+(\d+:\d+:?\d+?)\s*()(\s.+)?\s*$/i
@@ -117,31 +118,36 @@
processed = false
end
# only when :on and (listening or on demand or direct message)
if @status == :on and
- (@questions.keys.include?(from) or
- (@listening.include?(from) and typem != :on_extended) or
+ (@questions.key?(from) or
+ (@repl_sessions.key?(from) and dest==@repl_sessions[from][:dest] and
+ ((@repl_sessions[from][:on_thread] and Thread.current[:thread_ts] == @repl_sessions[from][:thread_ts]) or
+ (!@repl_sessions[from][:on_thread] and !Thread.current[:on_thread]))) or
+ (@listening.key?(from) and typem != :on_extended and
+ ((@listening[from].key?(dest) and !Thread.current[:on_thread]) or
+ (@listening[from].key?(Thread.current[:thread_ts]) and Thread.current[:on_thread] ) )) or
typem == :on_dm or typem == :on_pg or on_demand)
processed2 = true
case command
# bot rules for extended channels
when /^bot\s+rules\s*(.+)?$/i
help_command = $1
- bot_rules(dest, help_command, typem, rules_file, from)
+ bot_rules(dest, help_command, typem, rules_file, user)
when /^\s*(add\s)?shortcut\s(for\sall)?\s*([^:]+)\s*:\s*(.+)/i, /^(add\s)sc\s(for\sall)?\s*([^:]+)\s*:\s*(.+)/i
for_all = $2
shortcut_name = $3.to_s.downcase
command_to_run = $4
- add_shortcut(dest, from, typem, for_all, shortcut_name, command, command_to_run)
+ add_shortcut(dest, user, typem, for_all, shortcut_name, command, command_to_run)
when /^\s*(delete|remove)\s+shortcut\s+(.+)/i, /^(delete|remove)\s+sc\s+(.+)/i
shortcut = $2.to_s.downcase
- delete_shortcut(dest, from, shortcut, typem, command)
+ delete_shortcut(dest, user, shortcut, typem, command)
when /^\s*see\sshortcuts/i, /^see\ssc/i
- see_shortcuts(dest, from, typem)
+ see_shortcuts(dest, user, typem)
#kept to be backwards compatible
when /^\s*id\schannel\s<#C\w+\|(.+)>\s*/i, /^id channel (.+)/
unless typem == :on_extended
channel_name = $1
@@ -155,10 +161,56 @@
when /^\s*ruby\s(.+)/im, /^\s*code\s(.+)/im
code = $1
code.gsub!("\\n", "\n")
code.gsub!("\\r", "\r")
@logger.info code
- ruby_code(dest, code, rules_file)
+ ruby_code(dest, user, code, rules_file)
+ when /^\s*(private\s+)?(repl|irb|live)\s*()()()$/i,
+ /^\s*(private\s+)?(repl|irb|live)\s+([\w\-]+)()()\s*$/i,
+ /^\s*(private\s+)?(repl|irb|live)\s+([\w\-]+)\s*:\s*"(.+)"()\s*$/i,
+ /^\s*(private\s+)?(repl|irb|live)\s+([\w\-]+)\s*:\s*"(.+)"\s+(.+)\s*$/i,
+ /^\s*(private\s+)?(repl|irb|live)\s+([\w\-]+)()\s+(.+)\s*$/i,
+ /^\s*(private\s+)?(repl|irb|live)()\s+()(.+)\s*$/i
+ if $1.to_s!=''
+ type = :private
+ else
+ type = :public
+ end
+ session_name = $3
+ description = $4
+ opts = " #{$5}"
+ env_vars = opts.scan(/\s+[\w\-]+="[^"]+"/i) + opts.scan(/\s+[\w\-]+='[^']+'/i)
+ opts.scan(/\s+[\w\-]+=[^'"\s]+/i).flatten.each do |ev|
+ env_vars << ev.gsub('=',"='") + "'"
+ end
+ env_vars.each_with_index do |ev, idx|
+ ev.gsub!("=","']=")
+ ev.lstrip!
+ env_vars[idx] = "ENV['#{ev}"
+ end
+ repl(dest, user, session_name, env_vars.flatten, rules_file, command, description, type)
+ when /^\s*get\s+(repl|irb|live)\s+([\w\-]+)\s*/i
+ session_name = $2
+ get_repl(dest, user, session_name)
+ when /^\s*run\s+(repl|irb|live)\s+([\w\-]+)()\s*$/i,
+ /^\s*run\s+(repl|irb|live)\s+([\w\-]+)\s+(.+)\s*$/i
+ session_name = $2
+ opts = " #{$3}"
+ env_vars = opts.scan(/\s+[\w\-]+="[^"]+"/i) + opts.scan(/\s+[\w\-]+='[^']+'/i)
+ opts.scan(/\s+[\w\-]+=[^'"\s]+/i).flatten.each do |ev|
+ env_vars << ev.gsub('=',"='") + "'"
+ end
+ env_vars.each_with_index do |ev, idx|
+ ev.gsub!("=","']=")
+ ev.lstrip!
+ env_vars[idx] = "ENV['#{ev}"
+ end
+ run_repl(dest, user, session_name, env_vars.flatten, rules_file)
+ when /^\s*(delete|remove)\s+(repl|irb|live)\s+([\w\-]+)\s*$/i
+ repl_name = $3.downcase
+ delete_repl(dest, user, repl_name)
+ when /^\s*see\s+(repls|repl|irb|irbs)\s*$/i
+ see_repls(dest, user, typem)
else
processed2 = false
end #of case
processed = true if processed or processed2