const Discord = require(`discord.js`);
const client = new Discord.Client();
const token = `TOKEN`;
const prefix = `+`;
const antilink = false;
const discordlinkonly = false;
const warnuserslist = new Object();
const warnlimit = 3;
const warnactions = `mute`; // mute;durée | kick | ban;durée
function USERISWARN(id) {
if (!warnuserslist[id]) {
return false;
} else if (warnuserslist[id]) {
return true;
};
};
function WARNUSER(message) {
message.delete().then(async (msg) => {
if (!USERISWARN(msg.member.id)) warnuserslist[msg.member.id] = 1;
else if (USERISWARN(msg.member.id)) warnuserslist[msg.member.id] += 1;
if (warnuserslist[msg.member.id] >= warnlimit) {
const actions = [`mute`, `kick`, `ban`]; // KICK ET BAN NON TESTER !!!
if (!actions.some(action => warnactions.toLocaleLowerCase().includes(action))) return;
else if (actions.some(action => warnactions.toLocaleLowerCase().includes(action)) && warnactions.toLocaleLowerCase().includes(`mute`)) {
let muteRole = msg.guild.roles.cache.find(x => x.name == `Muet`);
if (!muteRole) {
try {
muteRole = await msg.guild.roles.create({
data: {
name: `Muet`,
color: `#514f48`,
hoist: true,
permissions: []
}
});
msg.guild.channels.cache.forEach(async (channel) => {
await channel.overwritePermissions([{
id: muteRole.id,
deny: [`SEND_MESSAGES`, `SEND_TTS_MESSAGES`, `ATTACH_FILES`, `ADD_REACTIONS`, `SPEAK`, `STREAM`]
}]);
});
} catch (error) {
if (msg.guild.roles.cache.find(x => x.name == `Muet`)) msg.guild.roles.cache.find(x => x.name == `Muet`).delete();
return console.error(error);
};
};
if (!msg.member.roles.cache.has(muteRole.id)) {
console.log(`${msg.member.displayName} est muet !`);
if ((/^-?\d+$/.test(warnactions.toLocaleLowerCase().split(`;`)[1]))) {
msg.member.roles.add(muteRole);
return setTimeout(() => {
console.log(`${msg.member.displayName} n'est plus muet !`);
return msg.member.roles.remove(muteRole);
}, warnactions.toLocaleLowerCase().split(`;`)[1] * 1000);
} else return msg.member.roles.add(muteRole);
};
} else if (actions.some(action => warnactions.toLocaleLowerCase().includes(action)) && warnactions.toLocaleLowerCase().includes(`kick`)) {
console.log(`${msg.member.displayName} est kick !`);
return msg.member.kick();
} else if (actions.some(action => warnactions.toLocaleLowerCase().includes(action)) && warnactions.toLocaleLowerCase().includes(`ban`)) {
console.log(`${msg.member.displayName} est ban !`);
if ((/^-?\d+$/.test(warnactions.toLocaleLowerCase().split(`;`)[1]))) {
msg.guild.members.ban(msg.member.id);
return setTimeout(() => {
console.log(`${msg.member.displayName} n'est plus ban !`);
return msg.guild.members.unban(msg.member.id);
}, warnactions.toLocaleLowerCase().split(`;`)[1] * 1000);
} else return msg.guild.members.ban(msg.member.id);
};
};
});
};
client.on(`ready`, () => {
console.log(`${client.user.username} est en ligne !`);
});
client.on(`message`, async (message) => {
if (message.author.bot || message.channel.type != `text`) return;
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
if (antilink == true) {
const discordlink = [`discord.gg`, `discordapp.com/invite`, `canary.discord.com/invite`, `ptb.discord.com/invite`];
const matchesurl = message.content.toLocaleLowerCase().match(/(https?:\/\/[^\s]+)/g) ? message.content.toLocaleLowerCase().match(/(https?:\/\/[^\s]+)/g) : undefined;
if (matchesurl ? discordlink.some(link => matchesurl.some(url => url.includes(link))) == true || discordlink.some(link => message.content.toLocaleLowerCase().includes(link)) && discordlinkonly == true : discordlink.some(link => message.content.toLocaleLowerCase().includes(link)) == true && discordlinkonly == true) return WARNUSER(message);
else if (matchesurl && discordlinkonly == false) return WARNUSER(message);
};
if (message.content.indexOf(prefix) != 0) return;
if (command == `warn-delete`) {
if (!message.member.hasPermission(`ADMINISTRATOR`)) {
const embed = new Discord.MessageEmbed()
.setColor(`#0099FF`)
.setAuthor(message.author.username, message.author.displayAvatarURL({
dynamic: true
}))
.setTitle(`Vous n'avez pas les permissions !`)
.setTimestamp()
.setFooter(client.user.username, client.user.displayAvatarURL({
dynamic: true
}));
return message.channel.send(embed);
};
let target = message.mentions.users.first() || message.author;
if (USERISWARN(target.id)) {
if (args[0] && (/^-?\d+$/.test(args[0]))) {
if (args[0] > warnuserslist[target.id].length) {
delete warnuserslist[target.id];
let muteRole = message.guild.roles.cache.find(x => x.name == `Muet`);
if (message.member.roles.cache.has(muteRole.id)) message.member.roles.remove(muteRole);
console.log(`${target.username} n'as plus de warn !`);
const embed = new Discord.MessageEmbed()
.setColor(`#0099FF`)
.setAuthor(message.author.username, message.author.displayAvatarURL({
dynamic: true
}))
.setTitle(target.id == message.author.id ? `Vous n'avez plus de warn !` : `${target.username} n'as plus warn !`)
.setTimestamp()
.setFooter(client.user.username, client.user.displayAvatarURL({
dynamic: true
}));
return message.channel.send(embed);
} else {
warnuserslist[target.id] -= args[0];
console.log(`${target.username} à maintenant ${warnuserslist[target.id]} warn !`);
const embed = new Discord.MessageEmbed()
.setColor(`#0099FF`)
.setAuthor(message.author.username, message.author.displayAvatarURL({
dynamic: true
}))
.setTitle(target.id == message.author.id ? `Vous avez maintenant ${warnuserslist[target.id]} warn !` : `${target.username} à maintenant ${warnuserslist[target.id]} warn !`)
.setTimestamp()
.setFooter(client.user.username, client.user.displayAvatarURL({
dynamic: true
}));
return message.channel.send(embed);
};
} else {
delete warnuserslist[target.id];
let muteRole = message.guild.roles.cache.find(x => x.name == `Muet`);
if (message.member.roles.cache.has(muteRole.id)) message.member.roles.remove(muteRole);
console.log(`${target.username} n'as plus de warn !`);
const embed = new Discord.MessageEmbed()
.setColor(`#0099FF`)
.setAuthor(message.author.username, message.author.displayAvatarURL({
dynamic: true
}))
.setTitle(target.id == message.author.id ? `Vous n'avez plus de warn !` : `${target.username} n'as plus warn !`)
.setTimestamp()
.setFooter(client.user.username, client.user.displayAvatarURL({
dynamic: true
}));
return message.channel.send(embed);
};
} else if (!USERISWARN(target.id)) {
const embed = new Discord.MessageEmbed()
.setColor(`#0099FF`)
.setAuthor(message.author.username, message.author.displayAvatarURL({
dynamic: true
}))
.setTitle(target.id == message.author.id ? `Vous n'avez aucun warn !` : `${target.username} n'as aucun warn !`)
.setTimestamp()
.setFooter(client.user.username, client.user.displayAvatarURL({
dynamic: true
}));
return message.channel.send(embed);
};
} else if (command == `warn-info`) {
let target = message.mentions.users.first() || message.author;
const embed = new Discord.MessageEmbed()
.setColor(`#0099FF`)
.setAuthor(message.author.username, message.author.displayAvatarURL({
dynamic: true
}))
.addField(`⚠️ • __Nombres de warn__`, `\`${warnuserslist[target.id] || `Aucun Warn`}\``)
.setTimestamp()
.setFooter(client.user.username, client.user.displayAvatarURL({
dynamic: true
}));
return message.channel.send(embed);
} else if (command == `warn-help`) { // STATIQUE HELP
const embed = new Discord.MessageEmbed()
.setColor(`#0099FF`)
.setAuthor(message.author.username, message.author.displayAvatarURL({
dynamic: true
}))
.addField(`🗑 • __warn-delete__`, `\`Supprime les warns d'un membre.\`\n__Utilisation:__ *[nombres de warn ou rien] [mention d'un membre ou rien]*\n***Note: une valeur supérieure au nombre de warn ou rien supprime tous les warns !***`)
.addField(`❔ • __warn-info__`, `\`Affiche si un membre a un warn et combien il en a.\`\n__Utilisation:__ *[mention d'un membre ou rien]*`)
.setTimestamp()
.setFooter(client.user.username, client.user.displayAvatarURL({
dynamic: true
}));
return message.channel.send(embed);
};
});
client.login(token);