mirror of
https://github.com/arthur-pbty/gestion.git
synced 2026-06-08 15:18:52 +02:00
grand commit que tutur attend ( marche pas le raidmode en dev)
sinon il y a pleins de truc comme les anti raid , des coorectif ect
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder} = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
module.exports = {
|
||||
name: Events.ChannelCreate,
|
||||
async execute(channel, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = channel.guild.id;
|
||||
const guild = channel.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ChannelCreate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antichannelConfig = data[guildId]?.antichannel;
|
||||
if (!antichannelConfig || antichannelConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antichannelConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
await channel.delete('Anti-channel protection');
|
||||
punish(user, antichannelConfig.action, channel.guild);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
await channel.delete('Anti-channel protection');
|
||||
punish(user, antichannelConfig.action, channel.guild);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
await channel.delete('Anti-channel protection');
|
||||
punish(user, antichannelConfig.action, channel.guild);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
}
|
||||
}catch(err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-channel protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-channel protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-channel protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a créé un salon et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder} = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
module.exports = {
|
||||
name: Events.ChannelDelete,
|
||||
async execute(channel, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = channel.guild.id;
|
||||
const guild = channel.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ChannelDelete,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antichannelConfig = data[guildId]?.antichannel;
|
||||
if (!antichannelConfig || antichannelConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antichannelConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antichannelConfig.action, channel.guild, channel);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antichannelConfig.action, channel.guild, channel);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antichannelConfig.action, channel.guild, channel);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
}
|
||||
}catch(err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild, channel) {
|
||||
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-channel protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-channel protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-channel protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
try {
|
||||
channel.clone({
|
||||
name: channel.name,
|
||||
permissions: channel.permissionsOverwrites,
|
||||
type: channel.type,
|
||||
parent: channel.parent,
|
||||
topic: channel.withTopic,
|
||||
nsfw: channel.nsfw,
|
||||
birate: channel.bitrate,
|
||||
userLimit: channel.userLimit,
|
||||
rateLimitPerUser: channel.rateLimitPerUser,
|
||||
permissions: channel.withPermissions,
|
||||
position: channel.rawPosition,
|
||||
reason: 'Anti-channel protection',
|
||||
})
|
||||
} catch (error) {
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a supprimée un salon et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ChannelUpdate,
|
||||
async execute(oldChannel, newChannel, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = newChannel.guild.id;
|
||||
const guild = newChannel.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ChannelUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antichannelConfig = data[guildId]?.antichannel;
|
||||
if (!antichannelConfig || antichannelConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antichannelConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antichannelConfig.action, guild, newChannel, oldChannel);
|
||||
sendlog(user, antichannelConfig.action, newChannel.guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antichannelConfig.action, guild, newChannel, oldChannel);
|
||||
sendlog(user, antichannelConfig.action, newChannel.guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antichannelConfig.action, guild, newChannel, oldChannel);
|
||||
sendlog(user, antichannelConfig.action, newChannel.guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild, newChannel, oldChannel) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-channel protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-channel protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-channel protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
try {
|
||||
await newChannel.edit({
|
||||
name: oldChannel.name,
|
||||
permissions: oldChannel.permissionOverwrites,
|
||||
type: oldChannel.type,
|
||||
parent: oldChannel.parent,
|
||||
topic: oldChannel.topic,
|
||||
nsfw: oldChannel.nsfw,
|
||||
bitrate: oldChannel.bitrate,
|
||||
userLimit: oldChannel.userLimit,
|
||||
rateLimitPerUser: oldChannel.rateLimitPerUser,
|
||||
position: oldChannel.rawPosition,
|
||||
reason: 'Anti-channel protection',
|
||||
});
|
||||
newChannel.overwritePermissions(oldChannel.permissionOverwrites)
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a modifié un salon et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
const banMap = new Map();
|
||||
setInterval(() => {
|
||||
banMap.clear();
|
||||
}, 10 * 60 * 1000);
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildBanAdd,
|
||||
async execute(ban, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = ban.guild.id;
|
||||
const guild = ban.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.MemberBanAdd,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
const antibanConfig = data[guildId]?.antiban;
|
||||
if (!antibanConfig || antibanConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antibanConfig.type;
|
||||
const banLimit = antibanConfig.number;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
if (!banMap.has(guildId)) {
|
||||
banMap.set(guildId, new Map());
|
||||
}
|
||||
const guildBanMap = banMap.get(guildId);
|
||||
guildBanMap.set(user.id, (guildBanMap.get(user.id) || 0) + 1);
|
||||
if (guildBanMap.get(user.id) >= banLimit) {
|
||||
punish(user, antibanConfig.action, guild);
|
||||
}
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
if (!banMap.has(guildId)) {
|
||||
banMap.set(guildId, new Map());
|
||||
}
|
||||
const guildBanMap = banMap.get(guildId);
|
||||
guildBanMap.set(user.id, (guildBanMap.get(user.id) || 0) + 1);
|
||||
if (guildBanMap.get(user.id) >= banLimit) {
|
||||
punish(user, antibanConfig.action, guild);
|
||||
}
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
if (!banMap.has(guildId)) {
|
||||
banMap.set(guildId, new Map());
|
||||
}
|
||||
const guildBanMap = banMap.get(guildId);
|
||||
guildBanMap.set(user.id, (guildBanMap.get(user.id) || 0) + 1);
|
||||
if (guildBanMap.get(user.id) >= banLimit) {
|
||||
punish(user, antibanConfig.action, guild);
|
||||
}
|
||||
|
||||
}
|
||||
} catch (err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-role protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-role protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-role protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildMemberAdd,
|
||||
async execute(member, client) {
|
||||
if (member.user.bot) {
|
||||
const botId = client.user.id;
|
||||
const guildId = member.guild.id;
|
||||
const guild = member.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.BotAdd,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antibotConfig = data[guildId]?.antibot;
|
||||
if (!antibotConfig || antibotConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antibotConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antibotConfig.action, guild);
|
||||
await member.kick('Anti-bot protection');
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antibotConfig.action, guild);
|
||||
await member.kick('Anti-bot protection');
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antibotConfig.action, guild);
|
||||
await member.kick('Anti-bot protection');
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
}
|
||||
}else {
|
||||
const botId = client.user.id;
|
||||
const guildId = member.guild.id;
|
||||
const guild = member.guild;
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
const antijoinConfig = data[guildId]?.antijoin
|
||||
if(antijoinConfig && antijoinConfig?.type === 'on') {
|
||||
try{
|
||||
member.kick({ reason: 'Anti-join protection' });
|
||||
}catch(err) {
|
||||
}
|
||||
} else {
|
||||
const creationlimitConfig = data[guildId]?.creationLimit
|
||||
if (creationlimitConfig) {
|
||||
let limitInMilliseconds;
|
||||
const lastChar = creationlimitConfig.slice(-1);
|
||||
const number = parseInt(creationlimitConfig.slice(0, -1), 10);
|
||||
switch (lastChar) {
|
||||
case 'm':
|
||||
limitInMilliseconds = number * 60 * 1000;
|
||||
break;
|
||||
case 'h':
|
||||
limitInMilliseconds = number * 60 * 60 * 1000;
|
||||
break;
|
||||
case 'd':
|
||||
limitInMilliseconds = number * 24 * 60 * 60 * 1000;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
const memberCreationDate = member.user.createdAt;
|
||||
const currentDate = new Date();
|
||||
const timeDifference = currentDate - memberCreationDate;
|
||||
if (timeDifference < limitInMilliseconds) {
|
||||
return member.kick('Votre compte est trop récent.').catch(console.error);
|
||||
}else {
|
||||
const invites = await member.guild.invites.fetch();
|
||||
const invite = invites.find(i => i.uses > 1);
|
||||
if (invite && invite.inviter) {
|
||||
await updateInviteCount(member.guild.id, invite.inviter.id);
|
||||
return;
|
||||
|
||||
}
|
||||
}
|
||||
}else {
|
||||
|
||||
const invites = await member.guild.invites.fetch();
|
||||
const invite = invites.find(i => i.uses > 1);
|
||||
if (invite && invite.inviter) {
|
||||
await updateInviteCount(member.guild.id, invite.inviter.id);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-bot protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-bot protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-bot protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
function updateInviteCount(guildId, memberId) {
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
db.run(`INSERT INTO invitations (guild_id, member_id, invite_count)
|
||||
VALUES (?, ?, 1)
|
||||
ON CONFLICT(guild_id, member_id) DO UPDATE SET invite_count = invite_count + 1`,
|
||||
[guildId, memberId], function(err) {
|
||||
if (err) {
|
||||
return console.error(err.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a ajoutée un bot et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
module.exports = {
|
||||
name: Events.GuildUpdate,
|
||||
async execute(oldGuild, newGuild, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = oldGuild.id;
|
||||
const guild = oldGuild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.GuildUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antibotConfig = data[guildId]?.antiupdate;
|
||||
if (!antibotConfig || antibotConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antibotConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antibotConfig.action, newGuild);
|
||||
await updateGuildSettings(oldGuild, newGuild);
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antibotConfig.action, newGuild);
|
||||
await updateGuildSettings(oldGuild, newGuild);
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antibotConfig.action, newGuild);
|
||||
await updateGuildSettings(oldGuild, newGuild);
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
}
|
||||
}catch(err) {
|
||||
console.log(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-update protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-update protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-update protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function updateGuildSettings(oldGuild, newGuild) {
|
||||
if (oldGuild.name !== newGuild.name) {
|
||||
await newGuild.setName(oldGuild.name);
|
||||
}
|
||||
if (oldGuild.iconURL({ dynamic: true }) !== newGuild.iconURL({ dynamic: true })) {
|
||||
await newGuild.setIcon(oldGuild.iconURL({ dynamic: true }));
|
||||
}
|
||||
if (oldGuild.bannerURL() !== newGuild.bannerURL()) {
|
||||
await newGuild.setBanner(oldGuild.bannerURL());
|
||||
}
|
||||
if (oldGuild.systemChannel !== newGuild.systemChannel) {
|
||||
await newGuild.setSystemChannel(oldGuild.systemChannel);
|
||||
}
|
||||
if (oldGuild.systemChannelFlags !== newGuild.systemChannelFlags) {
|
||||
await newGuild.setSystemChannelFlags(oldGuild.systemChannelFlags);
|
||||
}
|
||||
if (oldGuild.verificationLevel !== newGuild.verificationLevel) {
|
||||
await newGuild.setVerificationLevel(oldGuild.verificationLevel);
|
||||
}
|
||||
if (oldGuild.widget !== newGuild.widget) {
|
||||
await newGuild.setWidget(oldGuild.widget);
|
||||
}
|
||||
if (oldGuild.splashURL !== newGuild.splashURL) {
|
||||
await newGuild.setSplash(oldGuild.splashURL);
|
||||
}
|
||||
if (oldGuild.rulesChannel !== newGuild.rulesChannel) {
|
||||
await newGuild.setRulesChannel(oldGuild.rulesChannel);
|
||||
}
|
||||
if (oldGuild.publicUpdatesChannel !== newGuild.publicUpdatesChannel) {
|
||||
await newGuild.setPublicUpdatesChannel(oldGuild.publicUpdatesChannel);
|
||||
}
|
||||
if (oldGuild.defaultMessageNotifications !== newGuild.defaultMessageNotifications) {
|
||||
await newGuild.setDefaultMessageNotifications(oldGuild.defaultMessageNotifications);
|
||||
}
|
||||
if (oldGuild.afkChannel !== newGuild.afkChannel) {
|
||||
await newGuild.setAFKChannel(oldGuild.afkChannel);
|
||||
}
|
||||
if (oldGuild.region !== newGuild.region) {
|
||||
await newGuild.setRegion(oldGuild.region)
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a modifiée le serveur et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const { Events, ChannelType } = require("discord.js");
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.MessageCreate,
|
||||
async execute(message, client) {
|
||||
const botId = message.client.user.id;
|
||||
const guildId = message.guild.id;
|
||||
const user = message.member;
|
||||
if (message.channel.type === ChannelType.DM) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antimentionConfig = data[guildId]?.antimention;
|
||||
let statusMention = 'off';
|
||||
let mentionLimit = 0;
|
||||
|
||||
if (antimentionConfig) {
|
||||
({ type: statusMention, nombre: mentionLimit } = antimentionConfig);
|
||||
}
|
||||
|
||||
if (statusMention !== "off") {
|
||||
const mentionCount = message.mentions.users.size;
|
||||
if (mentionLimit === 0) return;
|
||||
if (mentionCount > mentionLimit) {
|
||||
if (statusMention === "wl" || statusMention === "whitelist") {
|
||||
if (await getPermissionLevel(user, client) >= 10) return;
|
||||
if (whitelist[message.author.id]) return;
|
||||
message.delete().catch(err => {});
|
||||
}else if (statusMention === "owner") {
|
||||
const userlevelsawait = await getPermissionLevel(user, client)
|
||||
if (userlevelsawait >= 10) return;
|
||||
message.delete().catch(err => {});
|
||||
}else if (statusMention === "buyer") {
|
||||
if (await getPermissionLevel(user, client) === 11) return;
|
||||
if (whitelist[message.author.id]) return;
|
||||
message.delete().catch(err => {});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,111 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildRoleCreate,
|
||||
async execute(role, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = role.guild.id;
|
||||
const guild = role.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.RoleCreate,
|
||||
limit: 1,
|
||||
});
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiroleConfig = data[guildId]?.antirole;
|
||||
if (!antiroleConfig || antiroleConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiroleConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
await role.delete('Anti-role protection');
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
await role.delete('Anti-role protection');
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
await role.delete('Anti-role protection');
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-role protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-role protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-role protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a crée un role et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,223 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildRoleDelete,
|
||||
async execute(role, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = role.guild.id;
|
||||
const guild = role.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.RoleDelete,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
if (!firstEntry) return;
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiroleConfig = data[guildId]?.antirole;
|
||||
if (!antiroleConfig || antiroleConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiroleConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
let membersWithRole = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM antiraid WHERE guild = ?', [guildId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value).role[role.id] : []);
|
||||
});
|
||||
});
|
||||
const newRole = await role.guild.roles.create({
|
||||
data: {
|
||||
name: 'TempRole',
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
permissions: role.permissions,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
},
|
||||
reason: 'Anti-role protection',
|
||||
});
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: role.name,
|
||||
permissions: role.permissions,
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
}, 'Restauration du rôle supprimé');
|
||||
} catch (error) {
|
||||
}
|
||||
membersWithRole.forEach(async (memberId) => {
|
||||
const member = guild.members.cache.get(memberId);
|
||||
if (member) {
|
||||
await member.roles.add(newRole, 'Anti-role protection');
|
||||
}
|
||||
});
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
let membersWithRole = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM antiraid WHERE guild = ?', [guildId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value).role[role.id] : []);
|
||||
});
|
||||
});
|
||||
const newRole = await role.guild.roles.create({
|
||||
data: {
|
||||
name: 'TempRole',
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
permissions: role.permissions,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
},
|
||||
reason: 'Anti-role protection',
|
||||
});
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: role.name,
|
||||
permissions: role.permissions,
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
}, 'Restauration du rôle supprimé');
|
||||
} catch (error) {
|
||||
}
|
||||
|
||||
membersWithRole.forEach(async (memberId) => {
|
||||
const member = guild.members.cache.get(memberId);
|
||||
if (member) {
|
||||
await member.roles.add(newRole, 'Anti-role protection');
|
||||
}
|
||||
});
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
let membersWithRole = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM antiraid WHERE guild = ?', [guildId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value).role[role.id] : []);
|
||||
});
|
||||
});
|
||||
const newRole = await role.guild.roles.create({
|
||||
data: {
|
||||
name: 'TempRole',
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
permissions: role.permissions,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
},
|
||||
reason: 'Anti-role protection',
|
||||
});
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: role.name,
|
||||
permissions: role.permissions,
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
}, 'Restauration du rôle supprimé');
|
||||
} catch (error) {
|
||||
}
|
||||
membersWithRole.forEach(async (memberId) => {
|
||||
const member = guild.members.cache.get(memberId);
|
||||
if (member) {
|
||||
await member.roles.add(newRole, 'Anti-role protection');
|
||||
}
|
||||
});
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-role protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-role protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-role protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a modifiée un role et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildRoleUpdate,
|
||||
async execute(oldRole, newRole, client) {
|
||||
if (oldRole.name !== newRole.name || oldRole.permissions.bitfield !== newRole.permissions.bitfield) {
|
||||
const botId = client.user.id;
|
||||
const guildId = newRole.guild.id;
|
||||
const guild = newRole.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.RoleUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiroleConfig = data[guildId]?.antirole;
|
||||
if (!antiroleConfig || antiroleConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiroleConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: oldRole.name,
|
||||
permissions: oldRole.permissions,
|
||||
color: oldRole.color,
|
||||
hoist: oldRole.hoist,
|
||||
mentionable: oldRole.mentionable,
|
||||
position: oldRole.position,
|
||||
}, 'Restauration du rôle modifié');
|
||||
} catch (error) {
|
||||
}
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: oldRole.name,
|
||||
permissions: oldRole.permissions,
|
||||
color: oldRole.color,
|
||||
hoist: oldRole.hoist,
|
||||
mentionable: oldRole.mentionable,
|
||||
position: oldRole.position,
|
||||
}, 'Restauration du rôle modifié');
|
||||
} catch (error) {
|
||||
}
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: oldRole.name,
|
||||
permissions: oldRole.permissions,
|
||||
color: oldRole.color,
|
||||
hoist: oldRole.hoist,
|
||||
mentionable: oldRole.mentionable,
|
||||
position: oldRole.position,
|
||||
}, 'Restauration du rôle modifié');
|
||||
} catch (error) {
|
||||
}
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-role protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-role protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-role protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a supprimée un role et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField , EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ThreadCreate,
|
||||
async execute(thread, okman ,client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = thread.guild.id;
|
||||
const guild = thread.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ThreadCreate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiThreadConfig = data[guildId]?.antiThread;
|
||||
if (!antiThreadConfig || antiThreadConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiThreadConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await thread.delete('Anti-thread protection');
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await thread.delete('Anti-thread protection');
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await thread.delete('Anti-thread protection');
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-thread protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-thread protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-thread protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a crée un fil et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField , EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ThreadDelete,
|
||||
async execute(thread ,client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = thread.guild.id;
|
||||
const guild = thread.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ThreadDelete,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiThreadConfig = data[guildId]?.antiThread;
|
||||
if (!antiThreadConfig || antiThreadConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiThreadConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-thread protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-thread protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-thread protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a supprimée un fil et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ThreadUpdate,
|
||||
async execute(oldThread, newThread, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = newThread.guild.id;
|
||||
const guild = newThread.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ThreadUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
const antiThreadConfig = data[guildId]?.antiThread;
|
||||
if (!antiThreadConfig || antiThreadConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiThreadConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await newThread.edit({
|
||||
name: oldThread.name,
|
||||
autoArchiveDuration: oldThread.autoArchiveDuration,
|
||||
reason: 'Anti-thread protection'
|
||||
});
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await newThread.edit({
|
||||
name: oldThread.name,
|
||||
autoArchiveDuration: oldThread.autoArchiveDuration,
|
||||
reason: 'Anti-thread protection'
|
||||
});
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await newThread.edit({
|
||||
name: oldThread.name,
|
||||
autoArchiveDuration: oldThread.autoArchiveDuration,
|
||||
reason: 'Anti-thread protection'
|
||||
});
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-thread protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-thread protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-thread protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a modifiée un fil et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.WebhooksUpdate,
|
||||
async execute(channel, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = channel.guild.id;
|
||||
const guild = channel.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.WebhookCreate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiwebhookConfig = data[guildId]?.antiwebhook;
|
||||
if (!antiwebhookConfig || antiwebhookConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiwebhookConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiwebhookConfig.action, guild);
|
||||
const webhookId = firstEntry.targetId;
|
||||
const webhook = await client.fetchWebhook(webhookId);
|
||||
await webhook.delete('Anti-webhook protection');
|
||||
await sendlog(user, antiwebhookConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiwebhookConfig.action, guild);
|
||||
const webhookId = firstEntry.targetId;
|
||||
const webhook = await client.fetchWebhook(webhookId);
|
||||
await webhook.delete('Anti-webhook protection');
|
||||
await sendlog(user, antiwebhookConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiwebhookConfig.action, guild);
|
||||
const webhookId = firstEntry.targetId;
|
||||
const webhook = await client.fetchWebhook(webhookId);
|
||||
await webhook.delete('Anti-webhook protection');
|
||||
await sendlog(user, antiwebhookConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-webhook protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-webhook protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-webhook protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a crée un webhook et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField , EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildMemberUpdate,
|
||||
async execute(oldMember, newMember, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = newMember.guild.id;
|
||||
const guild = newMember.guild;
|
||||
if (!oldMember.permissions.has(PermissionsBitField.Flags.Administrator) && newMember.permissions.has(PermissionsBitField.Flags.Administrator)) {
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.MemberRoleUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiadminConfig = data[guildId]?.antiadmin;
|
||||
if (!antiadminConfig || antiadminConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiadminConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
];
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
const member = guild.members.cache.get(newMember.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-admin protection');
|
||||
}
|
||||
punish(user, antiadminConfig.action, guild);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
const member = guild.members.cache.get(newMember.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-admin protection');
|
||||
}
|
||||
punish(user, antiadminConfig.action, guild);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
const member = guild.members.cache.get(newMember.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-admin protection');
|
||||
}
|
||||
punish(user, antiadminConfig.action, guild);
|
||||
}
|
||||
} catch (err) {
|
||||
}
|
||||
}else {
|
||||
const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
|
||||
const removedRoles = oldMember.roles.cache.filter(role => !newMember.roles.cache.has(role.id));
|
||||
|
||||
if (addedRoles.size === 0 && removedRoles.size === 0) return;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.MemberRoleUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === newMember.client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiRoleConfig = data[guildId]?.antirole;
|
||||
if (!antiRoleConfig || antiRoleConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiRoleConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, newMember.client);
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiRoleConfig.action, guild);
|
||||
await removeAddedRoles(newMember, addedRoles);
|
||||
await addRemovedRoles(newMember, removedRoles);
|
||||
await sendlog(user, antiRoleConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiRoleConfig.action, guild);
|
||||
await removeAddedRoles(newMember, addedRoles);
|
||||
await addRemovedRoles(newMember, removedRoles);
|
||||
await sendlog(user, antiRoleConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiRoleConfig.action, guild);
|
||||
await removeAddedRoles(newMember, addedRoles);
|
||||
await addRemovedRoles(newMember, removedRoles);
|
||||
await sendlog(user, antiRoleConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-admin protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-admin protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-admin protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function removeAddedRoles(member, addedRoles) {
|
||||
await member.roles.remove(addedRoles, 'Anti-role protection');
|
||||
}
|
||||
|
||||
async function addRemovedRoles(member, removedRoles) {
|
||||
await member.roles.add(removedRoles, 'Anti-role protection');
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a ajoutée un role et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,16 @@
|
||||
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const { Events, ChannelType } = require("discord.js");
|
||||
const { Events, ChannelType, EmbedBuilder } = require("discord.js");
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.MessageCreate,
|
||||
async execute(message, client) {
|
||||
const botId = message.client.user.id;
|
||||
const guildId = message.guild.id;
|
||||
|
||||
if (message.channel.type === ChannelType.DM) return;
|
||||
if (!message.content.includes('@everyone')) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
@@ -19,28 +20,70 @@ module.exports = {
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antieveryoneConfig = data[guildId]?.antieveryone;
|
||||
let status = 'off';
|
||||
|
||||
const antileakConfig = data[guildId]?.antileak;
|
||||
const antimentionConfig = data[guildId]?.antimention;
|
||||
let statusEveryone = 'off';
|
||||
let statusLeak = 'off';
|
||||
let statusMention = 'off';
|
||||
let mentionLimit = 0;
|
||||
|
||||
if (antieveryoneConfig) {
|
||||
({ status} = antieveryoneConfig);
|
||||
}
|
||||
if (status === "off") return;
|
||||
({ status: statusEveryone } = antieveryoneConfig);
|
||||
}
|
||||
|
||||
if (antileakConfig) {
|
||||
({ status: statusLeak } = antileakConfig);
|
||||
}
|
||||
if (antimentionConfig) {
|
||||
({ status: statusMention, nombre: mentionLimit } = antimentionConfig);
|
||||
}
|
||||
if (statusEveryone === "off" && statusLeak === "off") return;
|
||||
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const user = message.member;
|
||||
if (status === "on") {
|
||||
if (await getPermissionLevel(user, client) >= 10) return;
|
||||
if (whitelist[message.author.id]) return;
|
||||
message.delete().catch(err => {;
|
||||
});
|
||||
} else if (status === "max") {
|
||||
const levelperm = await getPermissionLevel(user, client);
|
||||
if (levelperm >= 10) return;
|
||||
message.delete().catch(err => {;
|
||||
});
|
||||
|
||||
if (statusEveryone !== "off" && message.content.includes('@everyone')) {
|
||||
if(message.author.id === client.user.id)return;
|
||||
if (statusEveryone === "on") {
|
||||
if (await getPermissionLevel(user, client) >= 10) return;
|
||||
if (whitelist[message.author.id]) return;
|
||||
message.delete().catch(err => {;
|
||||
});
|
||||
} else if (statusEveryone === "max") {
|
||||
const levelperm = await getPermissionLevel(user, client);
|
||||
if (levelperm >= 10) return;
|
||||
message.delete().catch(err => {;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (statusLeak !== "off") {
|
||||
if (message.author.bot) return;
|
||||
const ipRegex = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/;
|
||||
const phoneRegex = /\b(?:\+?(\d{1,3}))?[-. (]*(?:\d{1,4})[-. )]*(\d{1,3})[-. ]*(\d{2,4})\b/;
|
||||
const addressRegex = /\b\d{1,5} [\w\s]+(?:, [\w\s]+)*\b/;
|
||||
const cardRegex = /\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9]{2})[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})\b/;
|
||||
|
||||
const cardMatch = message.content.match(cardRegex);
|
||||
const ipMatch = message.content.match(ipRegex);
|
||||
const phoneMatch = message.content.match(phoneRegex);
|
||||
const addressMatch = message.content.match(addressRegex);
|
||||
|
||||
if (ipMatch || phoneMatch || addressMatch || cardMatch) {
|
||||
if (statusLeak === 'on') {
|
||||
if (await getPermissionLevel(user, client) >= 10) return;
|
||||
if (whitelist[message.author.id]) return;
|
||||
message.delete().catch(err => {});
|
||||
} else if (statusLeak === 'max') {
|
||||
const levelperm = await getPermissionLevel(user, client);
|
||||
if (levelperm >= 10) return;
|
||||
message.delete().catch(err => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,49 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const { Events } = require('discord.js');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ClientReady,
|
||||
async execute(client) {
|
||||
const db = new sqlite3.Database('myDatabase.db', (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
}
|
||||
console.log('Connected to the SQLite database.');
|
||||
});
|
||||
|
||||
async function recordMembersWithRole(guild) {
|
||||
if (!guild) return;
|
||||
|
||||
|
||||
const roles = guild.roles.cache;
|
||||
|
||||
let data = {
|
||||
role: {}
|
||||
};
|
||||
roles.forEach(role => {
|
||||
const membersWithRole = role.members.map(member => member.id);
|
||||
data.role[role.id] = membersWithRole;
|
||||
});
|
||||
|
||||
db.run('INSERT OR REPLACE INTO antiraid (guild, value) VALUES (?, ?)', [guild.id, JSON.stringify(data)], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function scheduleRoleRecording() {
|
||||
client.guilds.cache.forEach(guild => {
|
||||
recordMembersWithRole(guild);
|
||||
});
|
||||
|
||||
setInterval(() => {
|
||||
client.guilds.cache.forEach(guild => {
|
||||
recordMembersWithRole(guild);
|
||||
});
|
||||
}, 2 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
scheduleRoleRecording();
|
||||
},
|
||||
};
|
||||
@@ -19,7 +19,6 @@ module.exports = {
|
||||
|
||||
const roleDataArray = data[reaction.message.guild.id]?.rolereact?.[messageId];
|
||||
if (!Array.isArray(roleDataArray)) {
|
||||
console.error('Expected an array of role data objects, but received something else.');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ module.exports = {
|
||||
async execute(interaction, client) {
|
||||
const botId = client.user.id;
|
||||
const customId = interaction.customId;
|
||||
if (customId == undefined || customId === null) return;
|
||||
if (!customId.startsWith('rolebuttons_')) return;
|
||||
|
||||
const roleId = customId.split('_')[1];
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events } = require("discord.js");
|
||||
|
||||
module.exports = {
|
||||
name: Events.MessageReactionRemove,
|
||||
async execute(reaction, user, client) {
|
||||
if (user.bot) return;
|
||||
const messageId = reaction.message.id;
|
||||
const emoji = reaction.emoji.toString();
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const roleDataArray = data[reaction.message.guild.id]?.rolereact?.[messageId];
|
||||
if (!Array.isArray(roleDataArray)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const roleData = roleDataArray.find(r => r.emoji === emoji);
|
||||
if (!roleData) return;
|
||||
|
||||
const role = reaction.message.guild.roles.cache.get(roleData.roleId);
|
||||
if (!role) return;
|
||||
|
||||
const member = reaction.message.guild.members.cache.get(user.id);
|
||||
if (!member) return;
|
||||
await member.roles.remove(role);
|
||||
|
||||
},
|
||||
};
|
||||
+39
-1
@@ -63,6 +63,45 @@ module.exports = {
|
||||
} else {
|
||||
}
|
||||
});
|
||||
db.run(`CREATE TABLE IF NOT EXISTS status (
|
||||
botId TEXT PRIMARY KEY,
|
||||
type TEXT NOT NULL,
|
||||
status TEXT NOT NULL
|
||||
);`, (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
} else {
|
||||
}
|
||||
});
|
||||
db.run(`CREATE TABLE IF NOT EXISTS master (
|
||||
id TEXT PRIMARY KEY,
|
||||
value TEXT
|
||||
);`, (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
}
|
||||
|
||||
});
|
||||
db.run(`CREATE TABLE IF NOT EXISTS antiraid (
|
||||
guild TEXT PRIMARY KEY,
|
||||
value TEXT
|
||||
);`, (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
}
|
||||
|
||||
});
|
||||
db.run(`CREATE TABLE IF NOT EXISTS invitations (
|
||||
guild_id TEXT NOT NULL,
|
||||
member_id TEXT NOT NULL,
|
||||
invite_count INTEGER NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (guild_id, member_id)
|
||||
);;`, (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => {
|
||||
@@ -96,7 +135,6 @@ module.exports = {
|
||||
console.log(`Le bot ${client.user.tag} est en ligne
|
||||
lien d'invite > https://discord.com/oauth2/authorize?client_id=${client.user.id}&scope=bot&permissions=8`);
|
||||
|
||||
|
||||
//AntiCrash
|
||||
process.on('unhandledRejection', (error) => {
|
||||
console.log(' [antiCrash] :: Unhandled Rejection/Catch');
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, ActivityType } = require('discord.js');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ClientReady,
|
||||
async execute(client) {
|
||||
|
||||
db.get('SELECT type, status FROM status WHERE botId = ?', [client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return;
|
||||
}
|
||||
if (row) {
|
||||
const { type, status } = row;
|
||||
const url = 'https://www.twitch.tv/valou336_ytb';
|
||||
if (type === 'playing') {
|
||||
client.user.setPresence({
|
||||
activities: [{
|
||||
name: status,
|
||||
type: ActivityType.Playing,
|
||||
url: url
|
||||
}]
|
||||
});
|
||||
} else if (type === 'streaming') {
|
||||
client.user.setPresence({
|
||||
activities: [{
|
||||
name: status,
|
||||
type: ActivityType.Streaming,
|
||||
url: url
|
||||
}]
|
||||
});
|
||||
} else if (type === 'listening') {
|
||||
client.user.setPresence({
|
||||
activities: [{
|
||||
name: status,
|
||||
type: ActivityType.Listening,
|
||||
url: url
|
||||
}]
|
||||
});
|
||||
} else if (type === 'watching') {
|
||||
client.user.setPresence({
|
||||
activities: [{
|
||||
name: status,
|
||||
type: ActivityType.Watching,
|
||||
url: url
|
||||
}]
|
||||
});
|
||||
} else if (type === 'competing') {
|
||||
client.user.setPresence({
|
||||
activities: [{
|
||||
name: status,
|
||||
type: ActivityType.Competing,
|
||||
url: url
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -6,7 +6,6 @@ module.exports = {
|
||||
name: Events.GuildMemberAdd,
|
||||
async execute(member, client) {
|
||||
const botId = client.user.id;
|
||||
console.log(botId)
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
const {Events , ModalBuilder, TextInputStyle, ActionRowBuilder, TextInputBuilder , EmbedBuilder} = require("discord.js")
|
||||
const {Events , ModalBuilder, TextInputStyle, ActionRowBuilder, TextInputBuilder , EmbedBuilder, ButtonBuilder, ButtonStyle} = require("discord.js")
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db2 = new sqlite3.Database('myDatabase.db');
|
||||
const paginationEmbed = require('discordjs-button-pagination');
|
||||
|
||||
module.exports = {
|
||||
name: Events.InteractionCreate,
|
||||
async execute(interaction, client) {
|
||||
@@ -127,11 +129,10 @@ module.exports = {
|
||||
try {
|
||||
await registerMarriage(userId1, userId2, client);
|
||||
}catch(err){
|
||||
console.log(err)
|
||||
}
|
||||
|
||||
await interaction.reply({ content: '💒 Vous êtes maintenant mariés! 💒'});
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
async function registerMarriage(userId1, userId2, client) {
|
||||
|
||||
@@ -34,13 +34,11 @@ module.exports = {
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
try {
|
||||
await Promise.all(messagePromises);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
const { QuickDB } = require("quick.db");
|
||||
const db = new QuickDB()
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db2 = new sqlite3.Database('myDatabase.db');
|
||||
const {Events} = require("discord.js")
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const {Events, EmbedBuilder} = require("discord.js")
|
||||
module.exports = {
|
||||
name: Events.GuildMemberUpdate,
|
||||
async execute(oldMember, newMember, client) {
|
||||
@@ -10,7 +8,7 @@ module.exports = {
|
||||
const guildId = newMember.guild.id;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db2.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
@@ -27,13 +25,12 @@ module.exports = {
|
||||
try {
|
||||
await newMember.roles.remove(role);
|
||||
} catch (error) {
|
||||
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
let limitedRoles = await new Promise((resolve, reject) => {
|
||||
db2.get('SELECT value FROM gestion WHERE id = ?', [`${botId}.${guildId}.rolelimits`], (err, row) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [`${botId}.${guildId}.rolelimits`], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
@@ -56,17 +53,16 @@ module.exports = {
|
||||
try {
|
||||
await newMember.roles.remove(role);
|
||||
} catch (error) {
|
||||
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
|
||||
}
|
||||
}
|
||||
if (memberCount > limitedRole.limit) {
|
||||
try {
|
||||
await newMember.roles.remove(role);
|
||||
} catch (error) {
|
||||
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
};
|
||||
@@ -6,7 +6,7 @@ module.exports = {
|
||||
once: false,
|
||||
async execute(oldMessage, newMessage, client) {
|
||||
if (oldMessage.author.bot || !oldMessage.content) return;
|
||||
|
||||
|
||||
const editedEmbed = new EmbedBuilder()
|
||||
.setColor('#FFA500')
|
||||
.setAuthor({ name: oldMessage.author.tag, iconURL: oldMessage.author.displayAvatarURL({ dynamic: true })})
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
const { EmbedBuilder, Events } = require('discord.js');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildMemberUpdate,
|
||||
async execute(oldMember, newMember) {
|
||||
if (!oldMember.premiumSince && newMember.premiumSince) {
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [newMember.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const boostlogChannelId = data[newMember.guild.id]?.boostlog;
|
||||
if (boostlogChannelId) {
|
||||
const boostlogChannel = newMember.guild.channels.cache.get(boostlogChannelId);
|
||||
if (boostlogChannel) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setTitle('Nouveau booster')
|
||||
.setDescription(`${newMember.user.tag} a commencé à booster le serveur!`)
|
||||
.setTimestamp();
|
||||
|
||||
boostlogChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(newMember.premiumSince)
|
||||
if (oldMember.premiumSince && !newMember.premiumSince) {
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [newMember.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const boostlogChannelId = data[newMember.guild.id]?.boostlog;
|
||||
if (boostlogChannelId) {
|
||||
const boostlogChannel = newMember.guild.channels.cache.get(boostlogChannelId);
|
||||
if (boostlogChannel) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setTitle('Booster arrêté')
|
||||
.setDescription(`${newMember.user.tag} a arrêté de booster le serveur.`)
|
||||
.setTimestamp();
|
||||
|
||||
boostlogChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
const { EmbedBuilder, Events } = require('discord.js');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ChannelCreate,
|
||||
execute(channel) {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [channel.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return;
|
||||
}
|
||||
const data = row ? JSON.parse(row.value) : {};
|
||||
const logChannelId = data[channel.guild.id]?.channelog;
|
||||
if (logChannelId) {
|
||||
const logChannel = channel.guild.channels.cache.get(logChannelId);
|
||||
if (logChannel) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setDescription(`Un nouveau salon a été créé : ${channel.name}`)
|
||||
.setTimestamp();
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
const { EmbedBuilder, Events } = require('discord.js');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ChannelDelete,
|
||||
execute(channel) {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [channel.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return;
|
||||
}
|
||||
const data = row ? JSON.parse(row.value) : {};
|
||||
const logChannelId = data[channel.guild.id]?.channelog;
|
||||
if (logChannelId) {
|
||||
const logChannel = channel.guild.channels.cache.get(logChannelId);
|
||||
if (logChannel) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setDescription(`Le salon ${channel.name} a été supprimé.`)
|
||||
.setTimestamp();
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,32 @@
|
||||
const { EmbedBuilder, Events } = require('discord.js');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ChannelUpdate,
|
||||
execute(oldChannel, newChannel) {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [newChannel.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return;
|
||||
}
|
||||
const data = row ? JSON.parse(row.value) : {};
|
||||
const logChannelId = data[newChannel.guild.id]?.channelog;
|
||||
if (logChannelId) {
|
||||
const logChannel = newChannel.guild.channels.cache.get(logChannelId);
|
||||
if (logChannel) {
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setTitle('Salon modifié')
|
||||
.setDescription(`Le salon ${oldChannel.name} a été modifié.`)
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
const { Events, EmbedBuilder } = require("discord.js");
|
||||
const { Events, EmbedBuilder , AuditLogEvent} = require("discord.js");
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
module.exports = {
|
||||
@@ -6,7 +6,11 @@ module.exports = {
|
||||
once: false,
|
||||
async execute(oldMember, newMember, client) {
|
||||
if (oldMember.user.bot || newMember.user.bot) return;
|
||||
|
||||
const fetchedLogs = await newMember.guild.fetchAuditLogs({
|
||||
limit: 1,
|
||||
type: AuditLogEvent.MemberRoleUpdate,
|
||||
});
|
||||
const auditEntry = fetchedLogs.entries.first();
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
@@ -31,14 +35,18 @@ module.exports = {
|
||||
const removedRoles = oldRoles.filter(role => !newRoles.has(role.id));
|
||||
|
||||
|
||||
// Si des rôles ont été ajoutés
|
||||
if (addedRoles.size > 0) {
|
||||
const reason = auditEntry.reason
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#00FF00')
|
||||
.setAuthor({ name: newMember.user.username, iconURL: newMember.user.displayAvatarURL({ dynamic: true })})
|
||||
.setDescription(`${newMember.user.username} a gagné les rôles suivants : ${addedRoles.map(role => `<@&${role.id}>`).join(', ')}`)
|
||||
.setDescription(`${newMember.user.username} a gagnéeee les rôles suivants : ${addedRoles.map(role => `<@&${role.id}>`).join(', ')}`)
|
||||
.setTimestamp();
|
||||
|
||||
if (reason && auditEntry.target.id === newMember.id) {
|
||||
embed.addFields({ name:' ',value: `**Raison : **\`${reason}\``});
|
||||
}
|
||||
|
||||
try {
|
||||
await logChannel.send({ embeds: [embed] });
|
||||
} catch (error) {
|
||||
@@ -46,12 +54,16 @@ module.exports = {
|
||||
}
|
||||
|
||||
if (removedRoles.size > 0) {
|
||||
const reason = auditEntry.reason
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#FF0000')
|
||||
.setAuthor({ name: newMember.user.username, iconURL: newMember.user.displayAvatarURL({ dynamic: true })})
|
||||
.setDescription(`${newMember.user.tag} a perdu les rôles suivants : ${removedRoles.map(role => `<@&${role.id}>`).join(', ')}`)
|
||||
.setTimestamp();
|
||||
|
||||
if (reason && auditEntry.target.id === newMember.id) {
|
||||
embed.addFields({ name:' ',value: `**Raison : **\`${reason}\``});
|
||||
}
|
||||
try {
|
||||
await logChannel.send({ embeds: [embed] });
|
||||
} catch (error) {
|
||||
Reference in New Issue
Block a user