X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Fcore%2Futils%2Ffilters.rb;h=6d560c9150df8d23cd8d4b7f8d068e825cd77e07;hb=a280ce2fd50834bffdaff365869bde2c909264ec;hp=7535ff420262b088757d3e1dfaebb93bc48ff146;hpb=61b99d005b86ecd1abe7eb08e698141a07b85a9f;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/core/utils/filters.rb b/lib/rbot/core/utils/filters.rb index 7535ff42..6d560c91 100644 --- a/lib/rbot/core/utils/filters.rb +++ b/lib/rbot/core/utils/filters.rb @@ -64,22 +64,16 @@ module ::Irc # def filter(*args) @filters ||= {} - case args.last - when DataStream - # the stream is an actual DataStream - ds = args.pop - when String - # the stream is just plain text - ds = DataStream.new(args.pop) - when Hash - # the stream is a Hash, check if the previous element is a String - if String === args[-2] - ds = DataStream.new(*args.slice!(-2, 2)) - else + if Hash === args.last + # the stream is a Hash, check if the previous element is not a Symbol + if Symbol === args[-2] ds = DataStream.new(args.pop) + else + ds = DataStream.new(*args.slice!(-2, 2)) end else - raise "Unknown DataStream class #{args.last.class}" + # the stream is just whatever else + ds = DataStream.new(args.pop) end names = args.dup return ds if names.empty? @@ -90,13 +84,30 @@ module ::Irc fs.inject(ds) { |mid, f| mid = f.call(mid) } end + # This method returns the global filter name for filter _name_ + # in group _group_ + def global_filter_name(name, group=nil) + (group ? "#{group}.#{name}" : name.to_s).intern + end + + # This method checks if the bot has a filter named _name_ (in group + # _group_) + def has_filter?(name, group=nil) + @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? @filters ||= {} - tlkey = ( group ? "#{group}.#{name}" : name.to_s ).intern + tlkey = global_filter_name(name, group) key = name.to_sym - if @filters.key?(tlkey) + if has_filter?(tlkey) debug "Overwriting filter #{tlkey}" end @filters[tlkey] = DataFilter.new &block @@ -111,6 +122,24 @@ module ::Irc end end + # This method is used to retrieve the filter names (in a given group) + def filter_names(group=nil) + if group + gkey = group.to_sym + return [] unless defined? @filter_group and @filter_group.key?(gkey) + return @filter_group[gkey].keys + else + return [] unless defined? @filters + return @filters.keys + 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 ||= {}