# encoding: UTF-8 #-- vim:sw=2:et #++ # # :title: Dictionary lookup plugin for rbot # # Author:: Giuseppe "Oblomov" Bilotta # Copyright:: (C) 2006-2007 Giuseppe Bilotta # License:: GPL v2 # # Provides a link to the definition of a word in one of the supported # dictionaries. Currently available are # * the Oxford dictionary for (British) English # * the De Mauro/Paravia dictionary for Italian # * the Chambers dictionary for English (accepts both US and UK) # * the Littré dictionary for French # # Other plugins can use this one to check if a given word is valid in italian # or english or french by using the is_italian?, is_british?, is_english?, # is_french? methods # # TODO: cache results and reuse them if get_cached returns a cache copy DEMAURO_LEMMA = /(.*?)(?: - (.*?))<\/anchor>/ CHAMBERS_LEMMA = /

(.*?)<\/span> (.*?)<\/span>(.*?)<\/p>/ class DictPlugin < Plugin Config.register Config::IntegerValue.new('dict.hits', :default => 3, :desc => "Number of hits to return from a dictionary lookup") Config.register Config::IntegerValue.new('dict.first_par', :default => 0, :desc => "When set to n > 0, the bot will return the first paragraph from the first n dictionary hits") def demauro_filter(s) # check if it's a page we can handle loc = Utils.check_location(s, @dmurlrx) # the location might be not good, but we might still be able to handle the # page if !loc and s[:text] !~ //m) hits = @bot.config['dict.hits'] n = 0 entries[0...hits].map { |ar| n += 1 m.reply(("#{Bold}#{n}#{Bold} %s" % ar).ircify_html, :overlong => :truncate) } end def is_french?(word) return littre(nil, :word => word, :justcheck => true) end end plugin = DictPlugin.new plugin.map 'demauro :word', :action => 'demauro', :thread => true plugin.map 'oxford *word', :action => 'oxford', :thread => true plugin.map 'chambers *word', :action => 'chambers', :thread => true plugin.map 'littre *word', :action => 'littre', :thread => true