Node.js:带有调度设置的简单Slack机器人示例

image.png

作为一个样品,我制作了一个机器人,在一天结束时将当天的github贡献数量发送到slack。
https://github.com/nnishimura/day-summary

我希望用简洁的方式进行解释。

准备好

我们将在Slack上创建一个用于机器人的Incoming Webhook。
https://api.slack.com/incoming-webhooks

image.png
image.png

请将此复制并直接完成注册。

将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

广告
将在 10 秒后关闭
bannerAds