Hubot + Slack 入门
安全
Tancy天雪
1人收藏 149次学习

Hubot + Slack 入门

手把手教你用Hubot + Slack开发一个bot。

Slack 设置

前提是你有个Slack 账号,有一个Team。

进入 App Directory

搜索hubot 后进入 新建 New configuration,输入bot 名称

第一步:

第二步:

第三步:

你可以给机器填写一些基础信息,名称,头像等。最重要的是获取其中API Token

好到此,Slack的相关操作已经完成了。

Hubot

Hubot 是 Github 的开源聊天机器人,可以用来做一些自动化任务,如部署网站,翻译语言等等。

官方网站:https://hubot.github.com/

Hubot 安装

npm install -g hubot coffee-script yo generator-hubot

Hubot 初始化

mkdir work/hubot
cd /work/hubot
yo hubot

安装过程中会问你安装什么样的adapter,手工输入slack。更多第三方Adapter

默认安装的hubot,会带上heroku 和 Redis,用不到的话,可以卸载掉:

npm uninstall hubot-heroku-keepalive --save

在hubot目录下的external-scripts.json文件中把有关heroku和redis的两行删掉就行了,否则会报几个警告。

备注:Heroku 革命性的Rails托管服务

Hubot 启动

./bin/hubot

连接Hubot 和 Slack

HUBOT_SLACK_TOKEN= API Token ./bin/hubot --adapter slack

Shell

npm install hubot-script-shellcmd
cp -R node_modules/hubot-script-shellcmd/bash ./

修改一下external-scripts.json,添加上以下模块:hubot-script-shellcmd。

!/bin/bash
cd /your/path
git pull
echo "successfully updated!"
exit 0

在你的slack端对机器人说:

shellcmd update

 

Scripts

接受消息

作为一个聊天机器人,hubot 最基本的功能是要监听特定的「输入」。Hubot 给我们提供了三个不同层次的方法来监听输入:robot.hear、robot.respond 和 robot.listen

robot.hear

监听任何匹配的「输入」。即在聊天过程中,只要匹配到特定的消息,就会触发回调函数。

module.exports = (robot) ->
  # 匹配任何带有 hello 的消息,如
  # hello
  # hellooooo
  # haha helloooooo
  robot.hear /hello/i, (res) ->
    # do what you want
    res.send "hello,I'm zjj."

robot.respond

监听对 hubot 说的「输入」。即在聊天过程中,前面带有 hubot/hubot:/@hubot 的消息才会被匹配,然后触发回调函数。

# 匹配对 hubot 说的 hi,如
  # hubot hi
  # @hubot hihihi~
  # hubot: hihihi!
  robot.respond /hi/i, (res) ->
    # do what you want
    res.reply "hi,I'm zjj"

robot.listen

自由度最高的监听器,传入一个函数(Match Function)对消息进行匹配。该函数返回 true 时回调函数会被执行。

# 根据「消息」对象做处理
  robot.listen(
    (message) -> message.user.name is "tancy",
    (res) -> # do what you want
  )

发送消息

聊天机器人除了接收「输入」之外,还需要对消息做出「响应」。有没有留意到上面接收消息中的回调函数都有一个 res 呢?你猜对拉!和 Node.js 中的 res 用来响应 req 一样,这里的 res 也是是用来响应「输入」的。其中比较常用的两个方法是 res.send 和 res.reply。

res.send

这个方法和 robot.hear 相反,会直接把消息发送到聊天室。

module.exports = (robot) ->
 robot.hear /hello/i, (res) ->
    # do what you want
    res.send "hello,I'm zjj."

res.reply

这个方法和 robot.respond 相反,谁对 hubot 聊天就会回复谁。

module.exports = (robot) ->
robot.respond /hi/i, (res) ->
    # do what you want
    res.reply "hi,I'm hubot zjj"

res.match

只有上面两个方法是远远不够的,因为上面两个方法并不能对「输入」做任何处理。不知道童鞋们有没有发现,我们其实是用正则表达式来匹配输入的,而正则表达式刚好可以用来做匹配某些关键字!当匹配到关键字之后,我们从哪里可以提取到这些关键字呢?答案就是 res.match 拉!

module.exports = (robot) ->
  # 用 res.match 来获取正则表达式匹配的结果,如
  # 输入 open the first door
  # 输出 opening the first door
  robot.hear /open the (.*) door/i, (res) ->
    res.send "opening the #{res.match[1]} door"

发出 http 请求

只是匹配消息再回复太简单拉!其实我们可以通过 hubot 发出 http 请求来做出更多的事情!Hubot 自带一个 node-scoped-http-client 来发 http 请求。用法如下:

module.exports = (robot) ->
  robot
    .http('https://m.taobao.com')
    .get() (err, response, body) ->
	# do what you want
      res.send body

想象一下

将工作中的琐事,重复的事情,都交给bot搭理。这是怎样的心情。

参考资料

https://hubot.github.com/

https://api.slack.com/bot-usersa

原文地址:Hubot + Slack 入门

加入1KE学习俱乐部

1KE学习俱乐部是只针对1KE学员开放的私人俱乐部
标签:
Slack