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;
}
}
+186
View File
@@ -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] });
}
}
+53
View File
@@ -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] });
}
}
+186
View File
@@ -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] });
}
}
+62 -19
View File
@@ -1,15 +1,16 @@
const sqlite3 = require('sqlite3').verbose();
const { Events, ChannelType } = require("discord.js");
const { Events, ChannelType, EmbedBuilder } = require("discord.js");
const db = new sqlite3.Database('myDatabase.db');
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
module.exports = {
name: Events.MessageCreate,
async execute(message, client) {
const botId = message.client.user.id;
const guildId = message.guild.id;
if (message.channel.type === ChannelType.DM) return;
if (!message.content.includes('@everyone')) return;
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
@@ -19,28 +20,70 @@ module.exports = {
resolve(row ? JSON.parse(row.value) : {});
});
});
const antieveryoneConfig = data[guildId]?.antieveryone;
let status = 'off';
const antileakConfig = data[guildId]?.antileak;
const antimentionConfig = data[guildId]?.antimention;
let statusEveryone = 'off';
let statusLeak = 'off';
let statusMention = 'off';
let mentionLimit = 0;
if (antieveryoneConfig) {
({ status} = antieveryoneConfig);
}
if (status === "off") return;
({ status: statusEveryone } = antieveryoneConfig);
}
if (antileakConfig) {
({ status: statusLeak } = antileakConfig);
}
if (antimentionConfig) {
({ status: statusMention, nombre: mentionLimit } = antimentionConfig);
}
if (statusEveryone === "off" && statusLeak === "off") return;
data.whitelist = data.whitelist || {};
data.whitelist[guildId] = data.whitelist[guildId] || {};
const whitelist = data.whitelist[guildId];
const user = message.member;
if (status === "on") {
if (await getPermissionLevel(user, client) >= 10) return;
if (whitelist[message.author.id]) return;
message.delete().catch(err => {;
});
} else if (status === "max") {
const levelperm = await getPermissionLevel(user, client);
if (levelperm >= 10) return;
message.delete().catch(err => {;
});
if (statusEveryone !== "off" && message.content.includes('@everyone')) {
if(message.author.id === client.user.id)return;
if (statusEveryone === "on") {
if (await getPermissionLevel(user, client) >= 10) return;
if (whitelist[message.author.id]) return;
message.delete().catch(err => {;
});
} else if (statusEveryone === "max") {
const levelperm = await getPermissionLevel(user, client);
if (levelperm >= 10) return;
message.delete().catch(err => {;
});
}
}
if (statusLeak !== "off") {
if (message.author.bot) return;
const ipRegex = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/;
const phoneRegex = /\b(?:\+?(\d{1,3}))?[-. (]*(?:\d{1,4})[-. )]*(\d{1,3})[-. ]*(\d{2,4})\b/;
const addressRegex = /\b\d{1,5} [\w\s]+(?:, [\w\s]+)*\b/;
const cardRegex = /\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9]{2})[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})\b/;
const cardMatch = message.content.match(cardRegex);
const ipMatch = message.content.match(ipRegex);
const phoneMatch = message.content.match(phoneRegex);
const addressMatch = message.content.match(addressRegex);
if (ipMatch || phoneMatch || addressMatch || cardMatch) {
if (statusLeak === 'on') {
if (await getPermissionLevel(user, client) >= 10) return;
if (whitelist[message.author.id]) return;
message.delete().catch(err => {});
} else if (statusLeak === 'max') {
const levelperm = await getPermissionLevel(user, client);
if (levelperm >= 10) return;
message.delete().catch(err => {});
}
}
}
},
};
+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();
},
};
-1
View File
@@ -19,7 +19,6 @@ module.exports = {
const roleDataArray = data[reaction.message.guild.id]?.rolereact?.[messageId];
if (!Array.isArray(roleDataArray)) {
console.error('Expected an array of role data objects, but received something else.');
return;
}
+1
View File
@@ -5,6 +5,7 @@ module.exports = {
async execute(interaction, client) {
const botId = client.user.id;
const customId = interaction.customId;
if (customId == undefined || customId === null) return;
if (!customId.startsWith('rolebuttons_')) return;
const roleId = customId.split('_')[1];
+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);
},
};
+39 -1
View File
@@ -63,6 +63,45 @@ module.exports = {
} else {
}
});
db.run(`CREATE TABLE IF NOT EXISTS status (
botId TEXT PRIMARY KEY,
type TEXT NOT NULL,
status TEXT NOT NULL
);`, (err) => {
if (err) {
console.error(err.message);
} else {
}
});
db.run(`CREATE TABLE IF NOT EXISTS master (
id TEXT PRIMARY KEY,
value TEXT
);`, (err) => {
if (err) {
console.error(err.message);
}
});
db.run(`CREATE TABLE IF NOT EXISTS antiraid (
guild TEXT PRIMARY KEY,
value TEXT
);`, (err) => {
if (err) {
console.error(err.message);
}
});
db.run(`CREATE TABLE IF NOT EXISTS invitations (
guild_id TEXT NOT NULL,
member_id TEXT NOT NULL,
invite_count INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY (guild_id, member_id)
);;`, (err) => {
if (err) {
console.error(err.message);
}
});
db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => {
@@ -96,7 +135,6 @@ module.exports = {
console.log(`Le bot ${client.user.tag} est en ligne
lien d'invite > https://discord.com/oauth2/authorize?client_id=${client.user.id}&scope=bot&permissions=8`);
//AntiCrash
process.on('unhandledRejection', (error) => {
console.log(' [antiCrash] :: Unhandled Rejection/Catch');
+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 {
}
});
},
};
-1
View File
@@ -6,7 +6,6 @@ module.exports = {
name: Events.GuildMemberAdd,
async execute(member, client) {
const botId = client.user.id;
console.log(botId)
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
+4 -3
View File
@@ -1,6 +1,8 @@
const {Events , ModalBuilder, TextInputStyle, ActionRowBuilder, TextInputBuilder , EmbedBuilder} = require("discord.js")
const {Events , ModalBuilder, TextInputStyle, ActionRowBuilder, TextInputBuilder , EmbedBuilder, ButtonBuilder, ButtonStyle} = require("discord.js")
const sqlite3 = require('sqlite3').verbose();
const db2 = new sqlite3.Database('myDatabase.db');
const paginationEmbed = require('discordjs-button-pagination');
module.exports = {
name: Events.InteractionCreate,
async execute(interaction, client) {
@@ -127,11 +129,10 @@ module.exports = {
try {
await registerMarriage(userId1, userId2, client);
}catch(err){
console.log(err)
}
await interaction.reply({ content: '💒 Vous êtes maintenant mariés! 💒'});
}
}
},
};
async function registerMarriage(userId1, userId2, client) {
-2
View File
@@ -34,13 +34,11 @@ module.exports = {
);
}
} catch (error) {
console.error(error);
}
}
try {
await Promise.all(messagePromises);
} catch (error) {
console.error(error);
}
}
},
@@ -1,8 +1,6 @@
const { QuickDB } = require("quick.db");
const db = new QuickDB()
const sqlite3 = require('sqlite3').verbose();
const db2 = new sqlite3.Database('myDatabase.db');
const {Events} = require("discord.js")
const db = new sqlite3.Database('myDatabase.db');
const {Events, EmbedBuilder} = require("discord.js")
module.exports = {
name: Events.GuildMemberUpdate,
async execute(oldMember, newMember, client) {
@@ -10,7 +8,7 @@ module.exports = {
const guildId = newMember.guild.id;
let data = await new Promise((resolve, reject) => {
db2.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
@@ -27,13 +25,12 @@ module.exports = {
try {
await newMember.roles.remove(role);
} catch (error) {
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
}
});
return;
}
let limitedRoles = await new Promise((resolve, reject) => {
db2.get('SELECT value FROM gestion WHERE id = ?', [`${botId}.${guildId}.rolelimits`], (err, row) => {
db.get('SELECT value FROM gestion WHERE id = ?', [`${botId}.${guildId}.rolelimits`], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
@@ -56,17 +53,16 @@ module.exports = {
try {
await newMember.roles.remove(role);
} catch (error) {
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
}
}
if (memberCount > limitedRole.limit) {
try {
await newMember.roles.remove(role);
} catch (error) {
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
}
}
}
});
},
};
+1 -1
View File
@@ -6,7 +6,7 @@ module.exports = {
once: false,
async execute(oldMessage, newMessage, client) {
if (oldMessage.author.bot || !oldMessage.content) return;
const editedEmbed = new EmbedBuilder()
.setColor('#FFA500')
.setAuthor({ name: oldMessage.author.tag, iconURL: oldMessage.author.displayAvatarURL({ dynamic: true })})
+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] });
}
}
});
},
};
@@ -1,4 +1,4 @@
const { Events, EmbedBuilder } = require("discord.js");
const { Events, EmbedBuilder , AuditLogEvent} = require("discord.js");
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
@@ -6,7 +6,11 @@ module.exports = {
once: false,
async execute(oldMember, newMember, client) {
if (oldMember.user.bot || newMember.user.bot) return;
const fetchedLogs = await newMember.guild.fetchAuditLogs({
limit: 1,
type: AuditLogEvent.MemberRoleUpdate,
});
const auditEntry = fetchedLogs.entries.first();
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => {
if (err) {
@@ -31,14 +35,18 @@ module.exports = {
const removedRoles = oldRoles.filter(role => !newRoles.has(role.id));
// Si des rôles ont été ajoutés
if (addedRoles.size > 0) {
const reason = auditEntry.reason
const embed = new EmbedBuilder()
.setColor('#00FF00')
.setAuthor({ name: newMember.user.username, iconURL: newMember.user.displayAvatarURL({ dynamic: true })})
.setDescription(`${newMember.user.username} a gagné les rôles suivants : ${addedRoles.map(role => `<@&${role.id}>`).join(', ')}`)
.setDescription(`${newMember.user.username} a gagnéeee les rôles suivants : ${addedRoles.map(role => `<@&${role.id}>`).join(', ')}`)
.setTimestamp();
if (reason && auditEntry.target.id === newMember.id) {
embed.addFields({ name:' ',value: `**Raison : **\`${reason}\``});
}
try {
await logChannel.send({ embeds: [embed] });
} catch (error) {
@@ -46,12 +54,16 @@ module.exports = {
}
if (removedRoles.size > 0) {
const reason = auditEntry.reason
const embed = new EmbedBuilder()
.setColor('#FF0000')
.setAuthor({ name: newMember.user.username, iconURL: newMember.user.displayAvatarURL({ dynamic: true })})
.setDescription(`${newMember.user.tag} a perdu les rôles suivants : ${removedRoles.map(role => `<@&${role.id}>`).join(', ')}`)
.setTimestamp();
if (reason && auditEntry.target.id === newMember.id) {
embed.addFields({ name:' ',value: `**Raison : **\`${reason}\``});
}
try {
await logChannel.send({ embeds: [embed] });
} catch (error) {