J'ai donc levé autant d'informations que je pouvais sur ce sujet, mais rien ne semble être ce que je cherche. En ce moment, j'apprends à coder mon propre bot de discorde. J'ai frappé un point où j'essaie de détecter un mot spécifique dans un message comme un filtre de blasphème.
La seule façon dont je suis arrivé à comprendre consiste à utiliser "Message.content.includes ()" mais cette trouve le motif dans les mots comme si j'essayais de supprimer le mot "pourrir", il supprimerait également "la carotte" p>
Je sais aussi à l'exclusion de ". plus tard dans la phrase, cela ne le détecterait pas depuis lors, il ne cherche que le message lui-même. P>
Mon objectif est d'avoir un code que si je le souhaite de supprimer "pourrir", il ne faut que supprimer. C'est si c'est un mot séparé n'importe où dans le message. p>
merci. p>
EDIT: J'ai collé mon code actuel: p>
const profanities = require('profanities/index.json'); for (let x = 0; x < profanities.length; x++) { if (message.content.toUpperCase().includes(profanities[x].toUpperCase())) { message.channel.send('Oooooooh you said a bad word!'); client.channels.get('484375912389935126').send(`Message was deleted due to use of a blocked word:\n\n"${message.content}"`); message.delete(); return; } }
3 Réponses :
let checkMessage = message.content.toLowerCase(); // Puts the whole message to lowercase. If your profanities file is all caps change it to .toUpperCase(); but if it is all lowercase keep it the same. for (let i = 0; i < checkMessage.length; i++) { let logchannel = message.guild.channels.find(x => x.name === `{name}`); // Name of the channel you want the logs to go to, this will help if you want to change the name and not grab the ID of the channel. const profanities = require('profanities/index.json'); // Make sure this is the correct file path of the profanities json. if(profanities.some(word => checkMessage.includes(word)) { // If the message includes any word from profanities. message.delete(); // Delete the message that was sent. message.channel.send(`Oooooooh you said a bad word!`).then(msg => {msg.delete(15000)}); // Send the channel a message saying that they said a bad word. Then delete the message after 15 seconds. client.channels.get(logchannel.id).send(`Message was deleted due to use of a blocked word:\n\n${message.content}`); //Send the log channel a message saying that there was a blocked word. return; }
Je suis content que ce ne soit pas juste que je vous enlève des votes sur une question. J'ai posté mon code actuel ci-dessus pour mieux clarifier. J'espère utiliser quelque chose autour de cela.
@Quazarxx j'ai édité mon message, j'espère que ce code au bas vous aide à sortir.
Je suggérerais de fractionnement la phrase dans un tableau et de rechercher le mot spécifique, puis de rejoindre le mot après avoir retiré le mot.
p>
const profanities = require('profanities/index.json'); if ((message.content.split(" ").filter(Set.prototype.has, new Set(profanities))).length > 0) { message.channel.send('Oooooooh you said a bad word!'); client.channels.get('484375912389935126').send(`Message was deleted due to use of a blocked word:\n\n"${message.content}"`); message.delete(); return; }
J'ai édité mon message original avec mon code actuel. J'espère utiliser quelque chose autour de là, donc c'est moins compliqué pour moi.
@Quazarxx, je crois que votre message est un droit de phrase et des blagsans d'être les mots-clés bloqués?
"rabbit ate the carrot rot".replace(/(?<![a-zA-Z])rot(?![A-Za-z])/,'') To provide an idea, use a Regular Expression, such as the rule here, rot before and after the existence of a non-letter to remove the rot