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:
VALOU3336
2024-04-22 18:30:33 +02:00
parent d8912855ff
commit 9bd39c69ca
178 changed files with 9241 additions and 480 deletions
+110
View File
@@ -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] });
}
}
+124
View File
@@ -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] });
}
}
+127
View File
@@ -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] });
}
}
+113
View File
@@ -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] });
}
}
+152
View File
@@ -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 => {});
}
}
}
},
};
+111
View File
@@ -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] });
}
}
+223
View File
@@ -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] });
}
}
+144
View File
@@ -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] });
}
}
+112
View File
@@ -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] });
}
}
+109
View File
@@ -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] });
}
}
+121
View File
@@ -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] });
}
}
+119
View File
@@ -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] });
}
}
+43
View File
@@ -0,0 +1,43 @@
const {EmbedBuilder , PermissionsBitField , 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, client) {
const guildId = newMember.guild.id
if (!oldMember.permissions.has(PermissionsBitField.Flags.Administrator) && newMember.permissions.has(PermissionsBitField.Flags.Administrator)) {
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) : {});
});
});
if (!data[newMember.guild.id]) {
data[newMember.guild.id] = {};
}
if (data[newMember.guild.id].alerte === 'on') {
const raidlogChannelId = data[newMember.guild.id].raidlog;
const raidlogChannel = newMember.guild.channels.cache.get(raidlogChannelId);
const raidMessage = data[newMember.guild.id].raidping || 'Aucun message de raid configuré.';
if (raidlogChannel) {
const embed = new EmbedBuilder()
.setTitle('Alerte de permissions')
.setDescription(`${newMember.user.tag} a reçu des permissions d'administrateur.`)
.setColor(0xff0000);
try {
await raidlogChannel.send({ content: raidMessage, embeds: [embed] });
} catch (error) {
}
}
}
}
},
};
@@ -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] });
}
}
@@ -0,0 +1,89 @@
const sqlite3 = require('sqlite3').verbose();
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;
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 antieveryoneConfig = data[guildId]?.antieveryone;
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: 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 (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 => {});
}
}
}
},
};
+49
View File
@@ -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();
},
};
+36
View File
@@ -0,0 +1,36 @@
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
const { Events } = require("discord.js");
module.exports = {
name: Events.MessageReactionAdd,
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.add(role);
},
};
+27
View File
@@ -0,0 +1,27 @@
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
const { Events } = require("discord.js");
module.exports = {
name: Events.MessageCreate,
async execute(message) {
if (message.author.bot) return;
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], async (err, row) => {
if (err) {
console.error(err.message);
return;
}
const data = row ? JSON.parse(row.value) : {};
const guildData = data[message.guild.id];
if (guildData && guildData.autoreact && guildData.autoreact[message.channel.id]) {
const emojis = guildData.autoreact[message.channel.id];
try {
await Promise.all(emojis.map(emoji => message.react(emoji)));
} catch (error) {
}
}
});
},
};
+31
View File
@@ -0,0 +1,31 @@
const {Events } = require("discord.js")
module.exports = {
name: Events.InteractionCreate,
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];
const role = interaction.guild.roles.cache.get(roleId);
if (!role) {
return;
}
const member = interaction.member;
if (!member) {
return;
}
if (member.roles.cache.has(role.id)) {
await member.roles.remove(role);
await interaction.reply({ content: `Le rôle ${role.name} a été retiré.`, ephemeral: true });
} else {
await member.roles.add(role);
await interaction.reply({ content: `Le rôle ${role.name} a été ajouté.`, ephemeral: true });
}
},
};
+37
View File
@@ -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);
},
};
@@ -0,0 +1,11 @@
const { Events, InteractionType } = require("discord.js");
module.exports = {
name: Events.InteractionCreate,
async execute(client, interaction) {
if (interaction.type === InteractionType.ApplicationCommand) {
const command = client.commands.get(interaction.commandName);
await command.execute(interaction, client);
}
},
};
+167
View File
@@ -0,0 +1,167 @@
const sqlite3 = require('sqlite3').verbose();
const { Events } = require('discord.js');
const permissions = require('../../permissions.json');
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.');
});
const backupdb = new sqlite3.Database('backups.db', (err) => {
if (err) {
console.error(err.message);
}
});
await new Promise((resolve, reject) => {
db.serialize(() => {
db.run('CREATE TABLE IF NOT EXISTS gestion (id TEXT PRIMARY KEY, value TEXT)', (err) => {
if (err) {
console.error(err.message);
reject(err);
} else {
}
});
db.run('CREATE TABLE IF NOT EXISTS prevname (id TEXT PRIMARY KEY, value TEXT)', (err) => {
if (err) {
console.error(err.message);
reject(err);
} else {
}
});
backupdb.run(`CREATE TABLE IF NOT EXISTS backups (
id INTEGER PRIMARY KEY AUTOINCREMENT,
botId TEXT NOT NULL,
backupId TEXT NOT NULL,
createdAt TEXT NOT NULL
)`, (err) => {
if (err) {
console.error(err.message);
reject(err);
} else {
}
});
db.run(`
CREATE TABLE IF NOT EXISTS warnings (
guildId TEXT NOT NULL,
userId TEXT NOT NULL,
warningId INTEGER NOT NULL,
reason TEXT NOT NULL,
timestamp INTEGER NOT NULL,
PRIMARY KEY (guildId, userId, warningId)
);
`, (err) => {
if (err) {
console.error(err.message);
} 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) => {
if (err) {
console.error(err.message);
reject(err);
} else {
let permissionsData = row ? JSON.parse(row.value) : {};
if (!permissionsData.permissions || Object.keys(permissionsData.permissions).length === 0) {
permissionsData.permissions = permissions;
const permissionsJson = JSON.stringify(permissionsData);
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [client.user.id, permissionsJson], (err) => {
if (err) {
console.error(err.message);
reject(err);
} else {
console.log(`Les permissions ont été chargées pour le bot ${client.user.tag}`);
resolve();
}
});
} else {
console.log(`Les permissions existent déjà pour le bot ${client.user.tag}`);
resolve();
}
}
});
});
});
client.snipes = new Map();
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');
console.log(error);
});
process.on("uncaughtException", (error, origin) => {
console.log(' [antiCrash] :: Uncaught Exception/Catch');
console.log(error);
console.log('Information supplémentaire:', origin);
});
process.on('uncaughtExceptionMonitor', (error, origin) => {
console.log(' [antiCrash] :: Uncaught Exception Monitor/Catch');
console.log(error);
console.log('Information supplémentaire:', origin);
});
process.on('beforeExit', (code) => {
console.log(' [antiCrash] :: Before Exit');
console.log('Code de sortie:', code);
});
process.on('exit', (code) => {
console.log(' [antiCrash] :: Exit');
console.log('Code de sortie:', code);
});
},
};
+63
View File
@@ -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 {
}
});
},
};
+158
View File
@@ -0,0 +1,158 @@
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) {
const botId = client.user.id;
let owners = await new Promise((resolve, reject) => {
db2.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value).owners || {} : {});
});
});
if (!interaction.isButton()) return;
if (interaction.customId.startsWith('deletesuggestion_')) {
const userId= interaction.customId.split('_')[1];
if (interaction.user.id !== userId && !Object.keys(owners).includes(interaction.user.id)) {
await interaction.reply({ content: "vous n'avez pas la permission de supprimer cette suggestion.", ephemeral: true });
return;
}
await interaction.message.delete();
} else if (interaction.customId.startsWith('deleteprevnames_')) {
const userId = interaction.customId.split('_')[1];
if (interaction.user.id !== userId) {
await interaction.reply({ content: "vous n'avez pas la permission de supprimer cette suggestion.", ephemeral: true });
return;
}
let hasPrevname = await new Promise((resolve, reject) => {
db2.get('SELECT value FROM prevname WHERE id = ?', [userId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row !== undefined);
});
});
if (!hasPrevname) {
await interaction.reply({ content: "Vous n'avez aucun prevname à supprimer.", ephemeral: true });
return;
}
db2.run('DELETE FROM prevname WHERE id = ?', [userId], (err) => {
if (err) {
console.error(err.message);
} else {
interaction.reply({ content: "Vos prevname ont été correctement supprimés.", ephemeral: true });
}
});
} else if (interaction.customId.startsWith('addconfession_')) {
let data = await new Promise((resolve, reject) => {
db2.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 guildId= interaction.customId.split('_')[1];
const userId = interaction.user.id;
let Modal = new ModalBuilder()
.setCustomId('confession')
.setTitle(`${client.user.username} - Confession`);
let question1 = new TextInputBuilder()
.setCustomId('messageconfession')
.setLabel("Quel est votre confession")
.setRequired(true)
.setPlaceholder('Indiquez la description ici')
.setStyle(TextInputStyle.Paragraph);
let question2 = new TextInputBuilder()
.setCustomId('status')
.setLabel("Vous voulez reste anonyme")
.setRequired(true)
.setPlaceholder('Indiquez par oui ou non')
.setStyle(TextInputStyle.Short);
let actionRow1 = new ActionRowBuilder().addComponents(question1);
let actionRow2 = new ActionRowBuilder().addComponents(question2);
Modal.addComponents(actionRow1, actionRow2);
await interaction.showModal(Modal);
let reponse = await interaction.awaitModalSubmit({time: 300000})
let ConfessionMessageToSend = reponse.fields.getTextInputValue('messageconfession')
let ConfidentielAuthor = reponse.fields.getTextInputValue('status')
let isConfidential = !ConfidentielAuthor.toLowerCase().startsWith('n');
data.confession = data.confession || {};
data.confession.channel = data.confession.channel || {};
const channelId = data.confession.channel[guildId];
const embed = new EmbedBuilder()
.setTitle('**Nouvelle Confession**')
.setDescription(ConfessionMessageToSend)
.setFooter({text: `${client.user.username} - ${interaction.guild.name}`})
.setColor('#0099ff');
if (!isConfidential) {
embed.setAuthor({ name: interaction.user.username, iconURL: interaction.user.displayAvatarURL() })
} else {
embed.setAuthor({ name: 'Confidentiel' });
}
if (channelId) {
const channel = interaction.guild.channels.cache.get(channelId);
channel.send({ embeds: [embed] });
} else {
console.error(`Le salon avec l'ID ${channelId} n'a pas été trouvé.`);
}
} else if (interaction.customId.startsWith('acceptmarriage_')) {
const userId1 = interaction.customId.split('_')[1];
const userId2 = interaction.customId.split('_')[2];
const userIdFromInteractionStr = String(interaction.user.id);
const userId1Str = String(userId1);
if (userIdFromInteractionStr !== userId1Str) {
await interaction.reply({ content: "vous n'avez pas la permission d'interagir.", ephemeral: true });
return;
}
try {
await registerMarriage(userId1, userId2, client);
}catch(err){
}
await interaction.reply({ content: '💒 Vous êtes maintenant mariés! 💒'});
}
},
};
async function registerMarriage(userId1, userId2, client) {
let data = await new Promise((resolve, reject) => {
db2.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) : {});
});
});
data.marry = data.marry || [];
data.marry.push(`${userId1}_${userId2}`);
data.marry.push(`${userId2}_${userId1}`);
db2.run('UPDATE gestion SET value = ? WHERE id = ?', [JSON.stringify(data), client.user.id], function(err) {
if (err) {
}
});
}
+53
View File
@@ -0,0 +1,53 @@
const { Events, EmbedBuilder } = require("discord.js");
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.VoiceStateUpdate,
once: false,
async execute(oldState, newState, client) {
// Ignorer les changements de salon vocal pour les bots
if (oldState.member.user.bot || newState.member.user.bot) return;
// Récupérer les données de configuration des logs pour le serveur
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) : {});
});
});
// Vérifier si le serveur a un canal de logs configuré pour les salons vocaux
if (!data[oldState.guild.id] || !data[oldState.guild.id].vocallog) return;
const logChannelId = data[oldState.guild.id].vocallog;
const logChannel = client.channels.cache.get(logChannelId);
if (!logChannel) return;
const joinedVoiceChannel = newState.channel;
const leftVoiceChannel = oldState.channel;
if (joinedVoiceChannel) {
const embed = new EmbedBuilder()
.setDescription(`${newState.member.user.tag} a rejoint le salon vocal <#${joinedVoiceChannel.id}>`)
.setTimestamp();
try {
await logChannel.send({ embeds: [embed] });
} catch (error) {
}
} else if (leftVoiceChannel) {
const embed = new EmbedBuilder()
.setDescription(`${oldState.member.user.tag} a quitté le salon vocal <#${leftVoiceChannel.id}>`)
.setTimestamp();
try {
await logChannel.send({ embeds: [embed] });
} catch (error) {
}
}
},
};
+36
View File
@@ -0,0 +1,36 @@
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, ChannelType } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const { Events } = 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) : {});
});
});
if (!data[guildId]) {
data[guildId] = { badwords: [] };
}
const badwords = data[guildId].badwords || [];
const containsBadword = badwords.some(word => message.content.toLowerCase().includes(word.toLowerCase()));
if (containsBadword) {
if (message.author.id === client.user.id || await getPermissionLevel(user, client) >= 10) return;
try {
await message.delete({ reason: 'Contient un mot interdit' });
} catch (error) {
}
}
},
};
+35
View File
@@ -0,0 +1,35 @@
const { Events , EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.GuildMemberAdd,
async execute(member, client) {
const botId = client.user.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 blacklist = data.blacklist || {};
if (blacklist[member.id]) {
try {
await member.ban({ reason: 'Blacklisted ' });
const embed = new EmbedBuilder()
.setColor('#ff0000')
.setDescription(`L'utilisateur <@${member.id}> a été banni pour être sur la blacklist.`);
const raidLogChannelId = data[member.guild.id].raidlog;
const raidLogChannel = member.guild.channels.cache.get(raidLogChannelId);
if (raidLogChannel) {
raidLogChannel.send({ embeds: [embed] });
}
} catch (error) {
}
}
},
};
+45
View File
@@ -0,0 +1,45 @@
const sqlite3 = require('sqlite3').verbose();
const { Events } = require("discord.js");
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.GuildMemberAdd,
async execute(member) {
const botId = member.client.user.id;
const guildId = member.guild.id;
let greet = 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 guildGreetings = greet[guildId] || [];
if (guildGreetings.length > 0) {
const welcomeMessage = `Bienvenue <@${member.id}> sur le serveur ${member.guild.name} !`;
const messagePromises = [];
for (const greeting of guildGreetings) {
try {
const channel = await member.guild.channels.fetch(greeting.channelId);
if (channel && channel.type === 0) {
messagePromises.push(
channel.send(welcomeMessage)
.then(message => {
setTimeout(() => message.delete(), 1000);
})
);
}
} catch (error) {
}
}
try {
await Promise.all(messagePromises);
} catch (error) {
}
}
},
};
@@ -0,0 +1,68 @@
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
const {Events, EmbedBuilder} = require("discord.js")
module.exports = {
name: Events.GuildMemberUpdate,
async execute(oldMember, newMember, client) {
const botId = client.user.id;
const guildId = newMember.guild.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) : {});
});
});
let blrank = data[guildId] && data[guildId].blrank ? data[guildId].blrank : {};
if (blrank[newMember.id]) {
const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
addedRoles.forEach(async role => {
try {
await newMember.roles.remove(role);
} catch (error) {
}
});
return;
}
let limitedRoles = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [`${botId}.${guildId}.rolelimits`], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : []);
});
});
if (!Array.isArray(limitedRoles)) {
limitedRoles = [];
}
const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
addedRoles.forEach(async role => {
const limitedRole = limitedRoles.find(r => r.id === role.id);
if (limitedRole) {
const memberCount = newMember.guild.members.cache.filter(m => m.roles.cache.has(role.id)).size;
if (limitedRole.limit === 0) {
try {
await newMember.roles.remove(role);
} catch (error) {
}
}
if (memberCount > limitedRole.limit) {
try {
await newMember.roles.remove(role);
} catch (error) {
}
}
}
});
},
};
+66
View File
@@ -0,0 +1,66 @@
const { ChannelType, Events } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.GuildMemberAdd,
async execute(member) {
const guildId = member.guild.id;
const botId = member.client.user.id;
function replacePlaceholders(message, member) {
return message
.replace('{MemberMention}', member.toString())
.replace('{MemberName}', member.user.username)
.replace('{MemberDisplayName}', member.displayName)
.replace('{MemberJoinedAt}', member.joinedAt.toLocaleDateString())
.replace('{MemberID}', member.id)
.replace('{MemberPic}', member.user.displayAvatarURL({ dynamic: true }))
.replace('{MemberCreatedAt}', member.user.createdAt.toLocaleDateString())
.replace('{ServerMembersCount}', member.guild.memberCount)
.replace('{ServerName}', member.guild.name);
}
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) : {});
});
});
data = data[guildId]?.join || {};
try {
if (data.dm) {
const dmChannel = await member.createDM();
const formattedMessage = replacePlaceholders(data.dm, member);
await dmChannel.send(formattedMessage);
}
} catch (err) {
}
try {
if (data.salon && data.message) {
const channel = member.guild.channels.cache.get(data.salon);
if (channel && channel.type === ChannelType.GuildText) {
const formattedMessage = replacePlaceholders(data.message, member);
await channel.send(formattedMessage);
}
}
} catch (err) {
}
try {
if (data.role) {
const role = member.guild.roles.cache.get(data.role);
if (role) {
await member.roles.add(role);
}
}
} catch (err) {
}
},
};
+49
View File
@@ -0,0 +1,49 @@
const { ChannelType, Events } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.GuildMemberRemove,
async execute(member) {
const guildId = member.guild.id;
const botId = member.client.user.id;
function replacePlaceholders(message, member) {
return message
.replace('{MemberMention}', member.toString())
.replace('{MemberName}', member.user.username)
.replace('{MemberDisplayName}', member.displayName)
.replace('{MemberJoinedAt}', member.joinedAt.toLocaleDateString())
.replace('{MemberID}', member.id)
.replace('{MemberPic}', member.user.displayAvatarURL({ dynamic: true }))
.replace('{MemberCreatedAt}', member.user.createdAt.toLocaleDateString())
.replace('{ServerMembersCount}', member.guild.memberCount)
.replace('{ServerName}', member.guild.name);
}
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) : {});
});
});
data = data[guildId]?.leave || {};
try {
if (data.salon && data.message) {
const channel = member.guild.channels.cache.get(data.salon);
if (channel && channel.type === ChannelType.GuildText) {
const formattedMessage = replacePlaceholders(data.message, member);
await channel.send(formattedMessage);
}
}
} catch (err) {
}
},
};
+46
View File
@@ -0,0 +1,46 @@
const sqlite3 = require('sqlite3').verbose();
const { Events } = require("discord.js");
// Setup SQLite3 database connection
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.VoiceStateUpdate,
async execute(oldState, newState) {
if (!oldState.channelId && newState.channelId) {
const guildId = newState.guild.id;
const botId = newState.client.user.id;
const channelId = newState.channelId;
// Query the bot's data from the SQLite3 database
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) : {});
});
});
// Access the specific guild's rolevocal data
let rolevocal = data.rolevocal || {};
let guildRoles = rolevocal[guildId] || {};
let channelRoles = guildRoles[channelId] || [];
if (channelRoles.length > 0) {
const member = newState.member;
for (const roleId of channelRoles) {
const role = newState.guild.roles.cache.get(roleId);
if (role) {
try {
await member.roles.add(role);
} catch (error) {
console.error(`Erreur lors de l'ajout du rôle ${roleId} à l'utilisateur ${member.id}:`, error);
}
}
}
}
}
},
};
+89
View File
@@ -0,0 +1,89 @@
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, ChannelType } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const { Events } = 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;
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 suggestChannelId = data.suggestChannel && data.suggestChannel[guildId];
data.piconly = data.piconly || {};
data.piconly[guildId] = data.piconly[guildId] || {};
const channelIDpiconly = data.piconly[guildId];
const antilinkConfig = data[guildId]?.antilink;
let status = 'off';
let type = 'invite';
if (antilinkConfig) {
({ status, type } = antilinkConfig);
}
if (message.channel.id === suggestChannelId && !message.author.bot) {
await message.delete();
const embed = new EmbedBuilder()
.setAuthor({ name: message.author.tag, iconURL: message.author.displayAvatarURL() })
.setDescription(message.content || 'Aucun contenu fourni')
.setFooter({ text: `${message.guild.name} | ${message.client.user.username}`, })
.setColor('#409CED');
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId(`deletesuggestion_${message.author.id}`)
.setLabel('Supprimer')
.setStyle(ButtonStyle.Danger)
);
const suggestionMessage = await message.channel.send({ embeds: [embed], components: [row] });
suggestionMessage.react('👎')
suggestionMessage.react('👍')
} else if (message.channel.id === channelIDpiconly) {
if (message.attachments.size === 0) {
message.delete()
}
} else if (status === 'on') {
data.whitelist = data.whitelist || {};
data.whitelist[guildId] = data.whitelist[guildId] || {};
const whitelist = data.whitelist[guildId];
const user = message.member;
if (await getPermissionLevel(user, client) >= 10) return;
if (whitelist[message.author.id]) return;
const messageContent = message.content;
if (type === 'all' && messageContent.includes('https://')) {
message.delete().catch(err => {;
});
}
if (type === 'invite' && (messageContent.includes('discord.com') || messageContent.includes('discord.gg'))) {
message.delete().catch(err => {
});
}
} else if (status === 'max') {
if (message.channel.type === ChannelType.DM) return;
const user = message.member;
if (await getPermissionLevel(user, client) >= 10) return;
const messageContent = message.content;
if (type === 'all' && messageContent.includes('https://')) {
message.delete().catch(err => {;
});
}
if (type === 'invite' && (messageContent.includes('discord.com') || messageContent.includes('discord.gg'))) {
message.delete().catch(err => {
});
}
}
},
};
+37
View File
@@ -0,0 +1,37 @@
const {Events , EmbedBuilder} = require("discord.js")
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.MessageDelete,
once: false,
async execute(message, client) {
if (message.author.bot) return;
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) : {});
});
});
if (!data[message.guild.id]) {
data[message.guild.id] = {};
}
const deletedEmbed = new EmbedBuilder()
.setColor('#ff0000')
.setAuthor({ name: message.author.tag, iconURL: message.author.displayAvatarURL({ dynamic: true })})
.setDescription( `<#${message.channel.id}> -` + message.content)
.setTimestamp(message.createdAt);
const logChannelId = data[message.guild.id].messagelog;
const logChannel = client.channels.cache.get(logChannelId);
if (logChannel) {
try {await logChannel.send({ embeds: [deletedEmbed] });} catch (error) {}
}
client.snipes.set(message.channel.id, {
content: message.content,
author: message.author.id,
timestamp: Date.now(),
});
},
};
+40
View File
@@ -0,0 +1,40 @@
const { Events, EmbedBuilder } = require("discord.js");
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.MessageUpdate,
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 })})
.setDescription(`Message édité dans <#${oldMessage.channel.id}> :\nAvant : ${oldMessage.content}\nAprès : ${newMessage.content}`)
.setTimestamp(oldMessage.editedAt);
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) : {});
});
});
if (!data[oldMessage.guild.id] || !data[oldMessage.guild.id].messagelog) return;
const logChannelId = data[oldMessage.guild.id].messagelog;
const logChannel = client.channels.cache.get(logChannelId);
if (logChannel) {
try {
await logChannel.send({ embeds: [editedEmbed] });
} catch (error) {
console.error(`Erreur lors de l'envoi de l'embed dans le logChannel : ${error}`);
}
}
},
};
+34
View File
@@ -0,0 +1,34 @@
const { 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.displayName !== newMember.displayName) {
let changeData = {
oldName: oldMember.displayName,
newName: newMember.displayName,
changeDate: Math.floor(Date.now() / 1000)
};
let nameChanges = await new Promise((resolve, reject) => {
db.get('SELECT value FROM prevname WHERE id = ?', [newMember.id], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : []);
});
});
nameChanges.push(changeData);
db.run('INSERT OR REPLACE INTO prevname (id, value) VALUES (?, ?)', [newMember.id, JSON.stringify(nameChanges)], (err) => {
if (err) {
console.error(err.message);
}
});
}
},
};
+60
View File
@@ -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] });
}
}
}
},
};
+27
View File
@@ -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] });
}
}
});
},
};
+27
View File
@@ -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] });
}
}
});
},
};
+32
View File
@@ -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] });
}
}
});
},
};
+73
View File
@@ -0,0 +1,73 @@
const { Events, EmbedBuilder , AuditLogEvent} = require("discord.js");
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: Events.GuildMemberUpdate,
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) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : {});
});
});
if (!data[newMember.guild.id] || !data[newMember.guild.id].rolelog) return;
const logChannelId = data[newMember.guild.id].rolelog;
const logChannel = client.channels.cache.get(logChannelId);
if (!logChannel) return;
const oldRoles = oldMember.roles.cache;
const newRoles = newMember.roles.cache;
const addedRoles = newRoles.filter(role => !oldRoles.has(role.id));
const removedRoles = oldRoles.filter(role => !newRoles.has(role.id));
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é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) {
}
}
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) {
}
}
},
};
+55 -65
View File
@@ -54,27 +54,68 @@ module.exports = (client) => {
return 10;
}
let highestPermission = 0;
for (let i = 1; i <= 9; i++) {
const roleIds = data.permissions && data.permissions[guildId] && data.permissions[guildId].p && data.permissions[guildId].p[i];
if (roleIds) {
if (roleIds.some(id => member.roles.cache.has(id))) {
highestPermission = Math.max(highestPermission, i);
}
let highestPermission = 0;
for (let i = 1; i <= 9; i++) {
const roleIds = data.permissions?.[guildId]?.p?.[i];
if (roleIds && roleIds.some(id => member.roles.cache.has(id))) {
highestPermission = i;
break;
}
}
return highestPermission;
}
const totalCommands = loadCommands('../commands');
console.log(`Commands => ${totalCommands} commandes préfixées chargées sur le bot`);
client.on('messageCreate', async message => {
client.on('messageCreate', message => {
handleMessage(message, client);
});
async function handleMessage(message, client) {
if (message.author.bot || message.channel.type === ChannelType.DM) return;
const botId = client.user.id;
if (message.channel.type === ChannelType.DM){
return
} else {
const guildId = message.guild.id;
let data = await new Promise((resolve, reject) => {
let data = await getDataFromDatabase(botId);
const permissions = data.permissions || {};
const defaultPrefix = "+";
let mainPrefix = data.prefixes && data.prefixes.main ? data.prefixes.main : defaultPrefix;
let serverPrefix = data.prefixes && data.prefixes[guildId];
const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix;
if (!message.content.startsWith(prefix)) return;
const args = message.content.slice(prefix.length).trim().split(/ +/);
let commandNameOrAlias = args.shift().toLowerCase();
let command = client.commands.get(commandNameOrAlias) || client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandNameOrAlias));
if (!command) {
for (const cmd in data.alias) {
if (data.alias[cmd][commandNameOrAlias]) {
commandNameOrAlias = cmd;
command = client.commands.get(commandNameOrAlias);
break;
}
}
}
if (!command) return;
const permissionLevel = await getPermissionLevel(message.member, client);
if (permissions[command.name] === 'off' && permissionLevel <= 10) return;
try {
if (permissionLevel === 11 || permissionLevel >= permissions[command.name]) {
command.execute(message, args, client);
} else {
message.reply("Vous n'avez pas accès à cette commande.");
}
} catch(err) {
console.error(`Erreur lors de l'exécution de la commande: ${command.name} , ${err}`);
message.reply('Une erreur est survenue lors de l\'exécution de cette commande.');
}
}
async function getDataFromDatabase(botId) {
return new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
@@ -83,56 +124,5 @@ module.exports = (client) => {
resolve(row ? JSON.parse(row.value) : {});
});
});
const permissions = data.permissions || {};
const defaultPrefix = "+";
let mainPrefix = data.prefixes && data.prefixes.main ? data.prefixes.main : defaultPrefix;
let serverPrefix = data.prefixes && data.prefixes[guildId];
const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix;
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(/ +/);
const commandNameOrAlias = args.shift().toLowerCase();
let commandName = commandNameOrAlias;
//if (!client.commands.has(commandName)) return;
for (const cmd in data.alias) {
if (data.alias[cmd][commandNameOrAlias]) {
commandName = cmd;
break;
}
}
const command = client.commands.get(commandName)
|| client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
if (!command) {
for (const cmd in data.alias) {
if (data.alias[cmd][commandNameOrAlias]) {
commandName = cmd;
command = client.commands.get(commandName);
break;
}
}
}
if (!command) {
return;
}
if (command) {
const permissionLevel = await getPermissionLevel(message.member, client);
try {
if (permissionLevel === 11) {
command.execute(message, args, client);
} else if (permissionLevel >= permissions[command.name]) {
command.execute(message, args, client);
} else {
return message.reply("Vous n'avez pas accès à cette commande.");
}
} catch(err) {
console.error(`Erreur lors de l'exécution de la commande: ${command.name} , ${err}`);
message.reply('Une erreur est survenue lors de l\'exécution de cette commande.');
}
}
}
});
}
}