forked from github/hubot-scripts
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request github#262 from nickfloyd/master
Allows Hubot to find an awesome Mitch Hedburg quotes
- Loading branch information
Showing
1 changed file
with
91 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) |