Hubot需要Node和npm的比较新的版本,Mac os x安装非常简单,从nodejs.org下载安装就可以了
➜ node --version
v0.12.4
➜ npm --version
2.10.1
如果你的系统版本比较旧,可能需要升级一下,升级和安装一样,从nodejs.org下载从新安装就可以了
Hubot现在用generator来生成要使用的项目,而不是之前的直接clone它的代码
➜ npm install -g yo generator-hubot
➜ mkdir myhubot
➜ cd myhubot
➜ yo hubot
执行yo hubot
的时候会需要配置一个参数,直接回车就可以了
执行完之后就可以启动hubot了
➜ cd myhubot
➜ ./bin/hubot
myhubot>
myhubot> myhubot ping
PONG
注意: 由于执行yo hubot
进行配置的使用Bot name
默认是目录的名字即myhubot
我们没有改,所以输命令的时候前面的前导也需要是myhubot
,可以编辑bin/hubot
文件改成自己喜欢的名字
exec node_modules/.bin/hubot --name "myhubot" "$@"
Hubot Script使用CoffeeScript,放在scripts目录下会自动加载.该目录下还有个example.coffee
里面好多的例子,基本涵盖了所以的语法
先看一个最简单的例子
module.exports = (robot) ->
robot.respond /PING$/i, (msg) ->
msg.send "PONG"
robot.respond /ADAPTER$/i, (msg) ->
msg.send robot.adapterName
非常简单,不用解释都能看明白,这里类似robot.respond
中的respond
的东西主要有三个: hear
, respond
和router
hear
和respond
的区别可以简单理解成hear
是模糊匹配,respond
是精确匹配,用respond
有隐含的条件就是后面的正则表达式是包含^
的,像ping
的例子,实际的匹配正则是/^PING$/
, ping
只能是紧跟在Bot name
即(myhubot)后面才行,而如果改成hear
module.exports = (robot) ->
robot.hear /PING$/i, (msg) ->
msg.send "PONG"
那么只要你发的消息以ping
结尾(注意还有个$
表示结尾)都可以触发这个Script
router
可以用来匹配http请求,和bearychat的集成就是用的这个,集成到简聊(bearychat)的hook代码.example.coffee
里也有例子,一般的情况应该用不到
类似msg.send
中send
的东西还有reply
, emote
,会有一些细微的差别如,reply
会直接回复给发命令的人(可能是@那个人,具体不知道),但由于和bearychat的集成现在还使用很挫的方法,好多东西不支持.所以简单说用send
就好了
如果你的script需要保存一些数据,可以用brain
,例子一看就懂
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
简单的调试也是可以的
module.exports = (robot) ->
robot.respond /PING$/i, (msg) ->
robot.logger.warning "PONG"
msg.send "PONG"
hubot> hubot ping
[Wed Jun 10 2015 07:03:45 GMT+0800 (CST)] WARNING PONG
PONG