Giter Site home page Giter Site logo

github / hubot-scripts Goto Github PK

View Code? Open in Web Editor NEW
3.5K 414.0 1.9K 2.49 MB

DEPRECATED, see https://github.com/github/hubot-scripts/issues/1113 for details - optional scripts for hubot, opt in via hubot-scripts.json

License: MIT License

CoffeeScript 99.35% JavaScript 0.65%
hubot-script coffeescript

hubot-scripts's Introduction

hubot-scripts

These are a collection of community scripts for hubot, a chat bot for your company.

Important: this repository is no longer accepting new scripts. Please read CONTRIBUTING.md for details.

There is a new system for distributing scripts, and adding them to your own hubot. Locate the appropriate script in the hubot-scripts organization or on npm tagged as hubot-scripts, and follow the script's documentation. In general, this will be something like:

  1. Add a line to external-scripts.json
  2. Add a line to package.json
  3. Add environment variables, depending on the script

Discovering

Check out the hubot-script-catalog for a list and description of all the available scripts.

Installing

Once you have Hubot installed, you should already have hubot-scripts installed. Check package.json to be sure. If that is the case, you update hubot-scripts.json to list any scripts from this repository you want to load. The default hubot-scripts.json looks like:

["redis-brain.coffee", "shipit.coffee"]

If you update hubot-scripts in package.json, you will automatically get updates to your scripts listed here.

Alternatively, you can copy files from this repository into your scripts directory. Note that you would not get updates from the hubot-scripts repository unless you copy them yourself.

Any third-party dependencies for scripts need the addition of your package.json otherwise a lot of errors will be thrown during the start up of your hubot. You can find a list of dependencies for a script in the documentation header at the top of the script.

Restart your robot, and you're good to go.

All the scripts in this repository are located in src/scripts.

Writing

Want to write your own Hubot script? The best way is to take a look at an existing script and see how things are set up. Hubot scripts are written in CoffeeScript, a higher-level implementation of JavaScript.

Additionally, it's extremely helpful to add TomDoc to the top of each file. (Check out an example). We'll pull out the commands from those lines and display them in the generic, robot-wide hubot help command.

Please note we're no longer including external dependencies in the package.json, so should you wish to include them please include the package name and required version in the TomDoc comments at the top of your script.

Documentation

We're now requiring all scripts in hubot-scripts to contain a documentation header so people know everything about the script.

# Description
#   <description of the scripts functionality>
#
# Dependencies:
#   "<module name>": "<module version>"
#
# Configuration:
#   LIST_OF_ENV_VARS_TO_SET
#
# Commands:
#   hubot <trigger> - <what the respond trigger does>
#   <trigger> - <what the hear trigger does>
#
# Notes:
#   <optional notes required for the script>
#
# Author:
#   <github username of the original script author>

If you have nothing to fill in for a section you should include None in that section. Empty sections which are optional should be left blank. A script will be required to fill out the documentation before being merged into the repository.

hubot-scripts's People

Contributors

ajacksified avatar alexwhitman avatar amaltson avatar apolishch avatar atmos avatar carmstrong avatar commadelimited avatar dvdsgl avatar elliotttf avatar enriquevidal avatar gregmac avatar holman avatar iangreenleaf avatar iristyle avatar ivey avatar jhubert avatar lackac avatar lucaswilric avatar maddox avatar markomanninen avatar markpasc avatar olemchls avatar rh0 avatar rrix avatar skalnik avatar sleekslush avatar spajus avatar technicalpickles avatar tombell avatar vquaiato avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hubot-scripts's Issues

Redo testing

Rework the testing in the scripts repo to be more user friendly.

sprintf dependency not detected/installed correctly

 ./bin/hubot 
Loading deploy-local scripts at /home/leto/git/hubot/scripts
Loading hubot core scripts for relative scripts at /home/leto/git/hubot/src/hubot/scripts
Hubot: the Shell.
/^Hubot:?\s*show (me )?builds/i
/^Hubot:?\s*what's playing (.*)/i
/^Hubot:?\s*Y U NO (.+)/i
/^Hubot:?\s*(I DON'?T ALWAYS .*) (BUT WHEN I DO .*)/i
/^Hubot:?\s*(.*)(O\s?RLY\??.*)/i
/^Hubot:?\s*(.*)(SUCCESS|NAILED IT.*)/i
/^Hubot:?\s*(.*) (ALL the .*)/
/^Hubot:?\s*gem whois (.*)/i

module.js:305
    throw err;
    ^
Error: Cannot find module '/home/leto/git/hubot/lib/sprintf'
    at Function._resolveFilename (module.js:326:11)
    at Function._load (module.js:271:25)
    at require (module.js:355:19)
    at Object.<anonymous> (/home/leto/git/hubot/scripts/vanity.coffee:4:13)
    at Object.<anonymous> (/home/leto/git/hubot/scripts/vanity.coffee:53:4)
    at Module._compile (module.js:411:26)
    at Object..coffee (/usr/local/lib/node_modules/coffee-script/lib/coffee-script.js:14:21)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)
    at require (module.js:355:19)

ear dropping regex possibly too greedy

Current behavior:

hubot when you hear king do echo Well I didn't vote for you.
I am now ear dropping for king. Hehe.
What was I looking for?
Well I didn't vote for you.

Expected behavior?

hubot when you hear king do echo Well I didn't vote for you.
I am now ear dropping for king. Hehe.
What was I looking for?
You come at the king you best not miss.
Well I didn't vote for you.

I played around with word boundaries but just ended up making it worse.

Running tests

Hi, I just rewrote a script, I haven't written the test yet, so I run npm install then make test and this is what I see:

coffee test/scripts/hubot_test.coffee 
coffee test/scripts/isup_test.coffee 
[Fri, 09 Dec 2011 22:04:10 GMT] INFO Loading adapter helper
[Fri, 09 Dec 2011 22:04:10 GMT] ERROR Cannot load adapter helper - Error: Cannot find module 'hubot-helper'

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
TypeError: undefined is not a function
    at CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)
    at Helper.receive (/Users/enriquevidal/Desktop/hubot-scripts/test/tests.coffee:65:14)
    at /Users/enriquevidal/Desktop/hubot-scripts/test/scripts/isup_test.coffee:30:12
    at Server.<anonymous> (/Users/enriquevidal/Desktop/hubot-scripts/test/tests.coffee:33:16)
    at Server.emit (events.js:61:17)
    at Server._startWatcher (net.js:1096:8)
    at Array.<anonymous> (net.js:1129:10)
    at EventEmitter._tickCallback (node.js:126:26)
coffee test/scripts/speak_test.coffee 
[Fri, 09 Dec 2011 22:04:10 GMT] INFO Loading adapter helper
[Fri, 09 Dec 2011 22:04:10 GMT] ERROR Cannot load adapter helper - Error: Cannot find module 'hubot-helper'

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
TypeError: undefined is not a function
    at CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)
    at Helper.receive (/Users/enriquevidal/Desktop/hubot-scripts/test/tests.coffee:65:14)
    at /Users/enriquevidal/Desktop/hubot-scripts/test/scripts/speak_test.coffee:26:19
    at Server.<anonymous> (/Users/enriquevidal/Desktop/hubot-scripts/test/tests.coffee:33:16)
    at Server.emit (events.js:61:17)
    at Server._startWatcher (net.js:1096:8)
    at Array.<anonymous> (net.js:1129:10)
    at EventEmitter._tickCallback (node.js:126:26)
coffee test/tests.coffee 
make: *** [test] Error 123

Did I miss any step?

Tell script doesn't work with all usernames

The tell script has a problem with the regex, with \w you won't take in consideration all the usernames like "name.last" because of the dot, and probably it won't work with _, - and others neither.
I'm not so good with regex so I'm writing this for some regex guru :-)

eval produces Campfire error: 400

trying to use the eval script but everything returns Campfire error: 400 in the heroku logs

hubot: eval me ruby p 'hi'
ERROR Campfire error: 400

Contributing scripts

I have a custom script I'd like to submit, just wanted to see what the etiquette is for opening pull requests?

Cannot use on Heroku anymore.

As of the latest version of hubot-scripts, I can no longer deploy hubot to heroku. Since hubot-scripts now has a dependency on wolfram 0.1.0, which requires Node.js 0.4.11. Heroku is running 0.4.7. Updating to wolfram 0.1.1 may fix this, as it only requires Node 0.4.7, but I have not tested it.

Issue with Resque.coffee

