Bad words filter is not working correctly discord.js v13

Issue

I was trying to make a bad words filter with my bot in discord.js v13 and node.js v16. I wrote a simple code but It’s not working correctly.

My code:

const args = message.content.split(/ +/);
if ((message.guild.id = 'GUILD_ID')) {
  const bad = ['word1', 'word2'];
  if (bad.includes(args[0].join(' '))) {
    message.delete();
  } else {
    return;
  }
}

When I send a ‘word1’ message, It works correctly and deletes the message. but when I send for example: "Hello word1", It does not work.

What does It need to do?

  1. Delete the message if it includes a bad word.

Note: I am not getting any errors!

Solution

It’s because you check if the array contains the string "Hello word1".

You can use Array#some() with a callback function to check if the string contains any of those words in the array:

function containsBadWords(str) {
  const badWords = ['word1', 'word2']

  if (badWords.some(word => str.toLowerCase().includes(word))) 
    return 'String contains bad words'
  else 
    return 'No bad words found'
}

console.log(containsBadWords('word1'))
console.log(containsBadWords('Some other text that includes word2 here'))
console.log(containsBadWords('No bad words here'))
// make sure you don't use single '=' here!
if (message.guild.id === 'GUILD_ID') {
  const bad = ['word1', 'word2']
  if (bad.some(word => message.content.includes(word)))
    message.delete()
  else
    return
}

Answered By – Zsolt Meszaros

Answer Checked By – Dawn Plyler (AngularFixing Volunteer)

Leave a Reply

Your email address will not be published.