# the message map handler
attr_reader :handler
+ # the directory in which the plugin is located
+ attr_reader :plugin_path
+
# Initialise your bot module. Always call super if you override this method,
# as important variables are set up for you:
#
@registry = @bot.registry_factory.create(@bot.path, self.class.to_s.gsub(/^.*::/, ''))
@manager.add_botmodule(self)
+ @plugin_path = @manager.next_plugin_path
if self.respond_to?('set_language')
self.set_language(@bot.lang.language)
end
@registry.flush
end
+
# Method called to cleanup before the plugin is unloaded. If you overload
# this method to handle additional cleanup tasks, remember to call super()
# so that the default cleanup actions are taken care of as well.
attr_reader :core_module_dirs
attr_reader :plugin_dirs
+ attr_reader :next_plugin_path
# This is the list of patterns commonly delegated to plugins.
# A fast delegation lookup is enabled for them.
([str, err.inspect] + err.backtrace).join("\n")
end
+ def get_plugin(name)
+ plugins.find { |plugin| plugin.name == name }
+ end
+
# This method is the one that actually loads a module from the
# file _fname_
#
begin
plugin_string = IO.read(fname)
debug "loading #{desc}#{fname}"
+
+ # set path of the plugin that will be loaded next (see BotModule#initialize)
+ @next_plugin_path = File.dirname fname
+
plugin_module.module_eval(plugin_string, fname)
+ @next_plugin_path = nil
+
return :loaded
rescue Exception => err
# rescue TimeoutError, StandardError, NameError, LoadError, SyntaxError => err
return newerr
end
end
- private :load_botmodule_file
# add one or more directories to the list of directories to
# load core modules from