parent
ad60e09633
commit
c6979b4bb4
|
@ -0,0 +1 @@
|
|||
node_modules/
|
216
README.md
216
README.md
|
@ -1,2 +1,214 @@
|
|||
# status-github-bot
|
||||
A bot for github
|
||||
# statusbot
|
||||
|
||||
statusbot 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 statusbot 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 statusbot 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
|
||||
statusbot>
|
||||
|
||||
Then you can interact with statusbot by typing `statusbot help`.
|
||||
|
||||
statusbot> statusbot help
|
||||
statusbot animate me <query> - The same thing as `image me`, except adds [snip]
|
||||
statusbot help - Displays all of the help commands that statusbot 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 <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/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.
|
||||
|
|
|
@ -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 "statusbot" "$@"
|
|
@ -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 "statusbot" %*
|
|
@ -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"
|
||||
]
|
|
@ -0,0 +1 @@
|
|||
[]
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"name": "statusbot",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"author": "Pedro Pombeiro <pombeirp@users.noreply.github.com>",
|
||||
"description": "A simple helpful robot for your Company",
|
||||
"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",
|
||||
"hubot-slack": "^4.4.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "0.10.x"
|
||||
}
|
||||
}
|
|
@ -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'
|
Loading…
Reference in New Issue