X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Fcore%2Futils%2Ffilters.rb;h=463e6f383ab2037382b36298a0197f3a946f7980;hb=db1fae02053ec1a891e37498e1a5c0fd28043823;hp=2da89d085766d4697cc545afdd29b83692262cfa;hpb=1fddc1eb2dde85b5909b90c77656bee6eb500298;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/core/utils/filters.rb b/lib/rbot/core/utils/filters.rb index 2da89d08..463e6f38 100644 --- a/lib/rbot/core/utils/filters.rb +++ b/lib/rbot/core/utils/filters.rb @@ -4,8 +4,6 @@ # :title: Stream filters # # Author:: Giuseppe "Oblomov" Bilotta -# Copyright:: (C) 2008 Giuseppe Bilotta -# License:: GPL v2 # # This file collects methods to handle 'stream filters', a generic mechanism # to transform text+attributes into other text+attributes @@ -96,6 +94,11 @@ module ::Irc @filters.key?(global_filter_name(name, group)) end + # This method checks if the bot has a filter group named _name_ + def has_filter_group?(name) + @filter_group.key?(name) + end + # This method is used to register a new filter def register_filter(name, group=nil, &block) raise "No block provided" unless block_given? @@ -105,7 +108,7 @@ module ::Irc if has_filter?(tlkey) debug "Overwriting filter #{tlkey}" end - @filters[tlkey] = DataFilter.new &block + @filters[tlkey] = DataFilter.new(&block) if group gkey = group.to_sym @filter_group ||= {} @@ -129,6 +132,12 @@ module ::Irc end end + # This method is used to retrieve the filter group names + def filter_groups + return [] unless defined? @filter_group + return @filter_group.keys + end + # This method clears the filter list and installs the identity filter def clear_filters @filters ||= {} @@ -139,6 +148,53 @@ module ::Irc register_filter(:identity) { |stream| stream } end + + module Plugins + class BotModule + # read accessor for the default filter group for this BotModule + def filter_group + @filter_group ||= name + end + + # write accessor for the default filter group for this BotModule + def filter_group=(name) + @filter_group = name + end + + # define a filter defaulting to the default filter group + # for this BotModule + def define_filter(filter, &block) + @bot.register_filter(filter, self.filter_group, &block) + end + + # load filters associated with the BotModule by looking in + # the path(s) specified by the :path option, defaulting to + # * Config::datadir/filters/.rb + # * botclass/filters/.rb + # (note that as we use #dirname() rather than #name(), + # since we're looking for datafiles; this is only relevant + # for the very few plugins whose dirname differs from name) + def load_filters(options={}) + case options[:path] + when nil + file = "#{self.dirname}.rb" + paths = [ + File.join(Config::datadir, 'filters', file), + @bot.path('filters', file) + ] + when Array + paths = options[:path] + else + paths = [options[:path]] + end + + paths.each do |file| + instance_eval(File.read(file), file) if File.exist?(file) + end + end + end + end + end end