ОК, поэтому я нашел решение, использующее объектные макросы - но оно не очень элегантно.
Это решение возвращает полный ответ пользователя (со всеми словами, сделанными строчными буквами - с lowercase
- разделенными вмассив) в макрос объекта test
в переменной args
.Элементы в этом массиве перечисляются, чтобы увидеть, соответствует ли какой-либо из них элементу в массивах positives
или negatives
(которые, по сути, являются дублированными заменами, уже присутствующими в «мозге» rivescript).
Если есть совпадение, переменная action
обновляется до yes
или no
, и цикл прерывается; если совпадение не найдено, тогда переменная action
остается undefined
.Эта переменная action
затем возвращается к условному ответу и оценивается rivescript, чтобы увидеть, соответствует ли оно какому-либо из условий.
> object test javascript
let positives = ['yes', 'yeah', 'yep', 'yup', 'yh', 'ya', 'y', 'sure'];
let negatives = ['no', 'nope', 'na', 'nah', 'pass'];
var action = 'undefined';
for (var i = 0; i < args.length; i++) {
if (positives.indexOf(args[i]) !== -1) {
action = 'yes'
break;
} else if (negatives.indexOf(args[i]) !== -1){
action = 'no'
break;
} else {
}
}
return action;
< object
// In the topic/main section
+ [*] you [*]
- Oh, so we're talking about me now?
+ *
% oh so we are talking about me now
* <call>test <lowercase></call> == no => Whatever...
* <call>test <lowercase></call> == yes => This should be fun.{topic=myself}
* <call>test <lowercase></call> == undefined => So, back to the matter at hand...
- So, back to the matter at hand...
Кажется, что это работает довольно хорошо, но я уверен, что должно быть лучшее решение, даже если оно заключается только в очистке самого макроса объекта (возможно, есть способ внести замены вмакрос объекта ??).
Я принимаю этот ответ, но если у кого-то есть альтернативные предложения / решения, я все равно буду рад их услышать.