2017-02-16 9 views
1

Я начинаю на node.js.
Я хочу сделать это, когда hubot услышит ожидаемое сообщение, оценит и выполнит скрипт, который не существует в директории скриптов.Как отправить msg в скриптах, которые находятся без скриптов в hubot?

Я написал код под кодом, но я не могу отправить сообщение.

тзд Ошибка

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

Где я должен это исправить, чтобы определить Сообщ?

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" 

ответ

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 он загрузит второй файл и отправит 'test'. Во второй раз он снова загрузит второй файл, и вы получите два ответа, которые говорят «test». В третий раз он снова загрузится, и вы получите три сообщения и т. Д.