Я делаю бот-дискорд и пытаюсь составить список запрещенных слов, используя массивы. Я не могу понять, как заставить это работать. Вот мой текущий код:

if (forbidenWords.includes(message.content)) {
  message.delete();
  console.log(colors.red(`Removed ${message.author.username}'s Message as it had a forbidden word in it.`));
}

Если вы не можете сказать, я пытаюсь проверить, есть ли в сообщении пользователя что-либо из массива forbidenWords, и удалить его. Как мне это сделать?

2
ZerterCodes 13 Дек 2016 в 09:48

4 ответа

Лучший ответ

Размещенный вами код проверяет, является ли весь контент сообщения членом вашего массива. Чтобы выполнить то, что вы хотите, переберите массив и проверьте, содержит ли сообщение каждый элемент:

for (var i = 0; i < forbidenWords.length; i++) {
  if (message.content.includes(forbidenWords[i])) {
    // message.content contains a forbidden word;
    // delete message, log, etc.
    break;
  }
}

(Кстати, вы неправильно написали «forbi dd en» в имени вашей переменной)

2
qxz 13 Дек 2016 в 06:56

В "современном" JS:

forbiddenWords.some(word => message.content.includes(word))

В комментариях построчно:

forbiddenWords               // In the list of forbidden words,
  .some(                     // are there some
    word =>                  // words where the 
      message.content        // message content
        .includes(           // includes
          word))             // the word?
6
zImPatrick 23 Янв 2019 в 15:11
Array.prototype.S = String.fromCharCode(2);
Array.prototype.in_array = function(e){
    var r=new RegExp(this.S+e+this.S);
    return (r.test(this.S+this.join(this.S)+this.S));
};
 
var arr = [ "xml", "html", "css", "js" ];
arr.in_array("js"); 
//如果 存在返回true , 不存在返回false
0
arcsin1 13 Дек 2016 в 07:09

Вместо этого вы можете использовать метод indexOf ():

if (forbidenWords.indexOf(message.content) != -1){
     message.delete();
     console.log(colors.red(`Removed ${message.author.username}'s Message as it had a forbidden word in it.`));
}
0
Eli Skoran 13 Дек 2016 в 07:02