X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Furban.rb;h=98066e60077fae7e87e26e96cbcad68751f452c8;hb=427b14e3ee7f7d7d7769069b8b0816e4e59e3bad;hp=d4af64a6295b3f27f02abe8c9dcaa1cd4486fadd;hpb=d7efdf6ab7cdacdb7816935eac2e264a2ed3b4f6;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/urban.rb b/data/rbot/plugins/urban.rb index d4af64a6..98066e60 100644 --- a/data/rbot/plugins/urban.rb +++ b/data/rbot/plugins/urban.rb @@ -1,71 +1,82 @@ -require 'cgi' -begin - require 'rubyful_soup' -rescue - warning "could not load rubyful_soup, urban dictionary disabled" - warning "please get it from http://www.crummy.com/software/RubyfulSoup/" - warning "or install it via gem" - return -end -require 'uri/common' - class UrbanPlugin < Plugin + URBAN = 'http://www.urbandictionary.com/define.php?term=' def help( plugin, topic="") - "~urban [word] [n]. Give the [n]th definition of [word] from urbandictionary.com." + "urban [word] [n]: give the [n]th definition of [word] from urbandictionary.com. urbanday: give the word-of-the-day at urban" + end + + def format_definition(total, num, word, desc, ex) + "#{Bold}#{word} (#{num}/#{total})#{Bold}: " + + desc.ircify_html(:limit => 300) + " " + + "#{ex}".ircify_html(:limit => 100) end - def privmsg( m ) + def get_def(m, word, n = nil) + n = n ? n.to_i : 1 + u = URBAN + URI.escape(word) + u += '&skip=' + n.to_s if n + s = @bot.httputil.get(u) - unless(m.params && m.params.length > 0) - m.reply "incorrect usage: " + help(m.plugin) - return + notfound = s.match %r{
.*? isn't defined} + + total = nil + if s.sub!(%r{
(\d+)\s*definition.*$}m, '') + total = $1.to_i end - paramArray = m.params.split(' ') - definitionN = 0 - if m.params == 'random' then - uri = URI.parse( "http://www.urbandictionary.com/random.php" ) - else - if( paramArray.last.to_i != 0 ) then - definitionN = paramArray.last.to_i - 1 - query = m.params.chomp( paramArray.last ) - query.rstrip! - else - query = m.params - end - uri = URI.parse( "http://www.urbandictionary.com/define.php?term=#{ URI.escape query}" ) + rv = Array.new + + s.scan(%r{]*>(\d+)\..*?(?:)?([^>]+)(?:)?.*?
.*?

(.+?)

.*?

total ? rv.last : rv.first) + m.reply format_definition(total, *answer) + end + + def urban(m, params) + words = params[:words].to_s + if words.empty? + resp = @bot.httputil.head('http://www.urbandictionary.com/random.php', + :max_redir => -1, + :cache => false) + if resp.code == "302" && (loc = resp['location']) + words = URI.unescape(loc.match(/define.php\?term=(.*)$/)[1]) rescue nil + end + end + get_def(m, words, params[:n]) end - def strip_tags(html) - html.gsub(/<.+?>/,''). - gsub(/&/,'&'). - gsub(/"/,'"'). - gsub(/</,'<'). - gsub(/>/,'>'). - gsub(/&ellip;/,'...'). - gsub(/'/, "'"). - gsub("\n",'') + def uotd(m, params) + home = @bot.httputil.get("http://www.urbandictionary.com/daily.php") + if home.nil? + m.reply "Couldn't get the urban dictionary word of the day" + return + end + home.match(%r{href="/define.php\?term=.*?">(.*?)<}) + wotd = $1 + debug "Urban word of the day: #{wotd}" + if !wotd + m.reply "Couldn't get the urban dictionary word of the day" + return + end + get_def(m, wotd, 1) end end plugin = UrbanPlugin.new -plugin.register( "urban" ) +plugin.map "urban *words :n", :requirements => { :n => /^-?\d+$/ }, :action => 'urban' +plugin.map "urban [*words]", :action => 'urban' +plugin.map "urbanday", :action => 'uotd' +