玩一玩 Slack 的 bot

Slack 可谓去年的明星企业,年初发布产品,到年末公司已经值 10亿美元了。Founder 也很有意思,执着于做游戏,结果都没有做成功,一转头 pivot 一下就成就了 Flickr 和 Slack,这个以后可以再聊。

熟悉我的人知道我向来就喜欢 bot 这类东西,生活上我也喜欢 automate 一切东西。公司去年从古老的 Skype 换到 Slack,正好有机会玩玩儿 bot,做点有意(wú)义(liáo)的事情。顺便吐槽一下为 Skype 写 bot 真是一件很苦逼的事情,跑 bot 都要 Skype Client 一起跑,实在痛不欲生。

好在 Slack 有 Hubot。Hubot 是 Github 开源的一个 bot framework,最开始是针对 Campfire 开发的,后来也支持了 irc / Hipchat / Slack 等。之前 Slack 的 adaptor 基于 webhook,并不支持一对一 chat 和 private group,需要搭配 irc 一起用,也就是要起两个 bot,一个来接收 public channel 的信息,一个来接收和发布 private message。去年底 Slack 改进了 API 就再也不需要这样了。新的 API 下每个 bot 有自己的账户,这样你可以和他一对一交流,也可以在群里@他。bot 也不再监视所有的 channel,而只是在听他所在的 channel / group。可以把 bot 想象成一个正常的用户,方便很多。

至于这个 bot 可以干什么呢 –

我觉得最有用的是当年世界杯的时候播报比分了。进球了会有通知,甚至我后来不得不加一个 delay(因为看直播的人往往都有延时)。可以查询积分榜,看小组信息,看今日比赛回顾,等等。

世界杯结束之后,我们更多的是和日常的 ops 结合起来,比如 deploy 的时候发个消息,或者查询一下 data pipeline 的 status,或者就是和人调侃的时候来 @bot encourage 一下,总之还是蛮方便的。

所有的 plugin 都是用 coffeescript 写的,像我这种不会 javascript 的人都能随便写,可见是多么的容易。这边我就随便拿个例子:

# Description:
#   Prints out this month's ASCII calendar.
#
# Commands:
#   hubot calendar [me] - Print out this month's calendar

child_process = require('child_process')
module.exports = (robot) ->
  robot.respond /calendar( me)?/i, (msg) ->
    child_process.exec 'cal -h', (error, stdout, stderr) ->
      msg.send(stdout)

更多请看 doc,这里也有更多可用的 plugin,各位看官要是有什么好玩的记得介绍给我哈 😀