Hubot如何在没有任何命令的情况下定期运行功能?

时间:2014-08-08 18:46:46

标签: hubot

我试图为hubot创建一个函数,每隔5分钟向一个房间发送一条消息,而不是任何命令,仅仅是他自己。

module.exports = (robot, scripts) ->
  setTimeout () ->
    setInterval () ->
      msg.send "foo"
    , 5 * 60 * 1000
  , 5 * 60 * 1000

我需要改变什么?

3 个答案:

答案 0 :(得分:6)

使用node-cron。

$ npm install --save cron time

你的脚本应该是这样的:

# Description:
#   Defines periodic executions

module.exports = (robot) ->
  cronJob = require('cron').CronJob
  tz = 'America/Los_Angeles'
  new cronJob('0 0 9 * * 1-5', workdaysNineAm, null, true, tz)
  new cronJob('0 */5 * * * *', everyFiveMinutes, null, true, tz)

  room = 12345678

  workdaysNineAm = ->
    robot.emit 'slave:command', 'wake everyone up', room

  everyFiveMinutes = ->
    robot.messageRoom room, 'I will nag you every 5 minutes'

更多详情:https://leanpub.com/automation-and-monitoring-with-hubot/read#leanpub-auto-periodic-task-execution

答案 1 :(得分:2)

实际上hubot documentation显示setInterval()setTimeout()的使用情况,而不使用额外的模块。

你甚至可以通过绑定到msg对象来内联。 例如:

module.exports = (robot) ->
  updateId = null

  robot.respond /start/i, (msg) ->
      msg.update = () ->                        # this is your update
          console.log "updating"                # function

      if not this.updateId                      # and here it
          this.updateId = setInterval () ->     # gets
             msg.update()                       # periodically
          , 60*1000                             # triggered minutely
          msg.send("starting")

答案 2 :(得分:0)

真正的问题是您在没有消息对象的情况下尝试使用msg.send。您应该使用robot.messageRoom命令替换该行(或者如果要发送私人消息,则替换一些等效命令)。