Hubot听到变量

时间:2015-12-04 22:08:01

标签: coffeescript hubot

我希望能找到一个变量来获取hubot。 实施例

name = "Peter"
module.exports = (robot) ->
   robot.hear /hello name/i, (msg) ->
       msg.send "Peter?! No I am Hubot."

我已经尝试过“#{}”语法,如下所示,但无处可去。

name = "Peter"
module.exports = (robot) ->
   robot.hear /hello #{name}/i, (msg) ->
       msg.send "Peter?! No I am Hubot."

非常感谢任何帮助。

此致

奥斯汀

2 个答案:

答案 0 :(得分:3)

由于你的正则表达式不是常数,你应该使用new Regex()

  

使用构造函数提供正则表达式的运行时编译。当您知道正则表达式模式将要更改时,或者您不知道该模式并从其他源(例如用户输入)获取该模式时,请使用构造函数。

<强>代码

name = "Peter"
regx = new Regex("hello #{ name }", 'i')
module.exports = (robot) ->
  robot.hear regx, (msg) ->
      msg.send "Peter?! No I am Hubot."

修改 使用名称作为参数

module.exports = (robot, name) ->
  regx = new Regex("hello #{ name }", 'i')
  robot.hear regx, (msg) ->
      msg.send "#{ name }?! No I am Hubot."

答案 1 :(得分:1)

如果它有用,使用javascript而不是coffeescript的hubot示例也会选择该选项并将其放在另一个变量中:

const options = 'now|later|never';
const regexOptions = new RegExp(`starting (${options})`, 'i');
robot.respond(regexOptions, (msg) => {
    // this will respond to:
    // hubot starting now
    // but not to:
    // hubot starting notAnOption
    const optionChosen = msg.match[1];
    msg.send(`option chosen: ${optionChosen}`);
});

当我拥有可以添加或删除名称的动态列表时,我会使用此技术,然后我想在响应中使用它 - 在向命令中使用的列表添加名称时需要快速重新加载hubot当然。