如何在hubot中没有脚本目录的脚本中发送msg?

时间:2017-02-16 11:40:36

标签: node.js coffeescript hubot

我是node.js的初学者 当hubot听到预期的消息,评估并执行脚本目录中不存在的脚本时,我想这样做。

我在代码下面写了代码,但我无法发送消息。

错误消息

[Thu Feb 16 2017 20:22:34 GMT+0900 (JST)] ERROR ReferenceError: msg is not defined

我应该在哪里修复它来定义msg?

hubot_dir /脚本/ load_test.coffee

path = require('path')

module.exports = (robot) ->
  robot.hear /loadscript/i, (msg) ->
    script_name = "dynamictest.coffee"
    script_dir = path.resolve(__dirname, "../dynamicscripts")
    dynamictest = require(script_dir + "/" + script_name)
    robot.loadFile(script_dir, script_name)
    robot.emit "dynamic", {
      robot: robot,
      msg: msg
    }
    delete require.cache[script_dir + "/" + script_name]

hubot_dir / dynamicscripts / dynamictest.coffee

module.exports = (robot) ->
  robot.on "dynamic" , (dynamic) ->
    robot.logger.info "output log"
    msg.send "test"

1 个答案:

答案 0 :(得分:0)

当您调用robot.emit时,您传递的对象包含您调用msg的变量(尽管名称完全是任意的)。此对象作为名为dynamic的参数传递,因此,为了引用msg,您需要将其称为dynamic.msg

module.exports = (robot) ->
  robot.on "dynamic" , (dynamic) ->
    robot.logger.info "output log"
    dynamic.msg.send "test"

但是,我应该指出,对于编写loadscript函数的方式,每次调用它时都会加载dynamiccript.coffee的其他实例。例如,当您第一次拨打loadscript时,它会加载第二个文件并发送回测试'。第二次,它将再次加载第二个文件,您将得到两个回复说“测试”。第三次它会再次加载,你会收到三条消息,等等。