When setting my own RESQUE_WEB_URL and running the script, hubot falls over and spits out:

2012-04-11T21:22:39+00:00 app[app.1]: /app/scripts/resque.coffee:21
2012-04-11T21:22:39+00:00 app[app.1]:       return (details[group] || (details[group] = {}))[name.replace('+', '')] 
2012-04-11T21:22:39+00:00 app[app.1]:                                                             ^
2012-04-11T21:22:39+00:00 app[app.1]: TypeError: Cannot call method 'replace' of undefined
2012-04-11T21:22:39+00:00 app[app.1]:     at /app/scripts/resque.coffee:21:61
2012-04-11T21:22:39+00:00 app[app.1]:     at /app/scripts/resque.coffee:26:7
2012-04-11T21:22:39+00:00 app[app.1]:     at /app/scripts/resque.coffee:9:38

Best way to start/stop hubot

What's the best way to tell hubot to stop & start. Basically I want tell him to ignore all incoming commands for a set interval. Programmatically stopping/starting is my only hitch, any leads would be greatly appreciated.

meme_generator.coffee crashes: SyntaxError: Unexpected token ILLEGAL

Heroku log:

2011-11-11T12:29:00+00:00 app[app.1]: undefined:1
2011-11-11T12:29:00+00:00 app[app.1]: ://www.w3.org/TR
2011-11-11T12:29:00+00:00 app[app.1]: ^^
2011-11-11T12:29:00+00:00 app[app.1]: SyntaxError: Unexpected token ILLEGAL
2011-11-11T12:29:00+00:00 app[app.1]: at Object.parse (native)
2011-11-11T12:29:00+00:00 app[app.1]: at /app/node_modules/hubot-scripts/src/scripts/meme_generator.coffee:66:21
2011-11-11T12:29:00+00:00 app[app.1]: at IncomingMessage. (/app/node_modules/hubot/node_modules/scoped-http-client/lib/index.js:60:20)
2011-11-11T12:29:00+00:00 app[app.1]: at IncomingMessage.emit (events.js:81:20)
2011-11-11T12:29:00+00:00 app[app.1]: at HTTPParser.onMessageComplete (http.js:133:23)
2011-11-11T12:29:00+00:00 app[app.1]: at Socket.ondata (http.js:1213:22)
2011-11-11T12:29:00+00:00 app[app.1]: at Socket._onReadable (net.js:681:27)
2011-11-11T12:29:00+00:00 app[app.1]: at IOWatcher.onReadable as callback
2011-11-11T12:29:01+00:00 heroku[app.1]: Process exited
2011-11-11T12:29:02+00:00 heroku[app.1]: State changed from up to crashed

hubot-scripts.json

["redis-brain.coffee", "tweet.coffee", "shipit.coffee", "meme_generator.coffee"]

package.json

{
"name": "hosted-hubot",
"version": "0.1.0",
"author": "GitHub Inc.",
"keywords": "github hubot campfire bot",
"description": "A simple helpful Robot for your Company",
"licenses": [{
"type": "MIT",
"url": "http://github.com/github/hubot/raw/master/LICENSE"
}],

"repository" : {
"type" : "git",
"url" : "http://github.com/github/hubot.git"
},

"dependencies": {
"hubot": "1.1.11",
"hubot-scripts": "1.1.7",
"optparse": "1.0.3",
"xml2js": ">= 0.1.11"
}
}

MEMEGENERATOR, Y U NO WORK?

hubot-scripts 2.4.0 not found

This is what I get when I push to heroku after latest pull.

npm ERR! error installing [email protected] Error: No compatible version found: hubot@'>=2.4.0'
npm ERR! error installing [email protected] Valid install targets:
npm ERR! error installing [email protected] ["1.0.0","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9","1.1.10","1.1.11","2.0.2","2.0.4","2.0.5","2.0.6","2.0.7","2.1.0","2.1.1","2.1.2","2.1.3","2.1.4","2.2.0","2.2.1","2.3.0","2.3.2","2.3.3","2.3.4","2.3.5"]

maybe has to do with this commit?

13ef805

Issue with graphite.coffee

Running latest version of graphite with no authentication in place with the following settings and gett "Object.keys called on non-object", which means I assume its not getting what it expects back from the graphite server. Anyone else having issues?

export GRAPHITE_URL="http://ourserver"
export GRAPHITE_PORT="80"
export GRAPHITE_AUTH=""

Hubot>hubot graphite search count

[Thu Aug 16 2012 21:04:44 GMT+0000 (UTC)] ERROR Unable to call the listener: TypeError: Object.keys called on non-object
TypeError: Object.keys called on non-object
at Function.keys (native)
at extend (/opt/hubot/node_modules/scoped-http-client/lib/index.js:199:10)
at ScopedClient.headers (/opt/hubot/node_modules/scoped-http-client/lib/index.js:156:5)
at treeversal (/opt/hubot/src/scripts/graphite.coffee:61:60)
at TextListener.module.exports as callback
at TextListener.Listener.call (/opt/hubot/src/listener.coffee:19:14)
at Robot.receive (/opt/hubot/src/robot.coffee:108:33)
at Shell.Adapter.receive (/opt/hubot/src/adapter.coffee:37:25)
at Interface.Shell.run (/opt/hubot/src/adapters/shell.coffee:74:22)
at Interface.EventEmitter.emit (events.js:88:17)
[Thu Aug 16 2012 21:08:38 GMT+0000 (UTC)] ERROR TypeError: Cannot read property 'project' of undefined

Any ideas? I can hit the server URL and get back valid JSON.

google is returning 403 when I use google.coffee

When I run this:

curl http://www.google.com/search?q=hello

Google is now spitting back this.

