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

How to send msg in scripts that locates without scripts dir in hubot?

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

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

错误消息

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

我应该在哪里修改它来定义味精?

hubot_dir/scripts/load_test.咖啡

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.咖啡

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

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

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

但是,我应该指出,根据您编写的 loadscript 函数的方式,它会在您每次调用它时加载一个额外的 dynamicscript.coffee 实例。例如,第一次调用 loadscript 时,它会加载第二个文件并发回 'test'。第二次,它会再次加载第二个文件,你会得到两个 'test' 的响应。第三次它会再次加载,你会收到三条消息等