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