анти-мат бот discord.js
Но это не совсем то, что мне надо. Мне надо что-бы он удалял только сообщения с матом, а без мата оставлял.Вот что у меня получилось:
bot.on('message', async message => {
if(message.author.id == "748788241867603979"){
let filterwordslist = ["лох", "пидор", "сука", "блять"];
let messageArray = message.content.split(" ");
let args = messageArray.slice(0);
const [...restArgs] = args;
const text = restArgs.join(' ');
let edit = text;
filterwordslist.forEach(item => {
edit = edit.replace(
new RegExp(`(^|[^а-я])${item}([^а-я]|$)`, "gmi"),
"$1`*цензура*`$2"
);
});
if(сообщение с матом){
message.delete();
message.channel.send({
embed: new Discord.MessageEmbed()
.setColor("RANDOM")
.setAuthor('FilterWords', message.guild.iconURL())
.setDescription(`${message.author}: ` + edit)
});
}
}
})
Вопрос у меня в этом условии:
if(сообщение с матом){
Ответы (3 шт):
Судя по коду, переменная edit в результате выполнения метода forEach содержит текст с заменами; а переменная text (выше) - похоже, содержит нетронутый исходный текст.
Значит, сравнив значение этих переменных, можно определить наличие замен (а следовательно, и мата) в исходном тексте:
/*....*/
filterwordslist.forEach(item => {
edit = edit.replace(
new RegExp(`(^|[^а-я])${item}([^а-я]|$)`, "gmi"),
"$1`*цензура*`$2"
);
});
if (edit !== text) {
message.delete();
/*....*/
}
if (message.content.match(/(?<![а-яё])(плохоеслово|другоеслово|ещё)(?![а-яё])/i)) {
Вынеси список запрещённых слов в константу вне всех методов:
const blacklist = new Set(["слово", "второе", "третье"]);
А потом проверяй:
if (message.content.match(/[а-яё]/gi)?.some(word => blacklist.has(word))) {
Это одно из самых эффективных решений.
Если версия ноды не позволяет использовать ?., то можно вынести в переменную и сделать 2 проверки, либо написать так:
if ((message.content.match(/[а-яё]/gi) || []).some(word => blacklist.has(word))) {