目录
hubot with rocketchat
缘起
无意间看到这篇文章,里面提到文章的作者使用了slack
和hubot
自动化了一些事情,恰巧我在公司的gitlab里,发现了一位同事使用了Rocket.Chat(可以认为是slack的开源版),好奇心驱使下,就倒腾了些这些玩意 -> hubot & rocket.chat,just for fun.
可以干吗
rest api & shell, 你可以在web界面(也提供了手机app)上输入一些指令,hubot会根据这些指令做相应的事情,看以下的gif:
rest api
我写了一个js脚本,这个脚本可以根据输入的城市去一个rest api提供方查询这个城市的天气预报
shell command
下载了李鼎的bash脚本,通过web端来调起执行
怎么弄?
hubot
参考: https://hubot.github.com/docs/
npm install -g yo generator-hubot
mkdir webot & cd webot
yo hubot --adapter="rocketchat@1"
rocket.chat server
参考 https://rocket.chat/docs/installation/docker-containers/docker-compose/
- wget https://raw.githubusercontent.com/RocketChat/Rocket.Chat/develop/docker-compose.yml
- update port accordingly
- docker-compose up -d mongo
- docker-compose up -d mongo-init-replica
- docker-compose up -d rocketchat
- docker-compose up -d hubot
两者集成
参考 https://github.com/RocketChat/hubot-rocketchat
npm install hubot-rocketchat@1
export ROCKETCHAT_ROOM=''
export LISTEN_ON_ALL_PUBLIC=true
export ROCKETCHAT_USER=bot
export ROCKETCHAT_PASSWORD=123456
export ROCKETCHAT_AUTH=ldap
export ROCKETCHAT_URL=localhost:4000
start with `bin/hubot -a rocketchat`
社区贡献的脚本
- update npm
- npm search hubot-scripts
如何写自己的脚本
在hubot的scripts目录里新增脚本,比如我们想在Rocket.Chat
里查询天气,我们可以这么做
webot weather 杭州
效果如下
那么这个脚本怎么写呢?
const axios = require('axios')
const baseURL = 'http://www.sojson.com/open/api/weather'
const weatherapi = axios.create({
baseURL,
headers: {
'Accept-Encoding': 'application/json',
'Content-Type': 'application/json'
}
})
module.exports = robot => {
robot.respond(/weather (.+)/i, res => {
const query = res.match[1]
weatherapi.get(`/json.shtml?city=`+encodeURIComponent(`${query}`))
.then(resp => {
const payload = resp.data.data.forecast.
map(x => `${x.date} - ${x.high} - ${x.low}`)
.join('\n')
res.send(`${payload}`)
})
.catch(err => res.send(`天气查询失败: ${query}`))
})
}
仿造这个例子,可以写任何提供rest api接口的脚本