nodejs : 예약 된 Slack bot의 간단한 샘플



샘플로서, 하루의 끝에 당일의 github의 contribution수를 slack에 날리는 bot를 만들었습니다.
htps : // 기주 b. 코 m / 니시 무라 / 다 y - SUMA RY

카츠만으로 설명하고 싶습니다.

준비



Slack에서 bot에 대한 Incoming Webhook을 만듭니다.
htps : // 아피. scck. 코 m / 닌코 민 g ぇ b 호오 ks



게시할 채널을 선택하고 진행하면 Webhook URL를 얻을 수 있습니다.


이것을 복사하여 그대로 등록을 완료합니다.

Commander 넣기



github 사용자 이름과 bot 게시 시간 일정을 프로그램에 전달할 수 있도록,
commander 을 npm install합니다.

이것은 node측으로부터 커멘드 라인의 조작을 용이하게 하는 패키지로,
나중에 --schedule 등의 옵션을 붙여 스크립트를 실행하는 것으로,
자유롭게 bot의 게시 시간을 설정할 수 있습니다.

index.js
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 넣기



bot 게시 시간을 결정하려면 node-schedule 을 npm install합니다.

index.js
const schedule = require('node-schedule')

const pattern = program.schedule || '00 20 * * *'

const j = schedule.scheduleJob(pattern, () => {
  // slackに投稿する処理
})


이전 단계에서 --schedule 옵션에 전달한 패턴대로 slack 알림의 함수를 트리거할 수 있습니다.
예를 들어, 00 20 * * * 그러면 매일 20시에 됩니다.
*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ 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)

슬랙 게시물 처리



방금 얻은 Webhook URL에 메시지를 POST합니다.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 라고 하는 패키지를 사용합니다.

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 bot 스크립트를 계속 실행할 수 있습니다.

    요약


  • 명령줄 도구화: commander
  • 일정: node-schedule
  • 지속성: forever
  • 좋은 웹페이지 즐겨찾기