X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Frbot%2Fplugins.rb;h=ba01aa7d5c83a2c6e37f6c59e4a2b85c1f6c80e5;hb=adb719c8e886fead559802bfce868ddfce001a80;hp=8d9dcfc9f9736ca5ba25243b4eb1997b9571f5ad;hpb=8caeee3853ef66dd0e326ff17906f9ca544b8a35;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/plugins.rb b/lib/rbot/plugins.rb index 8d9dcfc9..ba01aa7d 100644 --- a/lib/rbot/plugins.rb +++ b/lib/rbot/plugins.rb @@ -1,4 +1,5 @@ module Irc +module Plugins require 'rbot/messagemapper' # base class for all rbot plugins @@ -133,7 +134,7 @@ module Irc # default usage method provided as a utility for simple plugins. The # MessageMapper uses 'usage' as its default fallback method. - def usage(m, params) + def usage(m, params = {}) m.reply "incorrect usage, ask for help using '#{@bot.nick}: help #{m.plugin}'" end @@ -175,12 +176,14 @@ module Irc dirs.each {|dir| if(FileTest.directory?(dir)) d = Dir.new(dir) - d.each {|file| + d.sort.each {|file| next if(file =~ /^\./) next unless(file =~ /\.rb$/) @tmpfilename = "#{dir}/#{file}" # create a new, anonymous module to "house" the plugin + # the idea here is to prevent namespace pollution. perhaps there + # is another way? plugin_module = Module.new begin @@ -198,28 +201,12 @@ module Irc # call the save method for each active plugin def save - @@plugins.values.uniq.each {|p| - next unless(p.respond_to?("save")) - begin - p.save - rescue StandardError, NameError, SyntaxError => err - puts "plugin #{p.name} save() failed: " + err - puts err.backtrace.join("\n") - end - } + delegate 'save' end # call the cleanup method for each active plugin def cleanup - @@plugins.values.uniq.each {|p| - next unless(p.respond_to?("cleanup")) - begin - p.cleanup - rescue StandardError, NameError, SyntaxError => err - puts "plugin #{p.name} cleanup() failed: " + err - puts err.backtrace.join("\n") - end - } + delegate 'cleanup' end # drop all plugins and rescan plugins on disk @@ -265,11 +252,11 @@ module Irc # see if each plugin handles +method+, and if so, call it, passing # +message+ as a parameter - def delegate(method, message) + def delegate(method, *args) @@plugins.values.uniq.each {|p| if(p.respond_to? method) begin - p.send method, message + p.send method, *args rescue StandardError, NameError, SyntaxError => err puts "plugin #{p.name} #{method}() failed: " + err puts err.backtrace.join("\n") @@ -298,3 +285,4 @@ module Irc end end +end