Node.js:带有调度设置的简单Slack机器人示例
作为一个样品,我制作了一个机器人,在一天结束时将当天的github贡献数量发送到slack。
https://github.com/nnishimura/day-summary
我希望用简洁的方式进行解释。
准备好
我们将在Slack上创建一个用于机器人的Incoming Webhook。
https://api.slack.com/incoming-webhooks
请将此复制并直接完成注册。
将Commander放进去。
为了将GitHub用户名和机器人的发布时间表传递给程序,我们需要使用npm install安装commander。
这是一个能够方便地通过Node端进行命令行操作的软件包,通过附加–schedule等选项来执行脚本,可以自由地设置机器人的发布时间。
const program = require('commander')
program
.version('0.1.0')
.option('--github <string>', 'Add github username')
.option(
'--schedule [string]',
'cron pattern, defaults to 20:00 every day',
'00 20 * * *'
)
.parse(process.argv)
当以这种方式执行命令 “node index.js –github ‘akira'” 时,即可通过 program.github 获取到 ‘akira’。
安装node-schedule
为了设置机器人的发布时间,使用npm安装node-schedule。
const schedule = require('node-schedule')
const pattern = program.schedule || '00 20 * * *'
const j = schedule.scheduleJob(pattern, () => {
// slackに投稿する処理
})
在前一步中,根据传递给-schedule选项的模式,可以触发Slack通知函数。
例如,“00 20 * * *”表示每天晚上8点。
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
处理Slack发帖
请将消息POST到刚才获取的Webhook URL。
请将Webhook URL存储为环境变量,并不要直接将其放入代码中。
const request = require('request')
const DEFAULT_PARAMS = {
url: process.env.SLACK_WEB_HOOK_URL, // 環境変数
form: 'payload={text: "default message",username: "test bot",icon_emoji: ":bar_chart:"}',
headers,
json: true
}
request.post(DEFAULT_PARAMS, (error, response, body) => {
if (!error && response.statusCode == 200) {
return console.log(body) // logs 'ok'
}
console.log('error: ' + response)
})
移动
node index.js --github 'USER_NAME' --schedule 'SCHEDULE_PATTERN'
暫時先用這個腳本運行,但由於我想一直執行這個腳本,所以會使用forever這個套件。
永遠地持續下去
npm install -g foreverでグローバルインストールした場合は、
forever index.js --github 'USER_NAME' --schedule 'SCHEDULE_PATTERN'
- ローカルにしかない場合
./node_modules/.bin/forever index.js --github 'USER_NAME' --schedule 'SCHEDULE_PATTERN'
您可以使用此方法持续执行Slack机器人脚本。
总结
-
- コマンドラインツール化:commander
スケジュール:node-schedule
永続化:forever