]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
Allow customization of the plugins load path
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Sat, 10 Mar 2007 12:55:33 +0000 (12:55 +0000)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Sat, 10 Mar 2007 12:55:33 +0000 (12:55 +0000)
lib/rbot/ircbot.rb
lib/rbot/plugins.rb

index 7c0af845750676e148358213316dd8a881b1882f..aee426b3cf294c0219d319267be608dfdf025521 100644 (file)
@@ -242,6 +242,12 @@ class Bot
       :validate => Proc.new { |v| v > 0 },
       :desc => "Maximum console messages logfile size (in megabytes)")
 
+    BotConfig.register BotConfigArrayValue.new('plugins.path',
+      :wizard => true, :default => ['(default)', '(default)/contrib'],
+      :requires_restart => false,
+      :on_change => Proc.new { |bot, v| bot.setup_plugins_path },
+      :desc => "Where the bot should look for plugin. List multiple directories using commas to separate. Use '(default)' for default prepackaged plugins collection, '(default)/contrib' for prepackaged unsupported plugins collection")
+
     BotConfig.register BotConfigEnumValue.new('send.newlines',
       :values => ['split', 'join'], :default => 'split',
       :on_change => Proc.new { |bot, v|
@@ -433,10 +439,7 @@ class Bot
     Dir.mkdir("#{botclass}/plugins") unless File.exist?("#{botclass}/plugins")
     @plugins = Plugins::pluginmanager
     @plugins.bot_associate(self)
-    @plugins.add_botmodule_dir(Config::coredir + "/utils")
-    @plugins.add_botmodule_dir(Config::coredir)
-    @plugins.add_botmodule_dir("#{botclass}/plugins")
-    @plugins.add_botmodule_dir(Config::datadir + "/plugins")
+    setup_plugins_path()
     @plugins.scan
 
     Utils.set_safe_save_dir("#{botclass}/safe_save")
@@ -631,6 +634,18 @@ class Bot
       :truncate_text => @config['send.truncate_text'].dup
   end
 
+  def setup_plugins_path
+    @plugins.clear_botmodule_dirs
+    @plugins.add_botmodule_dir(Config::coredir + "/utils")
+    @plugins.add_botmodule_dir(Config::coredir)
+    @plugins.add_botmodule_dir("#{botclass}/plugins")
+
+    @config['plugins.path'].each do |_|
+        path = _.sub(/^\(default\)/, Config::datadir + '/plugins')
+        @plugins.add_botmodule_dir(path)
+    end
+  end
+
   def set_default_send_options(opts={})
     # Default send options for NOTICE and PRIVMSG
     unless defined? @default_send_options
index e101e627772d0cf977689f9b5173216abacd84b7..d29d21c16cbf63a399afb59a8b23ac8999b3671b 100644 (file)
@@ -390,6 +390,11 @@ module Plugins
       debug "Botmodule loading path: #{@dirs.join(', ')}"
     end
 
+    def clear_botmodule_dirs
+      @dirs.clear
+      debug "Botmodule loading path cleared"
+    end
+
     # load plugins from pre-assigned list of directories
     def scan
       @failed.clear