Skip to content

Commit

Permalink
Merge pull request github#262 from nickfloyd/master
Browse files Browse the repository at this point in the history
Allows Hubot to find an awesome Mitch Hedburg quotes
  • Loading branch information
atmos committed Jan 18, 2012
2 parents ca737b5 + 17e4891 commit e13c6cd
Showing 1 changed file with 91 additions and 0 deletions.
91 changes: 91 additions & 0 deletions src/scripts/mitch-hedburg.coffee
@@ -0,0 +1,91 @@
# Allows Hubot to find an awesome Mitch Hedburg quotes
#
# get mitch - This spits out one of the many awesome Mitch Hedburg quotes from wikiquote.org with filter
# get dirty mitch - This spits out one of the many awesome Mitch Hedburg quotes from wikiquote.org without potty mouth filter

# REQUIRED MODULES
# sudo npm install htmlparser
# sudo npm install soupselect
# sudo npm install jsdom
# sudo npm install underscore

Select = require("soupselect").select
HtmlParser = require "htmlparser"
JsDom = require "jsdom"
_ = require("underscore")

StaticQuotes = [
"A severed foot is the ultimate stocking stuffer.",
"I hope the next time I move I get a real easy phone number, something that's real easy to remember. Something like two two two two two two two. I would say \"Sweet.\" And then people would say, \"Mitch, how do I get a hold of you?\" I'd say, \"Just press two for a while and when I answer, you will know you have pressed two enough.",
"My friend asked me if I wanted a frozen banana, I said \"No, but I want a regular banana later, so ... yeah\".",
"On a traffic light green means 'go' and yellow means 'yield', but on a banana it's just the opposite. Green means 'hold on,' yellow means 'go ahead,' and red means, 'where did you get that banana ?'",
"I'm against picketing, but I don't know how to show it.",
"I think Bigfoot is blurry, that's the problem. It's not the photographer's fault. Bigfoot is blurry, and that's extra scary to me. There's a large, out-of-focus monster roaming the countryside. Run, he's fuzzy, get out of here.",
"One time, this guy handed me a picture of him, he said,\"Here's a picture of me when I was younger.\" Every picture is of you when you were younger. ",
"My fake plants died because I did not pretend to water them.",
"I walked into Target, but I missed. I think the entrance to Target should have people splattered all around. And, when I finally get in, the guy says, \"Can I help you?\" \"Just practicing.\"",
"When I was a boy, I laid in my twin-sized bed and wondered where my brother was.",
"Is a hippopotamus a hippopotamus or just a really cool opotamus?",
"If I had a dollar for every time I said that, I'd be making money in a very weird way.",
"My belt holds up my pants and my pants have belt loops that hold up the belt. What's really goin on down there? Who is the real hero?",
"I'm an ice sculptor - last night I made a cube.",
"If you have dentures, don't use artificial sweetener, cause you'll get a fake cavity.",
"I saw this dude, he was wearing a leather jacket, and at the same time he was eating a hamburger and drinking a glass of milk. I said to him \"Dude, you're a cow. The metamorphosis is complete. Don't fall asleep or I'll tip you over.\"",
"A burrito is a sleeping bag for ground beef.",
"Here's a thought for sweat shop owners: Air Conditioning. Problem solved.",
"I saw a sheet lying on the floor, it must have been a ghost that had passed out... So I kicked it.",
"The Kit-Kat candy bar has the name 'Kit-Kat' imprinted into the chocolate. That robs you of chocolate!"]

module.exports = (robot) ->

robot.respond /get( dirty)? mitch$/i, (msg) ->
msg
.http("http://en.wikiquote.org/wiki/Mitch_Hedberg")
.header("User-Agent: Mitchbot for Hubot (+https://github.com/github/hubot-scripts)")
.get() (err, res, body) ->
quotes = parse_html(body, "li")
quote = get_quote msg, quotes

get_quote = (msg, quotes) ->

pottyParm = msg.match[1].replace /^\s+|\s+$/g, "" if msg.match[1] != undefined

nodeChildren = _.flatten childern_of_type(quotes[Math.floor(Math.random() * quotes.length)])
quote = (textNode.data for textNode in nodeChildren).join ''

if pottyParm == "dirty"
msg.send quote
else
keep_it_clean msg, quote, (body, err) ->
msg.send staticquotes[Math.floor(Math.random() * staticquotes.length)] if err
#because potty word just sounds funny
msg.send body.getElementsByTagName("CleanText")[0].firstChild.nodeValue.replace /(Explicit)+/g, "potty word"

# Helpers
parse_html = (html, selector) ->
handler = new HtmlParser.DefaultHandler((() ->), ignoreWhitespace: true)
parser = new HtmlParser.Parser handler

parser.parseComplete html
Select handler.dom, selector

childern_of_type = (root) ->
return [root] if root?.type is "text"

if root?.children?.length > 0
return (childern_of_type(child) for child in root.children)

get_dom = (xml) ->
body = JsDom.jsdom(xml)
throw Error("No XML data returned.") if body.getElementsByTagName("FilterReturn")[0].childNodes.length == 0
return body

keep_it_clean = (msg, quote, cb) ->
msg.http("http://wsf.cdyne.com/ProfanityWS/Profanity.asmx/SimpleProfanityFilter")
.query(Text: quote)
.get() (err, res, body) ->
try
body = get_dom body
catch err
err = "Could not clean potty words."
cb(body, err)

0 comments on commit e13c6cd

Please sign in to comment.