#
# Scripts are little Ruby programs that run in the context of the script
# plugin. You can create them directly in an IRC channel, and invoke them just
-# like normal rbot plugins.
+# like normal rbot plugins.
define_structure :Command, :code, :nick, :created, :channel
super
if @registry.has_key?(:commands)
@commands = @registry[:commands]
- raise unless @commands
+ raise LoadError, "corrupted script database" unless @commands
else
@commands = Hash.new
end
auth_path = "script::run::#{name}".intern
return unless @bot.auth.allow?(auth_path, m.source, m.replyto)
- code = @commands[name].code.dup.untaint
+ code = @commands[name].code.dup
# Convenience variables, can be accessed by scripts:
args = m.message.split
- args.delete_at( 0 )
- user = args.empty? ? m.sourcenick : args.first
+ args.delete_at( 0 )
+ user = args.empty? ? m.sourcenick : args.first
Thread.start {
- # TODO allow different safe levels for different botusers
- $SAFE = 3
-
begin
eval( code )
rescue Exception => e
def handle_eval( m, params )
- code = params[:code].to_s.dup.untaint
+ code = params[:code].to_s.dup
Thread.start {
- # TODO allow different safe levels for different botusers
begin
eval( code )
rescue Exception => e
def handle_echo( m, params )
- code = params[:code].to_s.dup.untaint
+ code = params[:code].to_s.dup
Thread.start {
- # TODO allow different safe levels for different botusers
begin
m.reply eval( code ).to_s
rescue Exception => e
def handle_add_force( m, params )
handle_add( m, params, true )
end
-
+
def handle_del( m, params )
name = params[:name]
page = params[:page].to_i
page = [page, 1].max
page = [page, num_pages].min
- str = cmds[(page-1)*cmds_per_page, cmds_per_page].join(', ')
+ str = cmds[(page-1)*cmds_per_page, cmds_per_page].join(', ')
- m.reply "Available scripts (page #{page}/#{num_pages}): #{str}"
+ m.reply "Available scripts (page #{page}/#{num_pages}): #{str}"
end
plugin.default_auth( 'edit', false )
plugin.default_auth( 'eval', false )
plugin.default_auth( 'echo', false )
+plugin.default_auth( 'show', false )
plugin.default_auth( 'run', true )
plugin.map 'script add -f :name *code', :action => 'handle_add_force', :auth_path => 'edit'