#
# map(template, options)::
# map is the new, cleaner way to respond to specific message formats
- # without littering your plugin code with regexps
- # examples:
+ # without littering your plugin code with regexps. examples:
+ #
# plugin.map 'karmastats', :action => 'karma_stats'
#
# # while in the plugin...
# topic(TopicMessage)::
# Called when a user (or the bot) changes a channel
# topic
+ #
+ # connect():: Called when a server is joined successfully, but
+ # before autojoin channels are joined (no params)
#
# save:: Called when you are required to save your plugin's
# state, if you maintain data between sessions
# load plugins from pre-assigned list of directories
def scan
+ processed = Array.new
dirs = Array.new
dirs << Config::datadir + "/plugins"
dirs += @dirs
- dirs.each {|dir|
+ dirs.reverse.each {|dir|
if(FileTest.directory?(dir))
d = Dir.new(dir)
d.sort.each {|file|
next if(file =~ /^\./)
+ next if(processed.include?(file))
+ if(file =~ /^(.+\.rb)\.disabled$/)
+ processed << $1
+ next
+ end
next unless(file =~ /\.rb$/)
tmpfilename = "#{dir}/#{file}"
plugin_string = IO.readlines(tmpfilename).join("")
debug "loading plugin #{tmpfilename}"
plugin_module.module_eval(plugin_string)
+ processed << file
rescue TimeoutError, StandardError, NameError, LoadError, SyntaxError => err
puts "warning: plugin #{tmpfilename} load failed: " + err
puts err.backtrace.join("\n")