X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fscript.rb;h=bf8182cee98eb06e1d82141fa4e462db793509f2;hb=617b282bcd157896ccf630415b29022acd2aca62;hp=171dabcb5a813f73ce75fb22a0c4ce54afe61ef5;hpb=2c691f2dc9e6e3e1571218a6ad9c131359d37ffd;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/script.rb b/data/rbot/plugins/script.rb index 171dabcb..bf8182ce 100644 --- a/data/rbot/plugins/script.rb +++ b/data/rbot/plugins/script.rb @@ -21,13 +21,6 @@ class ScriptPlugin < Plugin else @commands = Hash.new end - - # Migrate old Hash to new: - @commands.each_pair do |name, cmd| - unless cmd.instance_of?( Command ) - @commands[name] = Command.new( cmd, 'unknown hacker', 'somedate', '#somechan' ) - end - end end @@ -57,6 +50,7 @@ class ScriptPlugin < Plugin user = args.empty? ? m.sourcenick : args.first Thread.start { + # TODO allow different safe levels for different botusers $SAFE = 3 begin @@ -70,6 +64,34 @@ class ScriptPlugin < Plugin end + def handle_eval( m, params ) + code = params[:code].to_s.dup.untaint + Thread.start { + # TODO allow different safe levels for different botusers + begin + eval( code ) + rescue => e + m.reply( "Script '#{name}' crapped out :(" ) + m.reply( e.inspect ) + end + } + end + + + def handle_echo( m, params ) + code = params[:code].to_s.dup.untaint + Thread.start { + # TODO allow different safe levels for different botusers + begin + m.reply eval( code ).to_s + rescue => e + m.reply( "Script '#{name}' crapped out :(" ) + m.reply( e.inspect ) + end + } + end + + def handle_add( m, params, force = false ) name = params[:name] if !force and @commands.has_key?( name ) @@ -77,7 +99,7 @@ class ScriptPlugin < Plugin return end - code = params[:code].join( " " ) + code = params[:code].to_s nick = m.sourcenick created = Time.new.strftime '%Y/%m/%d %H:%m' channel = m.target @@ -137,10 +159,15 @@ end plugin = ScriptPlugin.new plugin.register( "script" ) - -plugin.map 'script add -f :name *code', :action => 'handle_add_force', :auth => 'scriptedit' -plugin.map 'script add :name *code', :action => 'handle_add', :auth => 'scriptedit' -plugin.map 'script del :name', :action => 'handle_del', :auth => 'scriptedit' +plugin.default_auth( 'edit', false ) +plugin.default_auth( 'eval', false ) +plugin.default_auth( 'echo', false ) + +plugin.map 'script add -f :name *code', :action => 'handle_add_force', :auth_path => 'edit' +plugin.map 'script add :name *code', :action => 'handle_add', :auth_path => 'edit' +plugin.map 'script del :name', :action => 'handle_del', :auth_path => 'edit' +plugin.map 'script eval *code', :action => 'handle_eval' +plugin.map 'script echo *code', :action => 'handle_echo' plugin.map 'script list :page', :action => 'handle_list', :defaults => { :page => '1' } plugin.map 'script show :name', :action => 'handle_show'