summaryrefslogtreecommitdiff
path: root/data/rbot/plugins/urban.rb
blob: f95eabd6f35e23ec88f26cbe5ba31fd1ad038aa3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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

  def help( plugin, topic="")
    "~urban [word] [n]. Give the [n]th definition of [word] from urbandictionary.com."
  end

  def privmsg( m )

    unless(m.params && m.params.length > 0)
      m.reply "incorrect usage: " + help(m.plugin)
      return
    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}" )
    end

    soup = BeautifulSoup.new( @bot.httputil.get_cached( uri ) )
    if titleNavi = soup.find_all( 'td', :attrs => { 'class' => 'def_word' } )[0] then
      title = titleNavi.contents
      results = soup.find_all( 'div', :attrs => { 'class' => 'def_p' } )
      # debug PP.pp(results,'')
      output = Array.new
      if results[definitionN] then
        results[definitionN].p.contents.each { |s| output.push( strip_tags( s.to_s ) ) }
        m.reply "\002#{title}\002 - #{output}"
      else
        m.reply "#{query} does not have #{definitionN + 1} definitions."
      end
    else
      m.reply "#{m.params} not found."
    end

  end

  def strip_tags(html)
    html.gsub(/<.+?>/,'').
    gsub(/&amp;/,'&').
    gsub(/&quot;/,'"').
    gsub(/&lt;/,'<').
    gsub(/&gt;/,'>').
    gsub(/&ellip;/,'...').
    gsub(/&apos;/, "'").
    gsub("\n",'')
  end
end

plugin = UrbanPlugin.new
plugin.register( "urban" )