для такого функционала используется база данных.
при обнаружении ссылки, в БД записывается:
- ID сервера, на котором пользователь отправил ссылку
- ID пользователя
- кол-во предупреждений у пользователя (если это его первое нарушение - 1, если повторное - текущее кол-во предупреждений + 1
далее, делается запрос к БД и полученные данные сверяются.
если же вы на данном этапе не готовы её использовать, можно всё это делать записывая данные, например, в коллекцию:
function is_url(str) {
let regexp = /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/\S*)?$/;
if(regexp.test(str)) {
return true;
} else {
return false;
}
}
let warns = new Map();
client.on('messageCreate', async message => {
if (is_url(message.content) === true) {
const embed = new MessageEmbed()
.setTitle('Обнаружена ссылка!')
.setDescription(`Ссылки на нашем сервере запрещены\nНе присылай их больше пожалуйста, это наказуемо.`)
.setThumbnail(message.author.avatarURL())
.setTimestamp()
.setColor('RED')
.setFooter('Ознакомьтесь с правилами')
if (!warns.has(message.author.id)) {
warns.set(message.author.id, 1);
message.channel.send({ content: `<@${message.author.id}>`, embeds: [embed] })
} else {
warns.set(message.author.id, warns.get(message.author.id) + 1);
if (warns.get(message.author.id) === 2) {
return функция_мута();
} else if (warns.get(message.author.id) >= 3) {
warns.delete(message.author.id);
return функция_бана();
}
}
}
});
учтите, что для подобного варианта нужно обеспечивать бесперебойную работу бота, т.к после его остановки содержимое коллекции очистится.