<!DOCTYPE html><html lang=en><meta charset=utf-8><title>Error 403 (Forbidden)!!1</title><style>*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKsAAADVCAMAAAAfHvCaAAAAGFBMVEVYn%2BH%2F%2F%2F%2Bex%2B3U5vd7s%2Bfq8%2Fs0itq72PMLUPvtAAASvklEQVR4AbXBC0JqCQxEwT5Jd7L%2FHc8FdR4g%2BEGtEr8u%2FBHxu7otdzd%2FQPyqlmRp1Pw%2B8aukDfRa1fw28ZtWy4sa89vEb7LCi0zx28RvqgkvouW3id%2FU8pbtWmv5beJXRWNrRmp%2BnfhlHXZm%2BQPi95Vk%2FoD4fZbMHxC%2FryTzB8Tva435A%2BL3rcb8AfH7VjJ%2FQPy%2BHYk%2FIH5facwfEL8iaZcrnKyn%2BAPi57K2VL2WF1hJ%2FAHxQ2tJrg6HteXVjPkD4ge6V3J1%2BF97zhx%2BnXhWb8nacKXlnYPErxNPyfqw4ZYKVuUZdfhd4hmxunY73NICgfWMOvwm8ZQ1pMvlDZdaCic98kjV4beIp8ScpLvsSvhflzqQmqVLB281v0E8pc2bdNne8EayNTPNSbt02PBj4intcKltb%2FNibY%2BLf9aSO%2FyMeMo6XMva3g0vwrWsxvyMeEoc3knZ2g53ZaXa8DzxlHa4J23Jae5aycXTxFPa4WRdXAtdsivckZXG4TniKWtOSlre6y7LG651Wxq5OzxDPGUVIKNwX6ekCv%2B0ddglVPMM8ZQ10FJ4LGVvOEuXRl7OqnmGeEor4Ck%2BtnI1ZEvjDa%2FcPEM8ZQVY4RO9VqUlN%2F84PEM8JQ50cUgXH2mrKlyq5RniOQ4vVjPLHdu86OKGi2eIr%2BgNV6JwljmYO6zlbJsbWp4hPtVrjYpLLV7UHIp7rOVkixtaniE%2BU5I2Nc2FKJytZhTuiac5rLnh4hniEzUbDjXhn3g5W0nNA1aAKm7YPEN8bMecrZYLWl70hkcyBay5YfMM8aHI4aR7xAUVHyirOdhAmRsqniE%2BtOKsRjIXtDzmmRGHVmDFDRfPEB%2BJzMmO01xScdYnVRs6vPHMFG9W4ZrMM8RHouWw43DNhlDWiSVZY3nDoWYc3qzDNZlniPe6w4uoOFjcKhPXuJNWyG6VqjSuhm7%2BiZorUfEM8U5J8nKyMw0tcZLwPxdRtTlUcUgVdGlml0uZ4pqKZ4hr5VUnpSXdUgVa4hA5vHERV1Tp9XhdJTWHksYd%2Ftdarql4hrjQiaPiYLclNSeebVYz5o0W7Ghsa9blmlFtx01rxP8yy5XIPEP8L1W7bjWHlbzhRTwjzXrCK1f3qqSEyBysLVtayKp40yqurcITxJtUgavVHNob%2FinZTWt5VVvWVKvJSttQCkRjb%2FA4vLK5thOeIN6sm9ai5cTFhYRDy%2FyTGpdU0hxkaZvWUrZluTmLims14QniVbywClqgeouT9IZXNWoupGzNqHa3y5LGVYBnipbCSVxcq1meIN54oRXsbEk26S3NmBcZ807K3gon2ZLcxF5tPMVJprlWE54g3nihtbRHm7WjkbxTHSCWwj1r2U4HSMmdQEmWwonNtah4gnhjA9ZSaohmpnpDjWRptDwS25LcQGsc2Bla5sTFtZV4gnixpWmIVWpgRuVwsiV5q7kv0JJcNVIFapydUrHTQKa5IfMEcRKrurSQ0qhsmVR4kea%2B7pIr9NqSrRltWlaxomUgVVyLxBPEYeUGygtszew2KfOBclVpVN2ctCXNidZaaKWmONhc6rKaJwi6xuGkRmWpAkRa7outF9XN%2F7LlmbJmpiCyvBxk%2FtnSqHmGWGk5i2ZcaWBLau5KKHt3Ce%2FsaLMz46VG4cTFm%2FaMOzxFUYWztjzhkNI43JPyYvPAegPxzFRpOYmWF1WywrPUag5xjRapqqxxubijvYFVaC%2Fv7YSDpzxjzlbhpKXxhqcpWshqtECk0Yys6m5utZdD1LCuCifhfyVOapqsxhyiQMmSm58QNdZheZGV5FqwueXiZBUga28DvRte1NQCpQVSUkFqPbIr%2FIxg7arwJqqEg6e5Vuas1Zytyw1ka5uT9ajKI87WbksaLT8mbkXFyWqaa2rOVuFVStUNpGrDoSTPmDfWdlby8kPiHQtoa0vLpXU4WzX%2FS5W2gWxtOHQ24U3CSUmu8BPinR2XVSFyuNAOZ9Fyae1qDu2qcF8suRKeJt7pcW1zaE9xwcVZq7nWtpeTrQ0PrEeq8CTxnsWrlbThELra5ixqbsXWNoeq6nBft6TlOeK9VnG2lfb4TKOOlpOouKPsWg4pb3Nf1uMGusP3iDtKDaTcgMuWvL1FmZOouCtlbwJs1Yb7SuN2Nd8k7mgvXV4OKWALiGkVJ14eyPqQQG9Vc0dWGnn5LnFPTW1z1gW0OdSyag5aHsvaroVs1YZL2dKMt1nzXeKulas52QLanGy3xq4a87Eu2yHZ2uZNWzPjDbDmu8R9a8m7iQNscbKyy%2BWS%2BUzWtqp7qzpA1jPj8KKK7xIPZG2NVWTTSbpKbs5cfEF6y64qV6ctqcKbdvgm8VhSlnWwJbuaV3LzRb11onFt%2BKcVvkl8one7u3bD%2FzJuXnRt%2BFTXVHOWqubQ4rvEEyI1L1Z2h8%2B0eRHLKiBqvkk8IePmxZq1lk%2B0w0nJUHKIlm8ST8ioeVEFtFwbPhA3h8gcdpZV803iCRkVL7Y42bK2w0NlDqXlpJRV803iGZYrnFRxlqwO3eEuN4dSOGlVme8Sz7C37QZqeZPekl0b3nMBreKsp1bNN4lnWIEtF1Vc6i1bVZtwxQX0NC9UrfBN4hk7zaHLNrey1kgVLljATnO2rmj5JvEMqzlrF%2B%2BFXitcsAArnFkdLd8knrFqPmFzyQq0xUm0tJZvEs8oAR0eix0u1ARSqg70NNHyTeIZUqgZ85gdLlgcMjOSRlBqvkk8wwOSp3moJlyoCYfeKkmBVvgm8YyaUJJ5zOJSTXMWSgus%2BC7xjJpA%2BMiquVATXiUcSuGbxDNqmk%2BUxtW82WmurMI3iWd4wifaHo1rNxx2miul8E3iGTXhc4nH0lQ1O80VK3yTeEYNX5SspbEnXFmFbxLPqGm%2BrsvWFFdK4ZvEM2rCt6RmzCWL7xLP2Anfs2M3Fyy%2BSzyjpvmqDoed5YrFd4ln7DRftHI19BRXSuGbxDN6wtdEqjF4lisS3yWeEYUvWlkDNeZKTfgm8ZFu7mqFr%2FKMYae4lFH4JvGBVLgraghf09uQMZdabr5JfKC2q1zV3IgarOLLPMWllptvEo%2B1e7dkq5ZrLkip%2BKqa4lLk5ZvEY15INay9XIqXVGS%2BqsdcirzclYVa7hAPbQFVnJSaC9HCapavqjGXIjXvbNmSxi7eE4%2BsA21OumwuSQUJX1ZjLsVabqR6t7tUlrThhnjEC%2FFy6AKbCy45zdftmEutKm5UcSgHspY7XBEPVAFVHLoCUXPFkr3hi2wutba44QDr5iyeqQ3%2FiAccqOLQDhAV17pG0jZfUuZS5OJaGYiWF%2B2ypOV%2F4q5UQZtDu4G2xK10aeTlC1bhUslciQpYh7PSQtau8ErcVYZ4gXYDcUXLe1lrvBU%2B0VoutFRcWQWo4qwdTlYSr8Q9caDMwc3BDgl3xZpRb%2FORnuVCJHNlla2oOYmLQ8q7Ll6Ie6pgDaQKSCl8IF3WqAgPrbgU2VxpV1kje2EdoOWGlsOJuKMd1g14OdjNp1YjNY%2B0m0s15kYgJVlaFxBVOETuAOK9eEELrDmUli%2Fo8oy94S4Xl2LzQGukEFU46RptQLy3BWWgHSBTvEp32eGRtjTjSriQBKLlShUPrSRcnK2qtIB4Zw3tQNRAbF5FB0vhoS57JFXzZmUtuLiy5gNlTTixlkgB8Y4byhAX0HJ4Y%2FcmWkjz0NrSaMNJ5EiNi3%2FSpPlIayqA3UBcIG5tQTuwBcQOJx3AsrSzxHJ4bKs9U5xoqWnK4U17%2BUzPFLQ4iQ3iRtxQC3gBK5xZJjOutcaSpeYjsUZqKFmGOLxIaflU1jI2ZzuLuLGuLe2yBlrLC1tdWg7ZmWal8KHeGtXG0gLLSdZyha%2BoKYdDl7WIGxpbI7lSicyLqFkH2rVZF%2BwUnymNXNu8WUkVLqSaB6IpIGWXF3Ft1UC6rRq3mhc7TRXgLS2lrKb5VEoz6nCSrtE2V6p4aMeQ8tJaxLU4nGU9o%2BXVTrMF%2BLBgjYqvSNkjL%2BDxhmut5tDb3CF1uwJoEdday6vMTHjVs7GA3g3QU8tXxZJc6Q23yhxWckPCtZW1nLgQ12KFF5Ed3pQ0U7yKp%2Fi6YM%2FI4dZOA3FRRdvhSmaWMxtxI3JzVlP8k9qsVFWdbVvTfENCjcytUoBW46XscE3DizLi1o6KQ4%2FDlZRsWSfBCt%2BSdHGrzGHFOtjFtUgNNJQR78Qjr%2BVwzV4I65SazPJzrQbKq6bl5kapU7bbRryXLo3c3LATYIfMEs3yc1bA44bScqumvJ21jLgrhHdSktNWkONR%2BLmULMnbpQm3pOWkZxHf0R7NKKykDr9iq3ptuexOuJQRZ5lCfE96K5Ct5iNpe118WQKxVeGCxnYDmUL8iUjb2%2BXmexIu9Di9XtgpxJ9wcehuOzwt1gJx4ynEM9K9tS5X7fLempP2dmnDczwjTlLYi%2FiCnHXSe9LWic9k3qvlRTltLU%2Bp2lE1sKUG8bm2DiNpNBpJu5vwwuEdLa%2FWy6p4JL27Dg%2B0pUBsQHxu67C1Vb2dpLlU5h3bG87aS0vNXWtJtip0bbjDhqgB8TkvH1g115qttnfDoW0oNe%2B1Rs0hlqVRc8cSmYP4XBUfUXHNlQ5tqzkpNaXmHVV4lVpq1NxjhYP43JqP2FwracOh7OZQDuXmRmu5sjMO75SWE%2FE5F4%2F09s5wI5abQ0rFoVxZNTes7e7wvy053NpwJj7n4kVCDt29teWypJHFOy0VJ6sN0CrK4dpakmv5pxQeEZ8rQ%2B9alnU2knyo2k64Ix4vh5I5sVNarqW3u8z%2F4mkeEZ8LrCxXtbfWu9t8qqQK0DKHVtEubrWm%2BZ9VPCS%2BJN1828oB4gqwalrFtUjNP3bzkPg7sdXAyhyssF4upWb5Z8c8Jv5QWmpgVRxUsGoulMw%2FPQqPiZ%2Fp8JGVOLQWKAW6%2BCcyF2qGD4gfibe2ead5lXEDpQAu0rv8r2WgtZxl1Twm%2Ftls1HxHK7HDjZV51VIgWmBlSeMKr%2BxseZYXq%2BUx8aY0MxrvVnUC4XNxgYtrJY15taMmNlAztd0lhxfW6MChC1rFY%2BLVjlwzKutVdfhE7xjKXEiX3CuHFzWG0lLycogUXnTtxuaws6DiMfFK09kZQ9K1VSvJ3oRHslIFWuGftdzQUoWzlYONinBILRdaC8TTYPO%2F3nBFnKxLG2um%2BKfXOrg6vBdLrvJSCm9SJpy0RtucrMRq1Zy1woUy0B4HbN60ex0uiEN0KLk1xZXs2paKW9FIqrJrzP%2Fs5k17tJz0GE%2FxohwulGElOUTmTRWl5oI4lKRRsTPhVpIdc6sl10IsFW9WXNpROPH0TkGAVnFpx5a63WSKN5HVXBKwc1btEffsNO8kvBObS5lZTnaUMXFYqbnUltwg75h%2FusMVATXleWW7qk1Xb8KLVfiKlsIlj9Sc1FhFtjITboSTlSp8QMCO5JU11bb1ZlQdIHL4iprmktWROclqGlaWmvsSPiRAIy3lcAhk05vsWgfbU3xFVFyRWTUvSqqa2S7zHEFmRikt7yS18kxxFj6yY67UbNu86U6qIApPEUSasZb7Ek0DqXh5LHa4lDFWc6kd4uUpgsiaKR6pKQ61uHmsZrmyk1ZxpQ1oeYoAzaG4ry1zsuXisVJxpeQdc60N2DxFgGckc1ePixdpHkjVjrnS0kpc6u5SwMtTBKxkybUJN3bUfCaulsMVTVvNP%2BmyNQVe7tjlE%2BJFb1mSLVfV9jaHHS2fiao15sqOd4pL29ArbxXvldV8TPwv6XVV6YXtGTefiiqaMRei2TFXKpzUONxKFWo%2BJt5J0ltlzQxfsCqimSpv86KmrHApBbXA2s2NuKPwMfFQvOELWgvsnEjVQMYtc2UXqjm0xI0yq%2FAx8T0JtyJz8DiekWpjxWoupRqqOamp5VJPsXJt9256wz3iW8oOt1xNaWah3NZJZK7UAg6HLo%2B5tFPgke2SreUe8R1rO9xayTpALFaa2Z3mUhyo4qQ6I67MbLlsyyfFPeI71m7ey0orw2pL256WuFILVHOI41mu1IyK3u0q28094nvCXQHLtqyF9Gq5tA7E4bAViRsrNW%2FCXeK3lDTVVoBI4ZIDVHFYpbTcyIbPiF%2FTSbPT3SUtl6qAuDl4W8UzxC%2Fz6CRciALUcijT4inil%2FV2p4pLtUDcwCol8xTxF8KlKg5VQGtb4jniz7UbWAcox%2BJJ4s%2B5OLiAVnuKJ4m%2FtuawBURbszxL%2FLF4OXgh9s7yNPHHqjisgVLLPE%2F8rXYD7UCrVsXzxN%2Bq4uAGrFj8gPhTXRzKwGprmh8Qf2rlot2AvSp%2BQvyl1nikAlprh58Qf0lqolGBarX8iPhLZWBVqnVsfkb8pTaHcru61PyM%2BEtrDq2UW8sPib%2FUChBvbIcfEn%2FKxWGrpeWnxJ9qVYDyVPgp8bfa2qRmmh8Tf21lq5qfE38uveE3%2FAdr385%2FSVd%2FMAAAAABJRU5ErkJggg%3D%3D) 100% 5px no-repeat;margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{padding-right:205px}p{margin:22px 0 0;overflow:hidden}ins,#g{text-decoration:none}ins{color:#777}a img{border:0}#g{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAA3CAMAAADZn0ObAAABgFBMVEX%2F%2F%2F%2Fy1pHuLjfMm2W4yfA1TrPukgZDats3V8fwTEypjWy8u7oPsSWVsOoBdwwClhI%2FZdlasGjpOUOVlJjx0c20CyZpea36pAdIdebyu7COlqpYaql2hLH40Gn59vayuMlZiOunpqjYGy9wiNLd5PRqlOzzcmz%2Fwi4FpRrqsDisbm7O2O%2FKycrGfHmdo7CFmdPs7Ozz8%2FPIDSvcFC%2BTR0vCw8Xj5OTc3Nynvu7l6%2FfVjyw7Xc%2FSMT%2FZbgbT09NDbuHKz9BKf1Hr5ubiHTLt8vz%2Btxj1%2BOrT1txYedhLcNfwjYjTES6yq6r27Oqnq7NJZsiykpDNEiyxUVOTptiys7LNs6%2FhegO3p5L46MRveZiXcHBFXbY5dkLUysj0Pj9OfOjRS1JVZZzMrZGoXWCzKjn%2BrgpcdsflfIKh26frpKHJGzIqxDe4cC2AoOnOXl%2FYaWx204D4XVWsPEjRXwXqoRqYFSnN5dBhfMwZjipRaLvUmpk3x0SualZBXcJIV5A9nk5h34NHAAAJe0lEQVRo3u1YC1fa2BYGBBJA2lSeRjzyUKmQQgJNAoYhlJciiKJYHx2hYm2rre2140zHmem9f%2F3uE16JOpVZpcuuu%2B5eLpeSsPOdb3%2Fn2%2FtEp%2Ft%2FdAOV3%2F4L4tGj39DI3ynOp%2BznEPaUcZ77LqjKb%2F989%2Be7d5OPreKIDygaz9teWSYIgpJlb9u%2FnUqj8cP6jX87OTn58Pd6dqTkabvfS6z66FgsEKN9rymi4l31x6NjB1YWeODqwTNbfpTURgDlpgNNPrciilmGj7kpQEZQIaE4bmDcJIbFsyPUD6iq%2BGK2rMAhWARCnJCNbVAUJZlCwrgJ44Cth8%2F4u6U1f%2B4nrhwBRs0rYvkr0mQ6CqyMvY5KEe%2BGVTz3y18czetbgxM3TEcO29jZQiD5EYqIoILSfl3UPB7%2FEzW5AdX4nWtyJLZSfi81E8jdvM04Z%2BOF7%2BBdI0l%2BfsFPbDhuuwsJYn78zgVsvRuBLVzCmYB42%2FPRjQ%2B%2FFSUatYhpv18m923sSDmd02uLb9ZOnTdSoj19GMesfq94DXoxajSmcNjt9nP7vALroaaI65B1cXFtWl2a1IKX%2BuIYpROg6YtWy2IxtOD3mra6e7Ph8FJnYqlUAmR76ksoeu5vt%2F0QbS9BUXGoyjW21tcsEDiz5XS4XOiD1FXgbmUj52Lrw2ataatZpyAs00P3L8%2BGS52mzcbYdjGwkp4bAIv65VA8vkrIXmgibndgDlyoxxbXS3thmKjVms0nsNypjyzq17AN0mreXUOg6knNlhUFYWXnpWFqqvAH1xfgbHhpN8CLLMsKzNJJqXTSYfvW027XAe8cTcEA8Dlg40Xc%2FcHkB7CmLwyb8F3I2pkyGApP2P5yvLLkvltagOqDg1esFbGHUwVDIbnDDriy1rPdf7js5UnpxNNBvd0k082sAHDj0Mgo3wrbk%2FwAlvOiFQkcYkUgdsKQDJ71koJpEZL7rt0KFbQYHAC%2B%2Bzjuj0KhkMxklW%2FthcPLjqHrdU5OTjyXilah%2FbsDue5KQhRBSXPdZw7ZWsdpe%2BJHzmDD5Yp0LcHexmzd5W1o7cKwpTIR9iXAqkbymKxw%2BNLazA%2BHzyWAZe4Ar8UFv%2BzuXUE5SqYkd7bL1gAW1ODlIO1p8sz160GuD4ugru6C5bywGI5VlUanAKtxxkBqPYbFDNlGsxjWMnxi9Lep%2FX4dUFumKLKbogsL%2FkSLF4bjZrey05ag6%2BmBw9Zjy%2BuVqas7tAVktYIHTHn4SR6zldgUMFklszWn8oQ9DMvcyWOfptxM%2F4odpiQyhnc8etyHBcpq%2FYWfjU5bhUwk0MSTVVdbMCZLG%2FWvw1oHsgCWeuyxFJIJ1%2FEKAmWVLq3q4QctAaznVlG30Maw%2BjwaoYgmWtBoaxrybvHrzkVD4cNms8mIfX%2FQGTFbEv1133KCiQYjakp0bzCspwyCGp6YrZpTzCyGtZxDAIvYGMgjKlMkGRCHbAGsNUvLsLVrmZqaAKIYYWh3unlZhqK7v%2B7yzlbLEPxLM2NMK7B4Ftzh0mxVf72sx7DeM9w5WChVFwYPosgjxbaHkl%2BDvJkafzhnUxHVlyKwtTF3rYqoiFuY3b5tj8ejnLNlMAS3NC7iTCYbrqc2Vh8uAVu8SnY6DOuX9zkuRcjYq1CfLcnUbb0qtiBvdXdFEPLsdVq2KVmpItIegwh8wvD7VwnpNZN3GqYMyVeafeEsJF2YLQXWshoW2jsxm3%2BCXZCGnkMR%2FQWnMFnXDOLUAMuN3DqVRzEsqsJwmhOjfTtG03SlQpAmmmed0BaCZ7uCBlbV5TrguT3oNR5zTY14D2r4C9QVzcHSiNcrSvNkocU5ugsbsqXkfZm7zcu5z7gvSNoDDhKyh7ksT0gSaXKs4H1XKFQj6pnMmay6foXBQ3FPj1V9Se8x%2F%2FQei3t9W5IkahUAoKifUgZwFVsAcR23weDmrTaQkzAuStutOY5D3DxBwdmnBiSBexaCGX5dJXmseGxDeo%2Fn0rOsJnvWA2QpxLD1K1KiZP%2F5gp%2BC415v5ejxwx5baDEDiTPMbVUshiQMrHKTyzQBZJnw7lnPBIPBs01VFd9gsvCK2UsPdk%2FVpRLsQ4fSLxGbi%2FncvpAfj%2BW2QYOa7MMCKeD1frjtcIXmK11cN6SXhu7aZQvtVBvVaoYf3IEymCxcOqQ3m82eS35gOnuYrL7QubzI8CFvBY90%2FRvQ48F0yj2B5RYKH2%2FFlfsCVMPGuz5HpCu4iIrzlJ80Go3qh4GEFmEbOhjl2cXOcwC21L9ULsE2rA21hrhiCDbVl9iQz2GrRvlMo5pMBl86UX8Czg%2BFZCNJDEze1tpHmiB7RYRaRRKJBOBSJnUEJXw6OCyxHTMAW4LMCI85gCqmFcS5TBDgFP0hH7T14MHPTcVT0OGrRqKRTBY%2BnjoF5%2FSbzI4KAj7XY2BESGOraShhjy1Y1%2BYrVyKRWXM6naeZ6quDAN8f58vpnWXAdbKk1%2BvDnucTjmZWS3u0QmAb3O7l%2Fs8DJX5%2F9hZr4HDL5Uo0EkkgrZo429G8cOCyPpMJkFHE6rZxXllWMWqvAFemf%2FfmfMTyB5%2FOgLFktfoJmj0zfPmF2OyudRkUZjYvd3abvPZwl45GV7F4ZSqkMCE8evazEo%2B68hI3P7m68eo4YBM5rVHZ3BiYRMKyVldDqxUJCni0f%2BQIMOzgncRO5HhraysSqfGMoCEE5W2d5YnliYldGNdVZUinFioUQW68UGpBdM2RzfI2HoLpQkACv3n8FCLiqDE3tM%2BKPO1%2B8UIhjXxxdeWj6Rr09UNB9RROELM5hsmKLHf962VWWFkRRSFfVo0B522KCtGxer1Ov8DileJKq%2BZYTvnp38mxYpaBEIXbjvasyMRot3vmCE5ONA2TBhwOytcP1kiJrxyZ1e82CMrnCEAeURB5NwmWT%2F7NvIkQ%2BPffnicQmxdEMZuFVcNxBX3byR5QSfv4nMbhLYpEH%2BAifeI3vCYYx%2FuQ6IIXUDGDSqE8dBPTDMP9YzTjjDToinSoa4aEDRDtSC87vl8Y2xXCRGtKhuLA1j3DssPJRYppHcxOmvbvGxb4OqllSxeH4Y1B9woriseSDV4Nolgh92Pi%2FcLSKZPpa%2FWwFCdnHDx3v6h07GdoOFJlLq1TbEs3HyJn6PG%2FTf%2FH9ie6cY%2BViJA9lUqdQ7f2Be4fFfap2IzSYLG7k1c%2BGDp%2BAFTKJF%2FzufdnZtz7PrrevDZ03GPAaJDjbRA8dGsW6X6cgNmAhSEG%2FUiY%2Fsfiv02O7iVu1LunAAAAAElFTkSuQmCC);display:block;height:55px;margin:0 0 -7px;width:150px}* > #g{margin-left:-2px}#g img{visibility:hidden}* html #g img{visibility:visible}*+html #g img{visibility:visible}</style><a href=//www.google.com/ id=g><img src=//www.google.com/images/logo_sm.gif alt=Google></a><p><b>403.</b> <ins>That’s an error.</ins><p>Your client does not have permission to get URL <code>/search?q=hello</code> from this server.  (Client IP address: REDACTED)<br><br>
Please see Google's Terms of Service posted at http://www.google.com/terms_of_service.html
<BR><BR><P>If you believe that you have received this response in error, please <A HREF="http://www.google.com/support/bin/request.py?contact_type=user&hl=en">report</A> your problem. However, please make sure to take a look at our Terms of Service (http://www.google.com/terms_of_service.html). In your email, please send us the <b>entire</b> code displayed below.  Please also send us any information you may know about how you are performing your Google searches-- for example, "I'm using the Opera browser on Linux to do searches from home.  My Internet access is through a dial-up account I have with the FooCorp ISP." or "I'm using the Konqueror browser on Linux to search from my job at myFoo.com.  My machine's IP address is 10.20.30.40, but all of myFoo's web traffic goes through some kind of proxy server whose IP address is 10.11.12.13."  (If you don't know any information like this, that's OK.  But this kind of information can help us track down problems, so please tell us what you can.)</P><P>We will use all this information to diagnose the problem, and we'll hopefully have you back up and searching with Google again quickly!</P>
<P>Please note that although we read all the email we receive, we are not always able to send a personal response to each and every email.  So don't despair if you don't hear back from us!</P>
<P>Also note that if you do not send us the <b>entire</b> code below, <i>we will not be able to help you</i>.</P><P>Best wishes,<BR>The Google Team</BR></P><BLOCKQUOTE>/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/<BR>
xAcdQP8c0YrXu9jN-Y7FnKrEf8E93Fd--BVJjqD5xefXwBq40<BR>
34GkJki3vp-kzRGjrBTseg6uGBypibuTNGSeEZ-HfUVYsfssQ<BR>
dNbhG8ke-uvHLURLtwbZRFhpjbF9aGXTDh3wCSAeVS_gukfCN<BR>
cMVfz7ifG9k76WocNwn7ghbe2ptjQ6LDnGTi0cbXXBYPw4_QH<BR>
3GNukw48uODJsvsSgQm1mw1l2_vtP0BZ9z2YJrbmZYWVPW_vt<BR>
6Q2I1OZ_nPJ_90Alv8L09PYuLe2BUcM2NTuEL2bIkZM08qoU4<BR>
r9HdPAwYFcz2njqdNb3yFxLChKID0rZJi0Sct2mRdOavXl39V<BR>
oCyqxKqc82kZ8agHOtp0HQI0n2s2rS47KeCGB7D31cUekmlda<BR>
QMSryFqRiAlIzS7ebsG-2Gj6vEzoO6-U1C9ksj8EGc_g_S_td<BR>
dP-6mC1BRySZl5EECnVaAsqsSqnPPqq5qCu0z8w9GyUeiB4P5<BR>
BUswXO0EJ6dOHL6NknoBWOYN2-IFT_7cvAbxV6ofoYL_y5Wih<BR>
MeZpDBPnpRyhjxjAefxNdzA5h9SKtlCH0gOL6r6rowD_jmexf<BR>
J2YO8SdeajoX96EM20IgOv4wGYBTvkWAsnYGCzL0qEEzTjmwS<BR>
1TnY6ZcVwQMpQBx2DNL_y-k1LMXqsF6fA4qbByQm9D2Pu2CZT<BR>
30rZHnxspjB7ZDP1oq12CPB3tlbcb6P4eBN5esPTeA8WivgtN<BR>
EAHp1No_3PCfWBFh-0D_gCBkikR6Pw2nyVAc5BhmGyIeVLMy8<BR>
AsaQBcDzElvS1s3VQiW-RFn0jE2Rt_gxcPPRMoO4iTRB506oj<BR>
GJHguCh3jfEBQ5g-fMC2czCZ2nwQXG_CH4QIqf3FnHOkNF_jv<BR>
K7Eak9Tfcw-3MIiMFcoy9thC6AkB3Ro3qaFTIVLlsm-4QSSOL<BR>
_6Yk2WgEtk5m0<BR>
+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+<BR></BLOCKQUOTE>

I'm seeing no response from my hubot, either. Looks like the only option would be to use the Google Search API, which would require folks sign up for a key.

Redis Storage key question

I have a question about how Redis stores data using the redis-brain script by @mojombo. I've been trying to edit some of the entries in Redis using phpRedisAdmin and what I notice is that redis-brain stores all of the values in what appears to be a single key/value pair.

redis-admin

It makes it challenging to try to use redis-cli to get and set values, and I'm just curious if I've got this seutp wrong, or this is by design.

jsdom import not working?

I have hubot installed on an ubuntu box and it works OK, but trying to get airbrake.coffee running from this repo I get "Cannot find module 'jsdom'"

I did "npm install jsdom" within the hubot directory to no avail.

Wolfram script uses msg.reply

the Wolfram script uses msg.reply, but does not specify a user, so it returns 'undefined' in the beginning of every result.

New Release

When can we expect a new version? There are many good scripts that are not in a released version yet, and I cannot find an easy way of upgrading the package on a Heroku install without a new release.

newrelic.coffee issue with xml2js

2012-05-24T20:57:07+00:00 app[web.1]: [Thu, 24 May 2012 20:57:07 GMT] INFO Loading scripts from /app/scripts
2012-05-24T20:57:07+00:00 app[web.1]: [Thu, 24 May 2012 20:57:07 GMT] INFO Loading scripts from /app/src/scripts
2012-05-24T20:57:07+00:00 app[web.1]: [Thu, 24 May 2012 20:57:07 GMT] INFO Loading hubot-scripts from /app/node_modules/hubot-scripts/src/scripts
2012-05-24T20:57:08+00:00 heroku[web.1]: State changed from starting to up
2012-05-24T20:57:09+00:00 app[web.1]: [Thu, 24 May 2012 20:57:09 GMT] INFO Successfully connected to Redis
2012-05-24T20:57:47+00:00 app[web.1]:
2012-05-24T20:57:47+00:00 app[web.1]: /app/node_modules/xml2js/lib/xml2js.js:216
2012-05-24T20:57:47+00:00 app[web.1]: ^
2012-05-24T20:57:47+00:00 app[web.1]: throw ex;
2012-05-24T20:57:47+00:00 app[web.1]: at /app/scripts/newrelic.coffee:18:35
2012-05-24T20:57:47+00:00 app[web.1]: TypeError: Cannot read property 'length' of undefined
2012-05-24T20:57:47+00:00 app[web.1]: at Parser. (/app/node_modules/xml2js/lib/xml2js.js:199:18)
2012-05-24T20:57:47+00:00 app[web.1]: at Parser.emit (events.js:64:17)
2012-05-24T20:57:47+00:00 app[web.1]: at Object.onclosetag (/app/node_modules/xml2js/lib/xml2js.js:183:24)
2012-05-24T20:57:47+00:00 app[web.1]: at emit (/app/node_modules/xml2js/node_modules/sax/lib/sax.js:322:32)
2012-05-24T20:57:47+00:00 app[web.1]: at emitNode (/app/node_modules/xml2js/node_modules/sax/lib/sax.js:327:3)
2012-05-24T20:57:47+00:00 app[web.1]: at closeTag (/app/node_modules/xml2js/node_modules/sax/lib/sax.js:540:5)
2012-05-24T20:57:47+00:00 app[web.1]: at Object.write (/app/node_modules/xml2js/node_modules/sax/lib/sax.js:949:29)
2012-05-24T20:57:47+00:00 app[web.1]: at Parser. (/app/node_modules/xml2js/lib/xml2js.js:211:31)
2012-05-24T20:57:47+00:00 app[web.1]: at Parser.parseString (/app/node_modules/xml2js/lib/xml2js.js:6:61)
2012-05-24T20:57:48+00:00 heroku[web.1]: Process exited with status 1
2012-05-24T20:57:48+00:00 heroku[web.1]: State changed from up to crashed

walmart.coffee having problems due to redirects

Does anyone know how to make the scoped http client follow redirects? It appears the redirects are just adding a trailing slash to the urls, so that might be the quicker fix.

Here is a snippet from logging the response object when there's a problem:

  headers:    
   { 
     date: 'Fri, 04 May 2012 13:39:48 GMT',
     server: 'Apache/2.2.3 (CentOS)',
     'x-powered-by': 'PHP/5.3.3',
     vary: 'Cookie',
     'x-pingback': 'http://www.peopleofwalmart.com/xmlrpc.php',
     location: 'http://www.peopleofwalmart.com/photos/random-photos/page/627/',
     connection: 'close',
     'transfer-encoding': 'chunked',
     'content-type': 'text/html; charset=UTF-8' 
  },
  trailers: {},
  readable: false,
  url: '',
  method: null,
  statusCode: 301,

animal.coffee crash

I get the following when trying to use this script:


2011-12-09T01:33:18+00:00 app[app.1]: /random?018dfae8
2011-12-09T01:33:21+00:00 app[app.1]: 
2011-12-09T01:33:21+00:00 app[app.1]: node.js:134
2011-12-09T01:33:21+00:00 app[app.1]:         throw e; // process.nextTick error, or 'error' event on first tick
2011-12-09T01:33:21+00:00 app[app.1]:         ^
2011-12-09T01:33:21+00:00 app[app.1]: Error: ECONNREFUSED, Connection refused
2011-12-09T01:33:21+00:00 app[app.1]:     at Socket._onConnect (net.js:599:18)
2011-12-09T01:33:21+00:00 app[app.1]:     at IOWatcher.onWritable [as callback] (net.js:186:12)
2011-12-09T01:33:21+00:00 heroku[app.1]: Process exited
2011-12-09T01:33:22+00:00 heroku[app.1]: State changed from up to crashed

Octospy doesn't capture input

Hi,

I was trying octospy script with IRC adapter but I didn't get it to work.
I also had a try with the shell adapter and there too, I didn't succeed.

Looking at the script I noticed that every "robot.respond" regexp are missing the trailing "i", indeed adding the "i" option I got it to respond.

Am I doing something wrong or can this be fixed?

Thanks in advance

store-messages-couchdb.coffee doesn't log bot messages

I'm having hubot log my channel with the store-messages-couchdb script and the very cool pangratz/irc-log-viewer but messages from the bot itself don't show up in the log. Is there a way to hook a function to the bot's output?

Google.coffee broken

the google.coffee script returns both the first link, and the "Google has zero..." message for queries that have a link to return.

JENKINS script SyntaxError: Unexpected token <

Hi!, I'm getting this error when trying to use the jenkins script.

SyntaxError: Unexpected token <

With every jenkins command i tryied to call, the same error is issued. Any idea?

I'm using hubot 2.3.2

thanks

GitHub Issues Script

I can't seem to get this working (on Heroku). I have checked the config and I've put the oauth code (assuming this is the GitHub API key?) and my username.

If I run 'hubot show me issues for dannymcc/BaseApp2' I get no response. I have also tried 'hubot show me issues for github/hubot-scripts'.

The heroku logs don't change at all, as if it's not picking up the phrase at all.

consistent argument names for scripts

As we just got searchable help, github/hobot@acdfaefb41f, it would be great if scripts could use consistent argument names in their tomdoc. This allows for an easy away to pull up commands by common functionality. Some common arguments I've seen already are: img, word, num, query, location, url. Unfortunately, everyone uses different names for them and so searching for common functionality isn't possible.

Any objection if I submit a pull request to make them consistent? If not, then we should probably also think about handling new scripts. I can volunteer to make them consistent, we can document known argument names and/or require users to use a consistent name if it exists.

Thoughts?

redis-brain never reaches 'loaded' state on first usage

If the call to hubot:storage returns null during connection, then the loaded flag is never set.

For me, hubot:storage returned null on the first usage with a new Redis instance. This prevents redis-brain from saving out any data.

Error: Cannot find module 'githubot'

i've installed "github-activity.coffee", "github-credentials.coffee", "github-issue-link.coffee" with hubot 2.2.1 but keep getting Error: Cannot find module 'githubot'

list-jira-bug TextListener.call failure

Description :
I'm getting the following failure in the logs when calling the list-jira plugin. The logs, config output, package.json config and script source are include below.

Should the jira url be "https://demandforce.jira.com/login?"? Am I missing some node page in my json config?


Heroku Logs

2012-12-26T14:51:44+00:00 heroku[router]: at=info method=POST path=/hubot/ping host=intuit-hubot.herokuapp.com fwd=23.22.6.43 dyno=web.1 queue=0 wait=0ms connect=1ms service=4ms status=200 bytes=14
2012-12-26T15:11:44+00:00 app[web.1]: [Wed Dec 26 2012 15:11:44 GMT+0000 (UTC)] INFO keep alive ping!
2012-12-26T15:11:44+00:00 heroku[router]: at=info method=POST path=/hubot/ping host=intuit-hubot.herokuapp.com fwd=23.22.6.43 dyno=web.1 queue=0 wait=3ms connect=7ms service=12ms status=200 bytes=14
2012-12-26T15:31:44+00:00 app[web.1]: [Wed Dec 26 2012 15:31:44 GMT+0000 (UTC)] INFO keep alive ping!
2012-12-26T15:51:44+00:00 app[web.1]: [Wed Dec 26 2012 15:51:44 GMT+0000 (UTC)] INFO keep alive ping!
2012-12-26T16:03:40+00:00 app[web.1]: at TextListener.call (/app/node_modules/hubot/src/listener.coffee:19:14)
2012-12-26T16:03:40+00:00 app[web.1]: at Client.onRawStanza (/app/node_modules/hubot-hipchat/node_modules/wobot/node_modules/node-xmpp/lib/xmpp/client.js:159:14)
2012-12-26T16:03:40+00:00 app[web.1]: at HipChat.receive (/app/node_modules/hubot/src/adapter.coffee:37:25)
2012-12-26T16:03:40+00:00 app[web.1]: TypeError: Cannot call method 'split' of undefined
2012-12-26T16:03:40+00:00 app[web.1]: at Bot. (/app/node_modules/hubot-hipchat/src/hipchat.coffee:135:21)
2012-12-26T16:03:40+00:00 app[web.1]: at Bot.emit (events.js:70:17)
2012-12-26T16:03:40+00:00 app[web.1]: at Client.emit (events.js:67:17)
2012-12-26T16:03:40+00:00 app[web.1]: at Bot. (/app/node_modules/hubot-hipchat/node_modules/wobot/lib/bot.js:122:12)
2012-12-26T16:03:40+00:00 app[web.1]: at Robot.receive (/app/node_modules/hubot/src/robot.coffee:112:33)
2012-12-26T16:03:40+00:00 app[web.1]: at TextListener.callback (/app/scripts/list-jira-bugs.coffee:19:56)
2012-12-26T16:03:40+00:00 app[web.1]: [Wed Dec 26 2012 16:03:40 GMT+0000 (UTC)] ERROR Unable to call the listener: TypeError: Cannot call method 'split' of undefined
2012-12-26T16:03:40+00:00 app[web.1]: at Client. (native)


package.json

{
"name": "hosted-hubot",
"version": "2.3.2",
"author": "GitHub Inc.",
"keywords": "github hubot campfire bot",
"description": "A simple helpful Robot for your Company",
"licenses": [{
"type": "MIT",
"url": "http://github.com/github/hubot/raw/master/LICENSE"
}],

"repository" : {
"type": "git",
"url": "https://github.com/github/hubot.git"
},

"dependencies": {
"hubot-hipchat": ">= 1.1.3",
"hubot": ">= 2.3.4",
"hubot-scripts": ">= 2.1.0",
"optparse": "1.0.3",
"htmlparser": "1.7.6",
"githubot": ">=0.1.5",
"jsdom": ">=0.2.14",
"underscore": "> 1.4.2",
"underscore.string": "
> 2.3.0",
"soupselect": "0.2.0",
"redis": "0.7.2"

},

"engines": {
"node": "0.6.x",
"npm": "1.0.x"
}
}


list-jira-bugs.coffee

Description:

Get all bugs from JIRA assigned to user

Dependencies:

None

Configuration:

HUBOT_JIRA_DOMAIN

HUBOT_JIRA_USER

HUBOT_JIRA_PASSWORD

HUBOT_JIRA_ISSUE_TYPES

HUBOT_JIRA_ISSUE_PRIORITIES

Commands:

hubot list my bugs - Retrieve the list of all a user's bugs from JIRA ('my' is optional)

hubot list my bugs about - Retrieve list of all a user's bugs from JIRA where the summary or description field contains ('my' is optional)

hubot list my priority bugs - Retrieve the list of a user's priority bugs from JIRA ('my' is optional)

hubot list my priority bugs about - Retrieve list of all a user's priority bugs from JIRA where the summary or description field contains ('my' is optional)

Author:

crcastle

e.g. "bug|task|sub task|support ticket|new feature|epic"

issueTypes = process.env.HUBOT_JIRA_ISSUE_TYPES
issueTypes or= "bug|task|sub task|support ticket|new feature|epic" #some defaults

e.g. "blocker|high|medium|minor|trivial"

issuePriorities = process.env.HUBOT_JIRA_ISSUE_PRIORITIES
issuePriorities or= "blocker|high|medium|minor|trivial" #some defaults

/list( my)?( (blocker|high|medium|minor|trivial)( priority)?)? (bug|task|sub task|support ticket|new feature|epic|issue)s( about (.*))?/i

regexpString = "list( my)?( (" + issuePriorities + ")( priority)?)? (" + issueTypes + "|issue)s( about (.*))?"
regexp = new RegExp(regexpString, "i")

module.exports = (robot) ->

robot.respond regexp, (msg) ->
    username = if msg.match[1] then msg.message.user.email.split('@')[0] else null
    issueType = if msg.match[5] and msg.match[5] != "issue" then msg.match[5] else null
    msg.send "Searching for issues..."
    getIssues msg, issueType, username, msg.match[3], msg.match[6], (response) ->
        msg.send response

getIssues = (msg, issueType, assignee, priority, phrase, callback) ->
username = process.env.HUBOT_JIRA_USER
password = process.env.HUBOT_JIRA_PASSWORD
domain = process.env.HUBOT_JIRA_DOMAIN

# do some error handling
unless username
    msg.send "HUBOT_JIRA_USER environment variable must be set to a valid JIRA user's username."
    return
unless password
    msg.send "HUBOT_JIRA_PASSWORD environment variable must be set to a valid JIRA user's password."
    return
unless domain
    msg.send "HUBOT_JIRA_DOMAIN environment variables must be set to a valid <ORG>.jira.com domain."
    return

jiraTypeList = toJiraTypeList(process.env.HUBOT_JIRA_ISSUE_TYPES.split('|'))
type = if issueType? then 'issueType="' + issueType + '"' else 'issueType in (' + jiraTypeList + ')'
user = if assignee? then ' and assignee="' + assignee + '"' else ''
prio = if priority? then ' and priority=' + priority else ''
search = if phrase? then ' and (summary~"' + phrase + '" or description~"' + phrase + '")' else ''

path = '/rest/api/latest/search'
url = "https://" + domain + path
queryString = type + ' and status!=closed' + user + prio + search
auth = "Basic " + new Buffer(username + ':' + password).toString('base64')

getJSON msg, url, queryString, auth, (err, json) ->
    if err
        msg.send "error getting issue list from JIRA"
        return
    if json.total? and (json.total==0 or json.total=="0")
        msg.send "No issues like that, or you don't have access to see the issues."
    issueList = []
    for issue in json.issues
        getJSON msg, issue.self, null, auth, (err, details) ->
            if err
                msg.send "error getting issue details from JIRA"
                return
            issueList.push( {key: details.key, summary: details.fields.summary.value} )
            callback(formatIssueList(issueList, domain)) if issueList.length == json.issues.length

formatIssueList = (issueArray, domain) ->
formattedIssueList = ""
for issue in issueArray
formattedIssueList += issue.summary + " -> https://" + domain + "/browse/" + issue.key + "\n"
return formattedIssueList

getJSON = (msg, url, query, auth, callback) ->
msg.http(url)
.header('Authorization', auth)
.query(jql: query)
.get() (err, res, body) ->
callback( err, JSON.parse(body) )

toJiraTypeList = (arr) ->
newArr = []
for issueType in arr
newArr.push '"' + issueType + '"'
return newArr.join(',')


Heroku Vars

hubot Config Vars
HEROKU_URL: xxx
HUBOT_GOOGLE_SEARCH_KEY: xxx
HUBOT_HIPCHAT_JID: xxx
HUBOT_HIPCHAT_PASSWORD: xxx
HUBOT_JIRA_MAXLIST: xxx
HUBOT_JIRA_PASSWORD: xxx
HUBOT_JIRA_URL: https://demandforce.jira.com
HUBOT_JIRA_USER: xxx
PATH: bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin
REDISTOGO_URL: xxx

Better ways to browse scripts?

It's been getting pretty hard to browse all the 150-odd (awesome) scripts and figure out what they all do.

I've put together a script catalog (source) that updates from this repo hourly. Is there maybe a better way to do this, like just adding a wiki page for authors to describe their scripts?

fogbugz script

I am having an issue with the fogbugz script in that i am not sure it is doing anything, it may be i have the credential wrong but it seems to give me no feedback.

Does anyone know how to go about debugging it, I am willing to try if people give me some pointers but i am new to nodejs and coffeescript / hubot.

I do think it is a good and useful application though.

Thanks

NPM is missing 2.1.2 / Can't install hubot-scripts from Git source with NPM

Looks like maintainers needs to push it up..

npm http GET https://registry.npmjs.org/hubot-scripts/2.1.2
npm http 404 https://registry.npmjs.org/hubot-scripts/2.1.2
npm ERR! Error: version not found: 2.1.2 : hubot-scripts/2.1.2
npm ERR! at RegClient. (/usr/lib/nodejs/npm/node_modules/npm-registry-client/lib/request.js:246:14)
npm ERR! at Request.init.self.callback (/usr/lib/nodejs/npm/node_modules/request/main.js:120:22)
npm ERR! at Request.EventEmitter.emit (events.js:91:17)
npm ERR! at Request. (/usr/lib/nodejs/npm/node_modules/request/main.js:555:16)
npm ERR! at Request.EventEmitter.emit (events.js:88:17)
npm ERR! at IncomingMessage.Request.start.self.req.self.httpModule.request.buffer (/usr/lib/nodejs/npm/node_modules/request/main.js:517:14)
npm ERR! at IncomingMessage.EventEmitter.emit (events.js:115:20)
npm ERR! at IncomingMessage._emitEnd (http.js:366:10)
npm ERR! at HTTPParser.parserOnMessageComplete as onMessageComplete
npm ERR! at CleartextStream.socketOnData (http.js:1366:20)
npm ERR! If you need help, you may report this log at:
npm ERR! http://github.com/isaacs/npm/issues
npm ERR! or email it to:
npm ERR! [email protected]

npm ERR! System Linux 3.2.0-23-virtual
npm ERR! command "nodejs" "/usr/bin/npm" "update"

I should also note that I'm including hubot-scripts in package.json like so

"hubot-scripts": "git://github.com/github/hubot-scripts.git"

This is for Node v0.8.7 and npm v1.1.49

If I instead

"hubot-scripts": ">= 2.1.1"

Then I'm golden

AWS: Cannot read property 'item' of undefined

When running hubot ec2 status the application crashes with this stack trace:

/home/scripts/hubot/node_modules/hubot-scripts/src/scripts/aws.coffee:94
            tags = _.flatten([instance.tagSet.item]);
                                             ^
TypeError: Cannot read property 'item' of undefined
    at /home/scripts/hubot/node_modules/hubot-scripts/src/scripts/aws.coffee:94:46
    at /home/scripts/hubot/node_modules/hubot-scripts/src/scripts/aws.coffee:99:12
    at /home/scripts/hubot/node_modules/aws2js/lib/internals.js:146:6
    at /home/scripts/hubot/node_modules/aws2js/node_modules/libxml-to-js/lib/libxml-to-js.js:178:3
    at /home/scripts/hubot/node_modules/aws2js/lib/internals.js:132:4
    at IncomingMessage.<anonymous> (/home/scripts/hubot/node_modules/aws2js/lib/internals.js:206:8)
    at IncomingMessage.emit (events.js:88:20)
    at HTTPParser.onMessageComplete (http.js:137:23)
    at CleartextStream.ondata (http.js:1150:24)
    at CleartextStream._push (tls.js:375:27)

MailChimp script is too inflexible

Don't have time to fix this @max ... but this script needs 2 features to make it useful IMHO.

  • scrape the list id out of the users add command
  • provide a command to view the lists

Thanks!

Pivotal integration is not working

  • node 0.6.0
  • hubot 2.1.0
  • hubot-scripts 2.0.2
  • xml2js 0.1.13
  • sax 0.3.5
  • scoped-http-client 0.9.6

whenever I try to run the pivotal script with "show me stories" I get no answer and if I use it with "show me stories for Dev" I get 'No project /Dev.*/i'.

Both those answers don't match the actual state of things or exploring the API via curl.

Is there anything in particular that should be different?

Pivotal script responds to all alfred messages

I'm not sure what the full intent was in this pull request (#77), but @christianchristensen added a script to the pivotal script that will try to respond to any hubot message. This ends up saying "Story not found" after every message, even if the message wasn't directed to the pivotal script.

Is there some way we can add even a minor trigger for that script?

can't run the tests

I cloned the hubot-script repository and run the 'npm install'
but the 'make test' command gives me the following message:

coffee test/scripts/hubot_test.coffee
coffee test/scripts/speak_test.coffee

module.js:305
    throw err;
    ^
Error: EADDRINUSE, Address already in use
    at Server._doListen (net.js:1100:5)
    at net.js:1071:14
    at Object.lookup (dns.js:159:5)
    at Server.listen (net.js:1065:20)
    at Server.start (/Users/marcel/code/hubot-scripts/test/tests.coffee:24:21)
    at Object.<anonymous> (/Users/marcel/code/hubot-scripts/test/scripts/speak_test.coffee:25:10)
    at Object.<anonymous> (/Users/marcel/code/hubot-scripts/test/scripts/speak_test.coffee:28:4)
    at Module._compile (module.js:411:26)
    at Object..coffee (/opt/node/lib/node_modules/coffee-script/lib/coffee-script.js:14:21)
    at Module.load (module.js:343:31)
coffee test/tests.coffee
make: *** [test] Error 1

octospy: cannot read property 'github.com' of undefined

pretty new to hubot so I'm probably doing something wrong.

I have the octospy script installed and I'm using basic auth config vars.
HUBOT_GITHUB_USER and HUBOT_GITHUB_PASSWORD

octospy is loaded properly and I can say hubot octospy events

when I try to do hubot octospy robdodson/tessellate push I see this error in the heroku logs:

2012-12-21T07:36:34+00:00 app[web.1]: [Fri Dec 21 2012 07:36:34 GMT+0000 (UTC)] ERROR Unable to call the listener: TypeError: Cannot read property 'github.com' of undefined

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.