]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/plugins.rb
fix httputil.rb when using proxy (Ticket #80)
[user/henk/code/ruby/rbot.git] / lib / rbot / plugins.rb
index bffba2273994e98d658bee176583c54c080f3509..54b814e0eb400c89e5c58c09c0f017a3141ce93d 100644 (file)
@@ -99,6 +99,10 @@ module Plugins
       @registry = BotRegistryAccessor.new(@bot, self.class.to_s.gsub(/^.*::/, ""))
     end
 
+    def flush_registry
+      @registry.flush
+    end
+
     def map(*args)
       @handler.map(*args)
       # register this map
@@ -173,14 +177,20 @@ module Plugins
 
     # 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}"
 
@@ -193,7 +203,9 @@ module Plugins
               plugin_string = IO.readlines(tmpfilename).join("")
               debug "loading plugin #{tmpfilename}"
               plugin_module.module_eval(plugin_string)
-            rescue TimeoutError, StandardError, NameError, LoadError, SyntaxError => err
+              processed << file
+            rescue Exception => err
+              # rescue TimeoutError, StandardError, NameError, LoadError, SyntaxError => err
               puts "warning: plugin #{tmpfilename} load failed: " + err
               puts err.backtrace.join("\n")
             end
@@ -204,6 +216,7 @@ module Plugins
 
     # call the save method for each active plugin
     def save
+      delegate 'flush_registry'
       delegate 'save'
     end
 
@@ -243,7 +256,8 @@ module Plugins
         if(@@plugins.has_key?(key))
           begin
             return @@plugins[key].help(key, params)
-          rescue TimeoutError, StandardError, NameError, SyntaxError => err
+          rescue Exception => err
+          #rescue TimeoutError, StandardError, NameError, SyntaxError => err
             puts "plugin #{@@plugins[key].name} help() failed: " + err
             puts err.backtrace.join("\n")
           end
@@ -260,7 +274,8 @@ module Plugins
         if(p.respond_to? method)
           begin
             p.send method, *args
-          rescue TimeoutError, StandardError, NameError, SyntaxError => err
+          rescue Exception => err
+            #rescue TimeoutError, StandardError, NameError, SyntaxError => err
             puts "plugin #{p.name} #{method}() failed: " + err
             puts err.backtrace.join("\n")
           end
@@ -277,7 +292,8 @@ module Plugins
           @@bot.auth.allow?(m.plugin, m.source, m.replyto))
         begin
           @@plugins[m.plugin].privmsg(m)
-        rescue TimeoutError, StandardError, NameError, SyntaxError => err
+        rescue Exception => err
+          #rescue TimeoutError, StandardError, NameError, SyntaxError => err
           puts "plugin #{@@plugins[m.plugin].name} privmsg() failed: " + err
           puts err.backtrace.join("\n")
         end