我正在研究一个抽搐机器人,我正在尝试让机器人欢迎人们加入流,问题是,其中一个表情是“HeyGuys”并单独输入这个表情会触发他,因为有“hey”和“guys”,所以我想用regexp查看整个单词来解决这个问题,但是现在,它每次都会触发!
这是代码:
var welcomed;
function checkWelcomeMsg(channel, msg, usr) {
welcomed = false;
for(var i = 0; i < welcome.length; i++) {
if(new RegExp('\\b' + welcome[i] + '\\b') && !welcomed) {
for(var i = 0; i < chatNames.length; i++) {
if(new RegExp('\\b' + chatNames[i] + '\\b')) {
console.log(getRandomResponse(greetings)+usr.username+"!");
welcomed = true;
console.log(welcomed);
break;
}
}
}
}
}
以下是代码正在查看的数组:
//Welcome; Thanks; Goodbye syntaxes
var welcome = ["hi", "hey", "hello", "o/", "HeyGuys", ];
var chatNames = ["chat", "everybody", "people", "everyone", "guys"];
//Responses
var greetings = ["Hello ", "HeyGuys ", "Hey "];
代码会查看包含“welcome”和“chatNames”字样的所有消息,并从“问候语”中选择一个随机答案
在每次我在聊天中输入内容时,if语句给我“\ bhi \ b”和“\ bchat \ b”后放入console.log
答案 0 :(得分:1)
我不会使用正则表达式,因为您可以使用Array.indexOf
方法
您的代码存在很多问题,您应该简化逻辑。
你可以做这样的事情
var emotes = ["HeyGuys", ];
function checkWelcomeMsg(channel, msg, usr){
var welcomed = false;
var usrMsg = msg.toLowerCase();
// Split the msg
var words = usrMsg.split(" ");
// check if the msg contains an emote
for (var i = 0, len=words.length; i< len ; i++){
if (emotes.indexOf(words[i]) > -1){
welcomed = true;
break;
}
}
// If there is no emotes
if (!welcomed){
// check if the msg contains any of welcome words
for ( i = 0, len=words.length; i < len ; i++){
if (welcome.indexOf(words[i]) > -1){
welcomed = true;
break;
}
}
// If not return
if (!welcomed){
return;
}
welcomed = false;
// check if the msg contains any of the chatNames too
for (i = 0; i < len ; i++){
if (chatNames.indexOf(words[i]) > -1){
welcomed = true;
break;
}
}
}
if (welcomed){
console.log(getRandomResponse(greetings)+usr.username+"!");
}
}
&#13;
对于Twitch僵尸程序而言,我无法测试此代码,您应该小心使用此代码并对其进行测试。