windhamdavid 9 years ago
commit
d8c5c07524
10 changed files with 329 additions and 0 deletions
  1. 12 0
      .editorconfig
  2. 2 0
      .gitignore
  3. 1 0
      Procfile
  4. 157 0
      README.md
  5. 8 0
      bin/hubot
  6. 3 0
      bin/hubot.cmd
  7. 13 0
      external-scripts.json
  8. 1 0
      hubot-scripts.json
  9. 26 0
      package.json
  10. 106 0
      scripts/example.coffee

+ 12 - 0
.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

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+node_modules
+.DS_Store*

+ 1 - 0
Procfile

@@ -0,0 +1 @@
+web: bin/hubot -a slack -n huey

+ 157 - 0
README.md

@@ -0,0 +1,157 @@
+# huey
+
+huey 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 he has, etc!
+
+[heroku]: http://www.heroku.com
+[hubot]: http://hubot.github.com
+[generator-hubot]: https://github.com/github/generator-hubot
+
+### Running huey Locally
+
+You can test your hubot by running the following.
+
+You can start huey locally by running:
+
+    % bin/hubot
+
+You'll see some start up output about where your scripts come from and a
+prompt:
+
+    [Sun, 04 Dec 2011 18:41:11 GMT] INFO Loading adapter shell
+    [Sun, 04 Dec 2011 18:41:11 GMT] INFO Loading scripts from /home/tomb/Development/hubot/scripts
+    [Sun, 04 Dec 2011 18:41:11 GMT] INFO Loading scripts from /home/tomb/Development/hubot/src/scripts
+    Hubot>
+
+Then you can interact with huey by typing `huey help`.
+
+    huey> huey help
+
+    huey> animate me <query> - The same thing as `image me`, except adds a few
+    convert me <expression> to <units> - Convert expression to given units.
+    help - Displays all of the help commands that Hubot knows about.
+    ...
+
+
+### Scripting
+
+An example script is included at `scripts/example.coffee`, so check it out to
+get started, along with the [Scripting Guide](https://github.com/github/hubot/blob/master/docs/scripting.md).
+
+For many common tasks, there's a good chance someone has already one to do just
+the thing.
+
+### hubot-scripts
+
+There will inevitably be functionality that everyone will want. Instead
+of writing it yourself, you can check
+[hubot-scripts][hubot-scripts] for existing scripts.
+
+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
+
+### external-scripts
+
+Hubot is able to load scripts from third-party `npm` package. Check the package's documentation, but in general it is:
+
+1. Add the packages as dependencies into your `package.json`
+2. `npm install` to make sure those packages are installed
+3. 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.
+
+##  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 require 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. This
+can be something like 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 and run `npm install` to install it you can
+then run hubot with the adapter.
+
+    % bin/hubot -a <adapter>
+
+Where `<adapter>` 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/unix.md
+
+## Campfire Variables
+
+If you are using the Campfire adapter you will need to set some environment
+variables. Refer to the documentation for other adapters and the configuraiton
+of those, 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.

+ 8 - 0
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 "$@"

+ 3 - 0
bin/hubot.cmd

@@ -0,0 +1,3 @@
+@echo off
+
+npm install && node_modules\.bin\hubot.cmd %* 

+ 13 - 0
external-scripts.json

@@ -0,0 +1,13 @@
+[
+  "hubot-diagnostics",
+  "hubot-help",
+  "hubot-heroku-keepalive",
+  "hubot-google-images",
+  "hubot-google-translate",
+  "hubot-pugme",
+  "hubot-maps",
+  "hubot-redis-brain",
+  "hubot-rules",
+  "hubot-shipit",
+  "hubot-youtube"
+]

+ 1 - 0
hubot-scripts.json

@@ -0,0 +1 @@
+[]

+ 26 - 0
package.json

@@ -0,0 +1,26 @@
+{
+  "name": "huey",
+  "version": "0.0.0",
+  "private": true,
+  "author": "y",
+  "description": "something else",
+  "dependencies": {
+    "hubot": "^2.9.3",
+    "hubot-diagnostics": "0.0.1",
+    "hubot-google-images": "^0.1.0",
+    "hubot-google-translate": "^0.1.0",
+    "hubot-help": "^0.1.1",
+    "hubot-heroku-keepalive": "0.0.4",
+    "hubot-maps": "0.0.0",
+    "hubot-pugme": "^0.1.0",
+    "hubot-redis-brain": "0.0.2",
+    "hubot-rules": "^0.1.0",
+    "hubot-scripts": "^2.5.16",
+    "hubot-shipit": "^0.1.1",
+    "hubot-slack": "^2.2.0",
+    "hubot-youtube": "^0.1.2"
+  },
+  "engines": {
+    "node": "0.10.x"
+  }
+}

+ 106 - 0
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, (msg) ->
+  #   msg.send "Badgers? BADGERS? WE DON'T NEED NO STINKIN BADGERS"
+  #
+  # robot.respond /open the (.*) doors/i, (msg) ->
+  #   doorType = msg.match[1]
+  #   if doorType is "pod bay"
+  #     msg.reply "I'm afraid I can't let you do that."
+  #   else
+  #     msg.reply "Opening #{doorType} doors"
+  #
+  # robot.hear /I like pie/i, (msg) ->
+  #   msg.emote "makes a freshly baked pie"
+  #
+  # lulz = ['lol', 'rofl', 'lmao']
+  #
+  # robot.respond /lulz/i, (msg) ->
+  #   msg.send msg.random lulz
+  #
+  # robot.topic (msg) ->
+  #   msg.send "#{msg.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 (msg) ->
+  #   msg.send msg.random enterReplies
+  # robot.leave (msg) ->
+  #   msg.send msg.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/, (msg) ->
+  #   unless answer?
+  #     msg.send "Missing HUBOT_ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE_THE_UNIVERSE_AND_EVERYTHING in environment: please set and try again"
+  #     return
+  #   msg.send "#{answer}, but what is the question?"
+  #
+  # robot.respond /you are a little slow/, (msg) ->
+  #   setTimeout () ->
+  #     msg.send "Who you calling 'slow'?"
+  #   , 60 * 1000
+  #
+  # annoyIntervalId = null
+  #
+  # robot.respond /annoy me/, (msg) ->
+  #   if annoyIntervalId
+  #     msg.send "AAAAAAAAAAAEEEEEEEEEEEEEEEEEEEEEEEEIIIIIIIIHHHHHHHHHH"
+  #     return
+  #
+  #   msg.send "Hey, want to hear the most annoying sound in the world?"
+  #   annoyIntervalId = setInterval () ->
+  #     msg.send "AAAAAAAAAAAEEEEEEEEEEEEEEEEEEEEEEEEIIIIIIIIHHHHHHHHHH"
+  #   , 1000
+  #
+  # robot.respond /unannoy me/, (msg) ->
+  #   if annoyIntervalId
+  #     msg.send "GUYS, GUYS, GUYS!"
+  #     clearInterval(annoyIntervalId)
+  #     annoyIntervalId = null
+  #   else
+  #     msg.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, msg) ->
+  #   robot.logger.error "DOES NOT COMPUTE"
+  #
+  #   if msg?
+  #     msg.reply "DOES NOT COMPUTE"
+  #
+  # robot.respond /have a soda/i, (msg) ->
+  #   # Get number of sodas had (coerced to a number).
+  #   sodasHad = robot.brain.get('totalSodas') * 1 or 0
+  #
+  #   if sodasHad > 4
+  #     msg.reply "I'm too fizzy.."
+  #
+  #   else
+  #     msg.reply 'Sure!'
+  #
+  #     robot.brain.set 'totalSodas', sodasHad+1
+  #
+  # robot.respond /sleep it off/i, (msg) ->
+  #   robot.brain.set 'totalSodas', 0
+  #   robot.respond 'zzzzz'