Переменная Hubot Hear

Я надеялся найти здесь переменную. бывший

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 ответа

Решение

Поскольку ваше регулярное выражение не является константой, вы должны использовать 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."

В случае, если это полезно, пример hubot, использующий javascript, а не coffeescript, который также берет выбранную опцию и помещает ее в другую переменную:

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 при добавлении имени в список, используемый в команде, конечно.

Другие вопросы по тегам