summaryrefslogtreecommitdiff
path: root/data/rbot/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'data/rbot/plugins')
-rw-r--r--data/rbot/plugins/urban.rb64
1 files changed, 64 insertions, 0 deletions
diff --git a/data/rbot/plugins/urban.rb b/data/rbot/plugins/urban.rb
new file mode 100644
index 00000000..dd275e2d
--- /dev/null
+++ b/data/rbot/plugins/urban.rb
@@ -0,0 +1,64 @@
+require 'cgi'
+require 'rubyful_soup'
+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( 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" )