X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Furban.rb;h=5aae26c6d47cc10566c7a9fc5eb50f1fc387ad6b;hb=9a565bfd48c59ac9c1b37d5afe9b8640889632ff;hp=dd275e2de7a995e1c90f3fdc7d7287d5a3dcc1a2;hpb=b7d2b095520d8951eb41ebd9c7794889169e5228;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/urban.rb b/data/rbot/plugins/urban.rb index dd275e2d..5aae26c6 100644 --- a/data/rbot/plugins/urban.rb +++ b/data/rbot/plugins/urban.rb @@ -1,64 +1,82 @@ -require 'cgi' -require 'rubyful_soup' -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 privmsg( m ) + def format_definition(total, num, word, desc, ex) + "#{Bold}#{word} (#{num}/#{total})#{Bold}: " + + desc.ircify_html(:limit => 300) + " " + + "#{ex}".ircify_html(:limit => 100) + end - unless(m.params && m.params.length > 0) - m.reply "incorrect usage: " + help(m.plugin) - return + 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) + + 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' +