From c7b21cd5d0db730a4991f633e07ad3c93ea14f60 Mon Sep 17 00:00:00 2001 From: "Oliver.W" Date: Fri, 18 May 2018 13:06:00 +0800 Subject: [PATCH] init project --- .editorconfig | 12 + .gitignore | 64 +-- Procfile | 1 + README.md | 216 +++++++- bin/hubot | 8 + bin/hubot.cmd | 7 + external-scripts.json | 12 + hubot-scripts.json | 1 + package-lock.json | 1119 ++++++++++++++++++++++++++++++++++++++++ package.json | 24 + scripts/example.coffee | 106 ++++ 11 files changed, 1507 insertions(+), 63 deletions(-) create mode 100644 .editorconfig create mode 100644 Procfile create mode 100755 bin/hubot create mode 100644 bin/hubot.cmd create mode 100644 external-scripts.json create mode 100644 hubot-scripts.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 scripts/example.coffee diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5760be5 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore index ad46b30..e9049bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,61 +1,3 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -# next.js build output -.next +node_modules +.DS_Store* +.hubot_history diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..9c85565 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: bin/hubot -a campfire diff --git a/README.md b/README.md index 3b05684..2a4e77a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,214 @@ -# ole-bot -My own huebot +# olebot + +olebot is a chat bot built on the [Hubot][hubot] framework. It was +initially generated by [generator-hubot][generator-hubot], and configured to be +deployed on [Heroku][heroku] to get you up and running as quick as possible. + +This README is intended to help get you started. Definitely update and improve +to talk about your own instance, how to use and deploy, what functionality is +available, etc! + +[heroku]: http://www.heroku.com +[hubot]: http://hubot.github.com +[generator-hubot]: https://github.com/github/generator-hubot + +### Running olebot Locally + +You can test your hubot by running the following, however some plugins will not +behave as expected unless the [environment variables](#configuration) they rely +upon have been set. + +You can start olebot locally by running: + + % bin/hubot + +You'll see some start up output and a prompt: + + [Sat Feb 28 2015 12:38:27 GMT+0000 (GMT)] INFO Using default redis on localhost:6379 + olebot> + +Then you can interact with olebot by typing `olebot help`. + + olebot> olebot help + olebot animate me - The same thing as `image me`, except adds [snip] + olebot help - Displays all of the help commands that olebot knows about. + ... + +### Configuration + +A few scripts (including some installed by default) require environment +variables to be set as a simple form of configuration. + +Each script should have a commented header which contains a "Configuration" +section that explains which values it requires to be placed in which variable. +When you have lots of scripts installed this process can be quite labour +intensive. The following shell command can be used as a stop gap until an +easier way to do this has been implemented. + + grep -o 'hubot-[a-z0-9_-]\+' external-scripts.json | \ + xargs -n1 -I {} sh -c 'sed -n "/^# Configuration/,/^#$/ s/^/{} /p" \ + $(find node_modules/{}/ -name "*.coffee")' | \ + awk -F '#' '{ printf "%-25s %s\n", $1, $2 }' + +How to set environment variables will be specific to your operating system. +Rather than recreate the various methods and best practices in achieving this, +it's suggested that you search for a dedicated guide focused on your OS. + +### Scripting + +An example script is included at `scripts/example.coffee`, so check it out to +get started, along with the [Scripting Guide][scripting-docs]. + +For many common tasks, there's a good chance someone has already one to do just +the thing. + +[scripting-docs]: https://github.com/github/hubot/blob/master/docs/scripting.md + +### external-scripts + +There will inevitably be functionality that everyone will want. Instead of +writing it yourself, you can use existing plugins. + +Hubot is able to load plugins from third-party `npm` packages. This is the +recommended way to add functionality to your hubot. You can get a list of +available hubot plugins on [npmjs.com][npmjs] or by using `npm search`: + + % npm search hubot-scripts panda + NAME DESCRIPTION AUTHOR DATE VERSION KEYWORDS + hubot-pandapanda a hubot script for panda responses =missu 2014-11-30 0.9.2 hubot hubot-scripts panda + ... + + +To use a package, check the package's documentation, but in general it is: + +1. Use `npm install --save` to add the package to `package.json` and install it +2. Add the package name to `external-scripts.json` as a double quoted string + +You can review `external-scripts.json` to see what is included by default. + +##### Advanced Usage + +It is also possible to define `external-scripts.json` as an object to +explicitly specify which scripts from a package should be included. The example +below, for example, will only activate two of the six available scripts inside +the `hubot-fun` plugin, but all four of those in `hubot-auto-deploy`. + +```json +{ + "hubot-fun": [ + "crazy", + "thanks" + ], + "hubot-auto-deploy": "*" +} +``` + +**Be aware that not all plugins support this usage and will typically fallback +to including all scripts.** + +[npmjs]: https://www.npmjs.com + +### hubot-scripts + +Before hubot plugin packages were adopted, most plugins were held in the +[hubot-scripts][hubot-scripts] package. Some of these plugins have yet to be +migrated to their own packages. They can still be used but the setup is a bit +different. + +To enable scripts from the hubot-scripts package, add the script name with +extension as a double quoted string to the `hubot-scripts.json` file in this +repo. + +[hubot-scripts]: https://github.com/github/hubot-scripts + +## Persistence + +If you are going to use the `hubot-redis-brain` package (strongly suggested), +you will need to add the Redis to Go addon on Heroku which requires a verified +account or you can create an account at [Redis to Go][redistogo] and manually +set the `REDISTOGO_URL` variable. + + % heroku config:add REDISTOGO_URL="..." + +If you don't need any persistence feel free to remove the `hubot-redis-brain` +from `external-scripts.json` and you don't need to worry about redis at all. + +[redistogo]: https://redistogo.com/ + +## Adapters + +Adapters are the interface to the service you want your hubot to run on, such +as Campfire or IRC. There are a number of third party adapters that the +community have contributed. Check [Hubot Adapters][hubot-adapters] for the +available ones. + +If you would like to run a non-Campfire or shell adapter you will need to add +the adapter package as a dependency to the `package.json` file in the +`dependencies` section. + +Once you've added the dependency with `npm install --save` to install it you +can then run hubot with the adapter. + + % bin/hubot -a + +Where `` is the name of your adapter without the `hubot-` prefix. + +[hubot-adapters]: https://github.com/github/hubot/blob/master/docs/adapters.md + +## Deployment + + % heroku create --stack cedar + % git push heroku master + +If your Heroku account has been verified you can run the following to enable +and add the Redis to Go addon to your app. + + % heroku addons:add redistogo:nano + +If you run into any problems, checkout Heroku's [docs][heroku-node-docs]. + +You'll need to edit the `Procfile` to set the name of your hubot. + +More detailed documentation can be found on the [deploying hubot onto +Heroku][deploy-heroku] wiki page. + +### Deploying to UNIX or Windows + +If you would like to deploy to either a UNIX operating system or Windows. +Please check out the [deploying hubot onto UNIX][deploy-unix] and [deploying +hubot onto Windows][deploy-windows] wiki pages. + +[heroku-node-docs]: http://devcenter.heroku.com/articles/node-js +[deploy-heroku]: https://github.com/github/hubot/blob/master/docs/deploying/heroku.md +[deploy-unix]: https://github.com/github/hubot/blob/master/docs/deploying/unix.md +[deploy-windows]: https://github.com/github/hubot/blob/master/docs/deploying/windows.md + +## Campfire Variables + +If you are using the Campfire adapter you will need to set some environment +variables. If not, refer to your adapter documentation for how to configure it, +links to the adapters can be found on [Hubot Adapters][hubot-adapters]. + +Create a separate Campfire user for your bot and get their token from the web +UI. + + % heroku config:add HUBOT_CAMPFIRE_TOKEN="..." + +Get the numeric IDs of the rooms you want the bot to join, comma delimited. If +you want the bot to connect to `https://mysubdomain.campfirenow.com/room/42` +and `https://mysubdomain.campfirenow.com/room/1024` then you'd add it like +this: + + % heroku config:add HUBOT_CAMPFIRE_ROOMS="42,1024" + +Add the subdomain hubot should connect to. If you web URL looks like +`http://mysubdomain.campfirenow.com` then you'd add it like this: + + % heroku config:add HUBOT_CAMPFIRE_ACCOUNT="mysubdomain" + +[hubot-adapters]: https://github.com/github/hubot/blob/master/docs/adapters.md + +## Restart the bot + +You may want to get comfortable with `heroku logs` and `heroku restart` if +you're having issues. diff --git a/bin/hubot b/bin/hubot new file mode 100755 index 0000000..a2d30a9 --- /dev/null +++ b/bin/hubot @@ -0,0 +1,8 @@ +#!/bin/sh + +set -e + +npm install +export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH" + +exec node_modules/.bin/hubot --name "olebot" "$@" diff --git a/bin/hubot.cmd b/bin/hubot.cmd new file mode 100644 index 0000000..9af58f4 --- /dev/null +++ b/bin/hubot.cmd @@ -0,0 +1,7 @@ +@echo off + +call npm install +SETLOCAL +SET PATH=node_modules\.bin;node_modules\hubot\node_modules\.bin;%PATH% + +node_modules\.bin\hubot.cmd --name "olebot" %* diff --git a/external-scripts.json b/external-scripts.json new file mode 100644 index 0000000..a869d9f --- /dev/null +++ b/external-scripts.json @@ -0,0 +1,12 @@ +[ + "hubot-diagnostics", + "hubot-help", + "hubot-heroku-keepalive", + "hubot-google-images", + "hubot-google-translate", + "hubot-pugme", + "hubot-maps", + "hubot-redis-brain", + "hubot-rules", + "hubot-shipit" +] \ No newline at end of file diff --git a/hubot-scripts.json b/hubot-scripts.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/hubot-scripts.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b0f67ba --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1119 @@ +{ + "name": "olebot", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", + "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.5.3" + }, + "dependencies": { + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + } + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "base64-url": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz", + "integrity": "sha1-GZ/WYXAqDnt9yubgaYuwicUvbXg=" + }, + "basic-auth": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", + "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA=" + }, + "basic-auth-connect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", + "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI=" + }, + "batch": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", + "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=" + }, + "body-parser": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz", + "integrity": "sha1-wIzzMMM1jhUQFqBXRvE/ApyX+pc=", + "requires": { + "bytes": "2.1.0", + "content-type": "1.0.4", + "debug": "2.2.0", + "depd": "1.0.1", + "http-errors": "1.3.1", + "iconv-lite": "0.4.11", + "on-finished": "2.3.0", + "qs": "4.0.0", + "raw-body": "2.1.7", + "type-is": "1.6.16" + }, + "dependencies": { + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "qs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + } + } + }, + "bytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz", + "integrity": "sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cline": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/cline/-/cline-0.8.2.tgz", + "integrity": "sha1-6RHnQaCtLiTSnm+rLPifoyLVnHY=" + }, + "coffee-script": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.3.tgz", + "integrity": "sha1-Y1XTLPGwTN/2tITl5xF4Ky8MOb4=" + }, + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" + }, + "compressible": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", + "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "requires": { + "mime-db": "1.33.0" + }, + "dependencies": { + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + } + } + }, + "compression": { + "version": "1.5.2", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.5.2.tgz", + "integrity": "sha1-sDuNhub4rSloPLqN+R3cb/x3s5U=", + "requires": { + "accepts": "1.2.13", + "bytes": "2.1.0", + "compressible": "2.0.13", + "debug": "2.2.0", + "on-headers": "1.0.1", + "vary": "1.0.1" + } + }, + "connect": { + "version": "2.30.2", + "resolved": "https://registry.npmjs.org/connect/-/connect-2.30.2.tgz", + "integrity": "sha1-jam8vooFTT0xjXTf7JA7XDmhtgk=", + "requires": { + "basic-auth-connect": "1.0.0", + "body-parser": "1.13.3", + "bytes": "2.1.0", + "compression": "1.5.2", + "connect-timeout": "1.6.2", + "content-type": "1.0.4", + "cookie": "0.1.3", + "cookie-parser": "1.3.5", + "cookie-signature": "1.0.6", + "csurf": "1.8.3", + "debug": "2.2.0", + "depd": "1.0.1", + "errorhandler": "1.4.3", + "express-session": "1.11.3", + "finalhandler": "0.4.0", + "fresh": "0.3.0", + "http-errors": "1.3.1", + "method-override": "2.3.10", + "morgan": "1.6.1", + "multiparty": "3.3.2", + "on-headers": "1.0.1", + "parseurl": "1.3.2", + "pause": "0.1.0", + "qs": "4.0.0", + "response-time": "2.3.2", + "serve-favicon": "2.3.2", + "serve-index": "1.7.3", + "serve-static": "1.10.3", + "type-is": "1.6.16", + "utils-merge": "1.0.0", + "vhost": "3.0.2" + }, + "dependencies": { + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "qs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + } + } + }, + "connect-multiparty": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/connect-multiparty/-/connect-multiparty-1.2.5.tgz", + "integrity": "sha1-L6vs/cGop3S6GUhNzmYMgYqFVec=", + "requires": { + "multiparty": "3.3.2", + "on-finished": "2.1.1", + "qs": "2.2.5", + "type-is": "1.5.7" + } + }, + "connect-timeout": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.2.tgz", + "integrity": "sha1-3ppexh4zoStu2qt7XwYumMWZuI4=", + "requires": { + "debug": "2.2.0", + "http-errors": "1.3.1", + "ms": "0.7.1", + "on-headers": "1.0.1" + } + }, + "content-disposition": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz", + "integrity": "sha1-QoT+auBjCHRjnkToCkGMKTQTXp4=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz", + "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU=" + }, + "cookie-parser": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz", + "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=", + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.3.0.tgz", + "integrity": "sha1-+mIuG8OIvyVzCQgta2UgDOZwkLo=" + }, + "csrf": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz", + "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo=", + "requires": { + "rndm": "1.2.0", + "tsscmp": "1.0.5", + "uid-safe": "2.1.4" + } + }, + "csurf": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.8.3.tgz", + "integrity": "sha1-I/KhO/HY/OHQyZZYg5RELLqGpWo=", + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6", + "csrf": "3.0.6", + "http-errors": "1.3.1" + } + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "depd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" + }, + "ee-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz", + "integrity": "sha1-ag18YiHkkP7v2S7D9EHJzozQl/Q=" + }, + "errorhandler": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.3.tgz", + "integrity": "sha1-t7cO2PNZ6duICS8tIMD4MUIK2D8=", + "requires": { + "accepts": "1.3.5", + "escape-html": "1.0.3" + }, + "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + } + } + }, + "escape-html": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz", + "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "etag": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=" + }, + "express": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-3.21.2.tgz", + "integrity": "sha1-DCkD7lxU5j1lqWFwdkcDVQZlo94=", + "requires": { + "basic-auth": "1.0.4", + "commander": "2.6.0", + "connect": "2.30.2", + "content-disposition": "0.5.0", + "content-type": "1.0.4", + "cookie": "0.1.3", + "cookie-signature": "1.0.6", + "debug": "2.2.0", + "depd": "1.0.1", + "escape-html": "1.0.2", + "etag": "1.7.0", + "fresh": "0.3.0", + "merge-descriptors": "1.0.0", + "methods": "1.1.2", + "mkdirp": "0.5.1", + "parseurl": "1.3.2", + "proxy-addr": "1.0.10", + "range-parser": "1.0.3", + "send": "0.13.0", + "utils-merge": "1.0.0", + "vary": "1.0.1" + } + }, + "express-session": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz", + "integrity": "sha1-XMmPP1/4Ttg1+Ry/CqvQxxB0AK8=", + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6", + "crc": "3.3.0", + "debug": "2.2.0", + "depd": "1.0.1", + "on-headers": "1.0.1", + "parseurl": "1.3.2", + "uid-safe": "2.0.0", + "utils-merge": "1.0.0" + }, + "dependencies": { + "uid-safe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz", + "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=", + "requires": { + "base64-url": "1.2.1" + } + } + } + }, + "finalhandler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz", + "integrity": "sha1-llpS2ejQXSuFdUhUH7ibU6JJfZs=", + "requires": { + "debug": "2.2.0", + "escape-html": "1.0.2", + "on-finished": "2.3.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "http-errors": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", + "requires": { + "inherits": "2.0.3", + "statuses": "1.5.0" + } + }, + "hubot": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/hubot/-/hubot-2.19.0.tgz", + "integrity": "sha1-h8Vy0hD7DV+J91YXeuACDUn/ujY=", + "requires": { + "async": "0.9.2", + "chalk": "1.1.3", + "cline": "0.8.2", + "coffee-script": "1.6.3", + "connect-multiparty": "1.2.5", + "express": "3.21.2", + "log": "1.4.0", + "optparse": "1.0.4", + "scoped-http-client": "0.11.0" + } + }, + "hubot-diagnostics": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/hubot-diagnostics/-/hubot-diagnostics-0.0.2.tgz", + "integrity": "sha1-oEKyzcn9jwFYPhBWWBMKbYua84Y=" + }, + "hubot-google-images": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/hubot-google-images/-/hubot-google-images-0.2.7.tgz", + "integrity": "sha1-qKH5CU12gwvxkxdwiI+rDcDBGk0=" + }, + "hubot-google-translate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/hubot-google-translate/-/hubot-google-translate-0.2.1.tgz", + "integrity": "sha1-P0lsfywgmU1ZS0t1GDiY4rYnu34=" + }, + "hubot-help": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/hubot-help/-/hubot-help-0.2.2.tgz", + "integrity": "sha1-zqF+eCzndrdD9lOTk1s0MMLoGXw=" + }, + "hubot-heroku-keepalive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/hubot-heroku-keepalive/-/hubot-heroku-keepalive-1.0.3.tgz", + "integrity": "sha1-KVDigJXuSmrOK3b5DiqRupHmgTw=" + }, + "hubot-maps": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/hubot-maps/-/hubot-maps-0.0.3.tgz", + "integrity": "sha1-yPxbA0h1TmJhbVuZsr85BMXuWDw=" + }, + "hubot-pugme": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/hubot-pugme/-/hubot-pugme-0.1.1.tgz", + "integrity": "sha1-u/O5k4MVFsgU9WnPDwUxP7mjFFg=" + }, + "hubot-redis-brain": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/hubot-redis-brain/-/hubot-redis-brain-0.0.4.tgz", + "integrity": "sha1-kYLFd1YAZbNKBaLqHdq6Ix0JMCM=", + "requires": { + "redis": "2.6.5" + } + }, + "hubot-rules": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/hubot-rules/-/hubot-rules-0.1.2.tgz", + "integrity": "sha1-jvMS2Lz0umaBExDatp9SjTRj9MU=" + }, + "hubot-scripts": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/hubot-scripts/-/hubot-scripts-2.17.2.tgz", + "integrity": "sha1-mwjpB9XPq6cteDIEBnp4zp3zriQ=", + "requires": { + "redis": "0.8.4" + }, + "dependencies": { + "redis": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/redis/-/redis-0.8.4.tgz", + "integrity": "sha1-FGCfJkFOIRwx480H3HmwS/n/GYA=" + } + } + }, + "hubot-shipit": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/hubot-shipit/-/hubot-shipit-0.2.1.tgz", + "integrity": "sha1-T7yeFhlTv3kB/cNuKnAsExA/FrI=" + }, + "iconv-lite": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz", + "integrity": "sha1-LstC/SlHRJIiCaLnxATayHk9it4=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz", + "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "log": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/log/-/log-1.4.0.tgz", + "integrity": "sha1-S6HYkP3iSbAx3KA7w36q8yVlbxw=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz", + "integrity": "sha1-IWnPdTjhsMyH+4jhUC2EdLv3mGQ=" + }, + "method-override": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz", + "integrity": "sha1-49r41d7hDdLc59SuiNYrvud0drQ=", + "requires": { + "debug": "2.6.9", + "methods": "1.1.2", + "parseurl": "1.3.2", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + }, + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=" + }, + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "requires": { + "mime-db": "1.12.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "morgan": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz", + "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=", + "requires": { + "basic-auth": "1.0.4", + "debug": "2.2.0", + "depd": "1.0.1", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + }, + "dependencies": { + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + }, + "multiparty": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz", + "integrity": "sha1-Nd5oBNwZZD5SSfPT473GyM4wHT8=", + "requires": { + "readable-stream": "1.1.14", + "stream-counter": "0.2.0" + } + }, + "negotiator": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", + "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=" + }, + "on-finished": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.1.1.tgz", + "integrity": "sha1-+CyhyeOk8yhrG5k4YQ5bhja9PLI=", + "requires": { + "ee-first": "1.1.0" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "optparse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/optparse/-/optparse-1.0.4.tgz", + "integrity": "sha1-wGJXnS0F0kPCIaMEpx4Ml5YjzPE=" + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "pause": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.1.0.tgz", + "integrity": "sha1-68ikqGGf8LioGsFRPDQ0/0af23Q=" + }, + "proxy-addr": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz", + "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.0.5" + } + }, + "qs": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.2.5.tgz", + "integrity": "sha1-EIirr53MCuWuRbcJ5sa1iIsjkjw=" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "range-parser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", + "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=" + }, + "raw-body": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" + } + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "redis": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/redis/-/redis-2.6.5.tgz", + "integrity": "sha1-h8Hv9KSJ+Utwhx89CLaYjyOpVoc=", + "requires": { + "double-ended-queue": "2.1.0-0", + "redis-commands": "1.3.5", + "redis-parser": "2.6.0" + } + }, + "redis-commands": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz", + "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==" + }, + "redis-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", + "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" + }, + "response-time": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", + "integrity": "sha1-/6cbq5UtYvfB1Jt0NDVfvGjf/Fo=", + "requires": { + "depd": "1.1.2", + "on-headers": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + } + } + }, + "rndm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", + "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w=" + }, + "scoped-http-client": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/scoped-http-client/-/scoped-http-client-0.11.0.tgz", + "integrity": "sha1-iH+oKoNg8V1jmlLlBOVjwVfSbXQ=" + }, + "send": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.13.0.tgz", + "integrity": "sha1-UY+SGusFYK7H3KspkLFM9vPM5d4=", + "requires": { + "debug": "2.2.0", + "depd": "1.0.1", + "destroy": "1.0.3", + "escape-html": "1.0.2", + "etag": "1.7.0", + "fresh": "0.3.0", + "http-errors": "1.3.1", + "mime": "1.3.4", + "ms": "0.7.1", + "on-finished": "2.3.0", + "range-parser": "1.0.3", + "statuses": "1.2.1" + }, + "dependencies": { + "destroy": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz", + "integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", + "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=" + } + } + }, + "serve-favicon": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz", + "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=", + "requires": { + "etag": "1.7.0", + "fresh": "0.3.0", + "ms": "0.7.2", + "parseurl": "1.3.2" + }, + "dependencies": { + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "serve-index": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.3.tgz", + "integrity": "sha1-egV/xu4o3GP2RWbl+lexEahq7NI=", + "requires": { + "accepts": "1.2.13", + "batch": "0.5.3", + "debug": "2.2.0", + "escape-html": "1.0.3", + "http-errors": "1.3.1", + "mime-types": "2.1.18", + "parseurl": "1.3.2" + }, + "dependencies": { + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + } + } + }, + "serve-static": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz", + "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=", + "requires": { + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.13.2" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "send": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", + "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=", + "requires": { + "debug": "2.2.0", + "depd": "1.1.2", + "destroy": "1.0.4", + "escape-html": "1.0.3", + "etag": "1.7.0", + "fresh": "0.3.0", + "http-errors": "1.3.1", + "mime": "1.3.4", + "ms": "0.7.1", + "on-finished": "2.3.0", + "range-parser": "1.0.3", + "statuses": "1.2.1" + } + }, + "statuses": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", + "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=" + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-counter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz", + "integrity": "sha1-3tJmVWMZyLDiIoErnPOyb6fZR94=", + "requires": { + "readable-stream": "1.1.14" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "tsscmp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=" + }, + "type-is": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.5.7.tgz", + "integrity": "sha1-uTaKWTzG730GReeLL0xky+zQXpA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.0.14" + } + }, + "uid-safe": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz", + "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE=", + "requires": { + "random-bytes": "1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + }, + "vary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", + "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=" + }, + "vhost": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vhost/-/vhost-3.0.2.tgz", + "integrity": "sha1-L7HezUxGaqiLD5NBrzPcGv8keNU=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3c30828 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "olebot", + "version": "0.0.0", + "private": true, + "author": "ole3021", + "description": "Private bot for ole3021", + "dependencies": { + "hubot": "^2.19.0", + "hubot-diagnostics": "0.0.2", + "hubot-google-images": "^0.2.7", + "hubot-google-translate": "^0.2.1", + "hubot-help": "^0.2.2", + "hubot-heroku-keepalive": "^1.0.3", + "hubot-maps": "0.0.3", + "hubot-pugme": "^0.1.1", + "hubot-redis-brain": "0.0.4", + "hubot-rules": "^0.1.2", + "hubot-scripts": "^2.17.2", + "hubot-shipit": "^0.2.1" + }, + "engines": { + "node": "0.10.x" + } +} diff --git a/scripts/example.coffee b/scripts/example.coffee new file mode 100644 index 0000000..7c9839c --- /dev/null +++ b/scripts/example.coffee @@ -0,0 +1,106 @@ +# Description: +# Example scripts for you to examine and try out. +# +# Notes: +# They are commented out by default, because most of them are pretty silly and +# wouldn't be useful and amusing enough for day to day huboting. +# Uncomment the ones you want to try and experiment with. +# +# These are from the scripting documentation: https://github.com/github/hubot/blob/master/docs/scripting.md + +module.exports = (robot) -> + + # robot.hear /badger/i, (res) -> + # res.send "Badgers? BADGERS? WE DON'T NEED NO STINKIN BADGERS" + # + # robot.respond /open the (.*) doors/i, (res) -> + # doorType = res.match[1] + # if doorType is "pod bay" + # res.reply "I'm afraid I can't let you do that." + # else + # res.reply "Opening #{doorType} doors" + # + # robot.hear /I like pie/i, (res) -> + # res.emote "makes a freshly baked pie" + # + # lulz = ['lol', 'rofl', 'lmao'] + # + # robot.respond /lulz/i, (res) -> + # res.send res.random lulz + # + # robot.topic (res) -> + # res.send "#{res.message.text}? That's a Paddlin'" + # + # + # enterReplies = ['Hi', 'Target Acquired', 'Firing', 'Hello friend.', 'Gotcha', 'I see you'] + # leaveReplies = ['Are you still there?', 'Target lost', 'Searching'] + # + # robot.enter (res) -> + # res.send res.random enterReplies + # robot.leave (res) -> + # res.send res.random leaveReplies + # + # answer = process.env.HUBOT_ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE_THE_UNIVERSE_AND_EVERYTHING + # + # robot.respond /what is the answer to the ultimate question of life/, (res) -> + # unless answer? + # res.send "Missing HUBOT_ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE_THE_UNIVERSE_AND_EVERYTHING in environment: please set and try again" + # return + # res.send "#{answer}, but what is the question?" + # + # robot.respond /you are a little slow/, (res) -> + # setTimeout () -> + # res.send "Who you calling 'slow'?" + # , 60 * 1000 + # + # annoyIntervalId = null + # + # robot.respond /annoy me/, (res) -> + # if annoyIntervalId + # res.send "AAAAAAAAAAAEEEEEEEEEEEEEEEEEEEEEEEEIIIIIIIIHHHHHHHHHH" + # return + # + # res.send "Hey, want to hear the most annoying sound in the world?" + # annoyIntervalId = setInterval () -> + # res.send "AAAAAAAAAAAEEEEEEEEEEEEEEEEEEEEEEEEIIIIIIIIHHHHHHHHHH" + # , 1000 + # + # robot.respond /unannoy me/, (res) -> + # if annoyIntervalId + # res.send "GUYS, GUYS, GUYS!" + # clearInterval(annoyIntervalId) + # annoyIntervalId = null + # else + # res.send "Not annoying you right now, am I?" + # + # + # robot.router.post '/hubot/chatsecrets/:room', (req, res) -> + # room = req.params.room + # data = JSON.parse req.body.payload + # secret = data.secret + # + # robot.messageRoom room, "I have a secret: #{secret}" + # + # res.send 'OK' + # + # robot.error (err, res) -> + # robot.logger.error "DOES NOT COMPUTE" + # + # if res? + # res.reply "DOES NOT COMPUTE" + # + # robot.respond /have a soda/i, (res) -> + # # Get number of sodas had (coerced to a number). + # sodasHad = robot.brain.get('totalSodas') * 1 or 0 + # + # if sodasHad > 4 + # res.reply "I'm too fizzy.." + # + # else + # res.reply 'Sure!' + # + # robot.brain.set 'totalSodas', sodasHad+1 + # + # robot.respond /sleep it off/i, (res) -> + # robot.brain.set 'totalSodas', 0 + # res.reply 'zzzzz'