PageRenderTime 1ms CodeModel.GetById 3ms app.highlight 5ms RepoModel.GetById 1ms app.codeStats 0ms

/src/scripts/abstract.coffee

https://github.com/canistation/hubot-scripts
CoffeeScript | 55 lines | 21 code | 2 blank | 32 comment | 9 complexity | ab8cfd2602e49d79a9dbd95b41249fd0 MD5 | raw file
 1# hubot abstract <topic> - Prints a nice abstract of the given topic.
 2
 3# Copyright (c) 2011 John Tantalo
 4# 
 5# Permission is hereby granted, free of charge, to any person
 6# obtaining a copy of this software and associated documentation
 7# files (the "Software"), to deal in the Software without
 8# restriction, including without limitation the rights to use,
 9# copy, modify, merge, publish, distribute, sublicense, and/or sell
10# copies of the Software, and to permit persons to whom the
11# Software is furnished to do so, subject to the following
12# conditions:
13# 
14# The above copyright notice and this permission notice shall be
15# included in all copies or substantial portions of the Software.
16# 
17# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24# OTHER DEALINGS IN THE SOFTWARE.
25
26module.exports = (robot) ->
27  robot.respond /(abs|abstract) (.+)/i, (res) ->
28    abstract_url = "http://api.duckduckgo.com/?format=json&q=#{encodeURIComponent(res.match[2])}"
29    res.http(abstract_url)
30      .header('User-Agent', 'Hubot Abstract Script')
31      .get() (err, _, body) ->
32        return res.send "Sorry, the tubes are broken." if err
33        data = JSON.parse(body.toString("utf8"))
34        return unless data
35        topic = data.RelatedTopics[0] if data.RelatedTopics and data.RelatedTopics.length
36        if data.AbstractText
37          # hubot abs numerology
38          # Numerology is any study of the purported mystical relationship between a count or measurement and life.
39          # http://en.wikipedia.org/wiki/Numerology
40          res.send data.AbstractText
41          res.send data.AbstractURL if data.AbstractURL
42        else if topic and not /\/c\//.test(topic.FirstURL)
43          # hubot abs astronomy
44          # Astronomy is the scientific study of celestial objects.
45          # http://duckduckgo.com/Astronomy
46          res.send topic.Text
47          res.send topic.FirstURL
48        else if data.Definition
49          # hubot abs contumacious
50          # contumacious definition: stubbornly disobedient.
51          # http://merriam-webster.com/dictionary/contumacious
52          res.send data.Definition
53          res.send data.DefinitionURL if data.DefinitionURL
54        else
55          res.send "I don't know anything about that."