From 4a772ab0938a5d713fb71086b58fde04e946c494 Mon Sep 17 00:00:00 2001 From: Vasiliy Yorkin Date: Fri, 11 Dec 2015 23:07:29 +0300 Subject: [PATCH] Initial --- .editorconfig | 12 ++++ .gitignore | 3 + Procfile | 1 + README.md | 157 +++++++++++++++++++++++++++++++++++++++++ bin/hubot | 8 +++ bin/hubot.cmd | 3 + external-scripts.json | 13 ++++ hubot-scripts.json | 1 + package.json | 26 +++++++ scripts/example.coffee | 106 ++++++++++++++++++++++++++++ 10 files changed, 330 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 Procfile create mode 100644 README.md 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.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 new file mode 100644 index 0000000..e9049bb --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +.DS_Store* +.hubot_history diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..a270227 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: bin/hubot -a slack -n hooy diff --git a/README.md b/README.md new file mode 100644 index 0000000..9a1f48e --- /dev/null +++ b/README.md @@ -0,0 +1,157 @@ +# hooy + +hooy 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 hooy Locally + +You can test your hubot by running the following. + +You can start hooy 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 hooy by typing `hooy help`. + + hooy> hooy help + + hooy> animate me - The same thing as `image me`, except adds a few + convert me to - 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 + +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/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. diff --git a/bin/hubot b/bin/hubot new file mode 100755 index 0000000..2c1a31c --- /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 "$@" diff --git a/bin/hubot.cmd b/bin/hubot.cmd new file mode 100644 index 0000000..f9de38a --- /dev/null +++ b/bin/hubot.cmd @@ -0,0 +1,3 @@ +@echo off + +npm install && node_modules\.bin\hubot.cmd %* \ No newline at end of file diff --git a/external-scripts.json b/external-scripts.json new file mode 100644 index 0000000..a2d8106 --- /dev/null +++ b/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" +] \ 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.json b/package.json new file mode 100644 index 0000000..c88ccbe --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "hooy", + "version": "0.0.0", + "private": true, + "author": "Vasiliy Yorkin ", + "description": "Get the shit done", + "dependencies": { + "hubot": "2.17.0", + "hubot-diagnostics": "0.0.1", + "hubot-google-images": "0.2.6", + "hubot-google-translate": "0.2.0", + "hubot-help": "0.1.2", + "hubot-heroku-keepalive": "1.0.0", + "hubot-maps": "0.0.2", + "hubot-pugme": "0.1.0", + "hubot-redis-brain": "0.0.3", + "hubot-rules": "0.1.1", + "hubot-scripts": "2.16.2", + "hubot-shipit": "0.2.0", + "hubot-slack": "3.4.2", + "hubot-youtube": "1.0.1" + }, + "engines": { + "node": "0.10.x" + } +} diff --git a/scripts/example.coffee b/scripts/example.coffee new file mode 100644 index 0000000..989018a --- /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, (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'