mirror of
https://github.com/arthur-pbty/gestion.git
synced 2026-06-03 15:07:26 +02:00
grand commit que tutur attend ( marche pas le raidmode en dev)
sinon il y a pleins de truc comme les anti raid , des coorectif ect
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder} = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
module.exports = {
|
||||
name: Events.ChannelCreate,
|
||||
async execute(channel, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = channel.guild.id;
|
||||
const guild = channel.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ChannelCreate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antichannelConfig = data[guildId]?.antichannel;
|
||||
if (!antichannelConfig || antichannelConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antichannelConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
await channel.delete('Anti-channel protection');
|
||||
punish(user, antichannelConfig.action, channel.guild);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
await channel.delete('Anti-channel protection');
|
||||
punish(user, antichannelConfig.action, channel.guild);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
await channel.delete('Anti-channel protection');
|
||||
punish(user, antichannelConfig.action, channel.guild);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
}
|
||||
}catch(err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-channel protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-channel protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-channel protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a créé un salon et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder} = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
module.exports = {
|
||||
name: Events.ChannelDelete,
|
||||
async execute(channel, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = channel.guild.id;
|
||||
const guild = channel.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ChannelDelete,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antichannelConfig = data[guildId]?.antichannel;
|
||||
if (!antichannelConfig || antichannelConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antichannelConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antichannelConfig.action, channel.guild, channel);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antichannelConfig.action, channel.guild, channel);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antichannelConfig.action, channel.guild, channel);
|
||||
sendlog(user, antichannelConfig.action, channel.guild, data);
|
||||
}
|
||||
}catch(err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild, channel) {
|
||||
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-channel protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-channel protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-channel protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
try {
|
||||
channel.clone({
|
||||
name: channel.name,
|
||||
permissions: channel.permissionsOverwrites,
|
||||
type: channel.type,
|
||||
parent: channel.parent,
|
||||
topic: channel.withTopic,
|
||||
nsfw: channel.nsfw,
|
||||
birate: channel.bitrate,
|
||||
userLimit: channel.userLimit,
|
||||
rateLimitPerUser: channel.rateLimitPerUser,
|
||||
permissions: channel.withPermissions,
|
||||
position: channel.rawPosition,
|
||||
reason: 'Anti-channel protection',
|
||||
})
|
||||
} catch (error) {
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a supprimée un salon et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ChannelUpdate,
|
||||
async execute(oldChannel, newChannel, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = newChannel.guild.id;
|
||||
const guild = newChannel.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ChannelUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antichannelConfig = data[guildId]?.antichannel;
|
||||
if (!antichannelConfig || antichannelConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antichannelConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antichannelConfig.action, guild, newChannel, oldChannel);
|
||||
sendlog(user, antichannelConfig.action, newChannel.guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antichannelConfig.action, guild, newChannel, oldChannel);
|
||||
sendlog(user, antichannelConfig.action, newChannel.guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antichannelConfig.action, guild, newChannel, oldChannel);
|
||||
sendlog(user, antichannelConfig.action, newChannel.guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild, newChannel, oldChannel) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-channel protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-channel protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-channel protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
try {
|
||||
await newChannel.edit({
|
||||
name: oldChannel.name,
|
||||
permissions: oldChannel.permissionOverwrites,
|
||||
type: oldChannel.type,
|
||||
parent: oldChannel.parent,
|
||||
topic: oldChannel.topic,
|
||||
nsfw: oldChannel.nsfw,
|
||||
bitrate: oldChannel.bitrate,
|
||||
userLimit: oldChannel.userLimit,
|
||||
rateLimitPerUser: oldChannel.rateLimitPerUser,
|
||||
position: oldChannel.rawPosition,
|
||||
reason: 'Anti-channel protection',
|
||||
});
|
||||
newChannel.overwritePermissions(oldChannel.permissionOverwrites)
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a modifié un salon et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
const banMap = new Map();
|
||||
setInterval(() => {
|
||||
banMap.clear();
|
||||
}, 10 * 60 * 1000);
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildBanAdd,
|
||||
async execute(ban, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = ban.guild.id;
|
||||
const guild = ban.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.MemberBanAdd,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
const antibanConfig = data[guildId]?.antiban;
|
||||
if (!antibanConfig || antibanConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antibanConfig.type;
|
||||
const banLimit = antibanConfig.number;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
if (!banMap.has(guildId)) {
|
||||
banMap.set(guildId, new Map());
|
||||
}
|
||||
const guildBanMap = banMap.get(guildId);
|
||||
guildBanMap.set(user.id, (guildBanMap.get(user.id) || 0) + 1);
|
||||
if (guildBanMap.get(user.id) >= banLimit) {
|
||||
punish(user, antibanConfig.action, guild);
|
||||
}
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
if (!banMap.has(guildId)) {
|
||||
banMap.set(guildId, new Map());
|
||||
}
|
||||
const guildBanMap = banMap.get(guildId);
|
||||
guildBanMap.set(user.id, (guildBanMap.get(user.id) || 0) + 1);
|
||||
if (guildBanMap.get(user.id) >= banLimit) {
|
||||
punish(user, antibanConfig.action, guild);
|
||||
}
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
if (!banMap.has(guildId)) {
|
||||
banMap.set(guildId, new Map());
|
||||
}
|
||||
const guildBanMap = banMap.get(guildId);
|
||||
guildBanMap.set(user.id, (guildBanMap.get(user.id) || 0) + 1);
|
||||
if (guildBanMap.get(user.id) >= banLimit) {
|
||||
punish(user, antibanConfig.action, guild);
|
||||
}
|
||||
|
||||
}
|
||||
} catch (err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-role protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-role protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-role protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildMemberAdd,
|
||||
async execute(member, client) {
|
||||
if (member.user.bot) {
|
||||
const botId = client.user.id;
|
||||
const guildId = member.guild.id;
|
||||
const guild = member.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.BotAdd,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antibotConfig = data[guildId]?.antibot;
|
||||
if (!antibotConfig || antibotConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antibotConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antibotConfig.action, guild);
|
||||
await member.kick('Anti-bot protection');
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antibotConfig.action, guild);
|
||||
await member.kick('Anti-bot protection');
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antibotConfig.action, guild);
|
||||
await member.kick('Anti-bot protection');
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
}
|
||||
}else {
|
||||
const botId = client.user.id;
|
||||
const guildId = member.guild.id;
|
||||
const guild = member.guild;
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
const antijoinConfig = data[guildId]?.antijoin
|
||||
if(antijoinConfig && antijoinConfig?.type === 'on') {
|
||||
try{
|
||||
member.kick({ reason: 'Anti-join protection' });
|
||||
}catch(err) {
|
||||
}
|
||||
} else {
|
||||
const creationlimitConfig = data[guildId]?.creationLimit
|
||||
if (creationlimitConfig) {
|
||||
let limitInMilliseconds;
|
||||
const lastChar = creationlimitConfig.slice(-1);
|
||||
const number = parseInt(creationlimitConfig.slice(0, -1), 10);
|
||||
switch (lastChar) {
|
||||
case 'm':
|
||||
limitInMilliseconds = number * 60 * 1000;
|
||||
break;
|
||||
case 'h':
|
||||
limitInMilliseconds = number * 60 * 60 * 1000;
|
||||
break;
|
||||
case 'd':
|
||||
limitInMilliseconds = number * 24 * 60 * 60 * 1000;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
const memberCreationDate = member.user.createdAt;
|
||||
const currentDate = new Date();
|
||||
const timeDifference = currentDate - memberCreationDate;
|
||||
if (timeDifference < limitInMilliseconds) {
|
||||
return member.kick('Votre compte est trop récent.').catch(console.error);
|
||||
}else {
|
||||
const invites = await member.guild.invites.fetch();
|
||||
const invite = invites.find(i => i.uses > 1);
|
||||
if (invite && invite.inviter) {
|
||||
await updateInviteCount(member.guild.id, invite.inviter.id);
|
||||
return;
|
||||
|
||||
}
|
||||
}
|
||||
}else {
|
||||
|
||||
const invites = await member.guild.invites.fetch();
|
||||
const invite = invites.find(i => i.uses > 1);
|
||||
if (invite && invite.inviter) {
|
||||
await updateInviteCount(member.guild.id, invite.inviter.id);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-bot protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-bot protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-bot protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
function updateInviteCount(guildId, memberId) {
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
db.run(`INSERT INTO invitations (guild_id, member_id, invite_count)
|
||||
VALUES (?, ?, 1)
|
||||
ON CONFLICT(guild_id, member_id) DO UPDATE SET invite_count = invite_count + 1`,
|
||||
[guildId, memberId], function(err) {
|
||||
if (err) {
|
||||
return console.error(err.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a ajoutée un bot et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
module.exports = {
|
||||
name: Events.GuildUpdate,
|
||||
async execute(oldGuild, newGuild, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = oldGuild.id;
|
||||
const guild = oldGuild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.GuildUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antibotConfig = data[guildId]?.antiupdate;
|
||||
if (!antibotConfig || antibotConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antibotConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antibotConfig.action, newGuild);
|
||||
await updateGuildSettings(oldGuild, newGuild);
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antibotConfig.action, newGuild);
|
||||
await updateGuildSettings(oldGuild, newGuild);
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antibotConfig.action, newGuild);
|
||||
await updateGuildSettings(oldGuild, newGuild);
|
||||
sendlog(user, antibotConfig.action, guild, data);
|
||||
}
|
||||
}catch(err) {
|
||||
console.log(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-update protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-update protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-update protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function updateGuildSettings(oldGuild, newGuild) {
|
||||
if (oldGuild.name !== newGuild.name) {
|
||||
await newGuild.setName(oldGuild.name);
|
||||
}
|
||||
if (oldGuild.iconURL({ dynamic: true }) !== newGuild.iconURL({ dynamic: true })) {
|
||||
await newGuild.setIcon(oldGuild.iconURL({ dynamic: true }));
|
||||
}
|
||||
if (oldGuild.bannerURL() !== newGuild.bannerURL()) {
|
||||
await newGuild.setBanner(oldGuild.bannerURL());
|
||||
}
|
||||
if (oldGuild.systemChannel !== newGuild.systemChannel) {
|
||||
await newGuild.setSystemChannel(oldGuild.systemChannel);
|
||||
}
|
||||
if (oldGuild.systemChannelFlags !== newGuild.systemChannelFlags) {
|
||||
await newGuild.setSystemChannelFlags(oldGuild.systemChannelFlags);
|
||||
}
|
||||
if (oldGuild.verificationLevel !== newGuild.verificationLevel) {
|
||||
await newGuild.setVerificationLevel(oldGuild.verificationLevel);
|
||||
}
|
||||
if (oldGuild.widget !== newGuild.widget) {
|
||||
await newGuild.setWidget(oldGuild.widget);
|
||||
}
|
||||
if (oldGuild.splashURL !== newGuild.splashURL) {
|
||||
await newGuild.setSplash(oldGuild.splashURL);
|
||||
}
|
||||
if (oldGuild.rulesChannel !== newGuild.rulesChannel) {
|
||||
await newGuild.setRulesChannel(oldGuild.rulesChannel);
|
||||
}
|
||||
if (oldGuild.publicUpdatesChannel !== newGuild.publicUpdatesChannel) {
|
||||
await newGuild.setPublicUpdatesChannel(oldGuild.publicUpdatesChannel);
|
||||
}
|
||||
if (oldGuild.defaultMessageNotifications !== newGuild.defaultMessageNotifications) {
|
||||
await newGuild.setDefaultMessageNotifications(oldGuild.defaultMessageNotifications);
|
||||
}
|
||||
if (oldGuild.afkChannel !== newGuild.afkChannel) {
|
||||
await newGuild.setAFKChannel(oldGuild.afkChannel);
|
||||
}
|
||||
if (oldGuild.region !== newGuild.region) {
|
||||
await newGuild.setRegion(oldGuild.region)
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a modifiée le serveur et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const { Events, ChannelType } = require("discord.js");
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.MessageCreate,
|
||||
async execute(message, client) {
|
||||
const botId = message.client.user.id;
|
||||
const guildId = message.guild.id;
|
||||
const user = message.member;
|
||||
if (message.channel.type === ChannelType.DM) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antimentionConfig = data[guildId]?.antimention;
|
||||
let statusMention = 'off';
|
||||
let mentionLimit = 0;
|
||||
|
||||
if (antimentionConfig) {
|
||||
({ type: statusMention, nombre: mentionLimit } = antimentionConfig);
|
||||
}
|
||||
|
||||
if (statusMention !== "off") {
|
||||
const mentionCount = message.mentions.users.size;
|
||||
if (mentionLimit === 0) return;
|
||||
if (mentionCount > mentionLimit) {
|
||||
if (statusMention === "wl" || statusMention === "whitelist") {
|
||||
if (await getPermissionLevel(user, client) >= 10) return;
|
||||
if (whitelist[message.author.id]) return;
|
||||
message.delete().catch(err => {});
|
||||
}else if (statusMention === "owner") {
|
||||
const userlevelsawait = await getPermissionLevel(user, client)
|
||||
if (userlevelsawait >= 10) return;
|
||||
message.delete().catch(err => {});
|
||||
}else if (statusMention === "buyer") {
|
||||
if (await getPermissionLevel(user, client) === 11) return;
|
||||
if (whitelist[message.author.id]) return;
|
||||
message.delete().catch(err => {});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,111 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildRoleCreate,
|
||||
async execute(role, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = role.guild.id;
|
||||
const guild = role.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.RoleCreate,
|
||||
limit: 1,
|
||||
});
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiroleConfig = data[guildId]?.antirole;
|
||||
if (!antiroleConfig || antiroleConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiroleConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
await role.delete('Anti-role protection');
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
await role.delete('Anti-role protection');
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
await role.delete('Anti-role protection');
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-role protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-role protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-role protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a crée un role et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,223 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildRoleDelete,
|
||||
async execute(role, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = role.guild.id;
|
||||
const guild = role.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.RoleDelete,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
if (!firstEntry) return;
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiroleConfig = data[guildId]?.antirole;
|
||||
if (!antiroleConfig || antiroleConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiroleConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
let membersWithRole = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM antiraid WHERE guild = ?', [guildId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value).role[role.id] : []);
|
||||
});
|
||||
});
|
||||
const newRole = await role.guild.roles.create({
|
||||
data: {
|
||||
name: 'TempRole',
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
permissions: role.permissions,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
},
|
||||
reason: 'Anti-role protection',
|
||||
});
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: role.name,
|
||||
permissions: role.permissions,
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
}, 'Restauration du rôle supprimé');
|
||||
} catch (error) {
|
||||
}
|
||||
membersWithRole.forEach(async (memberId) => {
|
||||
const member = guild.members.cache.get(memberId);
|
||||
if (member) {
|
||||
await member.roles.add(newRole, 'Anti-role protection');
|
||||
}
|
||||
});
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
let membersWithRole = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM antiraid WHERE guild = ?', [guildId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value).role[role.id] : []);
|
||||
});
|
||||
});
|
||||
const newRole = await role.guild.roles.create({
|
||||
data: {
|
||||
name: 'TempRole',
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
permissions: role.permissions,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
},
|
||||
reason: 'Anti-role protection',
|
||||
});
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: role.name,
|
||||
permissions: role.permissions,
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
}, 'Restauration du rôle supprimé');
|
||||
} catch (error) {
|
||||
}
|
||||
|
||||
membersWithRole.forEach(async (memberId) => {
|
||||
const member = guild.members.cache.get(memberId);
|
||||
if (member) {
|
||||
await member.roles.add(newRole, 'Anti-role protection');
|
||||
}
|
||||
});
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
let membersWithRole = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM antiraid WHERE guild = ?', [guildId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value).role[role.id] : []);
|
||||
});
|
||||
});
|
||||
const newRole = await role.guild.roles.create({
|
||||
data: {
|
||||
name: 'TempRole',
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
permissions: role.permissions,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
},
|
||||
reason: 'Anti-role protection',
|
||||
});
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: role.name,
|
||||
permissions: role.permissions,
|
||||
color: role.color,
|
||||
hoist: role.hoist,
|
||||
mentionable: role.mentionable,
|
||||
position: role.position,
|
||||
}, 'Restauration du rôle supprimé');
|
||||
} catch (error) {
|
||||
}
|
||||
membersWithRole.forEach(async (memberId) => {
|
||||
const member = guild.members.cache.get(memberId);
|
||||
if (member) {
|
||||
await member.roles.add(newRole, 'Anti-role protection');
|
||||
}
|
||||
});
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-role protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-role protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-role protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a modifiée un role et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildRoleUpdate,
|
||||
async execute(oldRole, newRole, client) {
|
||||
if (oldRole.name !== newRole.name || oldRole.permissions.bitfield !== newRole.permissions.bitfield) {
|
||||
const botId = client.user.id;
|
||||
const guildId = newRole.guild.id;
|
||||
const guild = newRole.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.RoleUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiroleConfig = data[guildId]?.antirole;
|
||||
if (!antiroleConfig || antiroleConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiroleConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: oldRole.name,
|
||||
permissions: oldRole.permissions,
|
||||
color: oldRole.color,
|
||||
hoist: oldRole.hoist,
|
||||
mentionable: oldRole.mentionable,
|
||||
position: oldRole.position,
|
||||
}, 'Restauration du rôle modifié');
|
||||
} catch (error) {
|
||||
}
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: oldRole.name,
|
||||
permissions: oldRole.permissions,
|
||||
color: oldRole.color,
|
||||
hoist: oldRole.hoist,
|
||||
mentionable: oldRole.mentionable,
|
||||
position: oldRole.position,
|
||||
}, 'Restauration du rôle modifié');
|
||||
} catch (error) {
|
||||
}
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiroleConfig.action, guild);
|
||||
try {
|
||||
await newRole.edit({
|
||||
name: oldRole.name,
|
||||
permissions: oldRole.permissions,
|
||||
color: oldRole.color,
|
||||
hoist: oldRole.hoist,
|
||||
mentionable: oldRole.mentionable,
|
||||
position: oldRole.position,
|
||||
}, 'Restauration du rôle modifié');
|
||||
} catch (error) {
|
||||
}
|
||||
await sendlog(user, antiroleConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-role protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-role protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-role protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a supprimée un role et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField , EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ThreadCreate,
|
||||
async execute(thread, okman ,client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = thread.guild.id;
|
||||
const guild = thread.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ThreadCreate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiThreadConfig = data[guildId]?.antiThread;
|
||||
if (!antiThreadConfig || antiThreadConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiThreadConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await thread.delete('Anti-thread protection');
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await thread.delete('Anti-thread protection');
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await thread.delete('Anti-thread protection');
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-thread protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-thread protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-thread protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a crée un fil et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField , EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ThreadDelete,
|
||||
async execute(thread ,client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = thread.guild.id;
|
||||
const guild = thread.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ThreadDelete,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiThreadConfig = data[guildId]?.antiThread;
|
||||
if (!antiThreadConfig || antiThreadConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiThreadConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-thread protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-thread protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-thread protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a supprimée un fil et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ThreadUpdate,
|
||||
async execute(oldThread, newThread, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = newThread.guild.id;
|
||||
const guild = newThread.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ThreadUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
const antiThreadConfig = data[guildId]?.antiThread;
|
||||
if (!antiThreadConfig || antiThreadConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiThreadConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client)
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await newThread.edit({
|
||||
name: oldThread.name,
|
||||
autoArchiveDuration: oldThread.autoArchiveDuration,
|
||||
reason: 'Anti-thread protection'
|
||||
});
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await newThread.edit({
|
||||
name: oldThread.name,
|
||||
autoArchiveDuration: oldThread.autoArchiveDuration,
|
||||
reason: 'Anti-thread protection'
|
||||
});
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiThreadConfig.action, guild);
|
||||
await newThread.edit({
|
||||
name: oldThread.name,
|
||||
autoArchiveDuration: oldThread.autoArchiveDuration,
|
||||
reason: 'Anti-thread protection'
|
||||
});
|
||||
await sendlog(user, antiThreadConfig.action, guild, data);
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-thread protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-thread protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-thread protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a modifiée un fil et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
const { Events, AuditLogEvent, PermissionsBitField, EmbedBuilder } = require('discord.js');
|
||||
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||
|
||||
module.exports = {
|
||||
name: Events.WebhooksUpdate,
|
||||
async execute(channel, client) {
|
||||
const botId = client.user.id;
|
||||
const guildId = channel.guild.id;
|
||||
const guild = channel.guild;
|
||||
const fetchedLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.WebhookCreate,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
const firstEntry = fetchedLogs.entries.first();
|
||||
const user = guild.members.cache.get(`${firstEntry.executor.id}`);
|
||||
if (user.id === client.user.id) return;
|
||||
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const antiwebhookConfig = data[guildId]?.antiwebhook;
|
||||
if (!antiwebhookConfig || antiwebhookConfig.type === 'off') {
|
||||
return;
|
||||
}
|
||||
data.whitelist = data.whitelist || {};
|
||||
data.whitelist[guildId] = data.whitelist[guildId] || {};
|
||||
const whitelist = data.whitelist[guildId];
|
||||
const type = antiwebhookConfig.type;
|
||||
const permlevel = await getPermissionLevel(user, client);
|
||||
|
||||
try {
|
||||
if (type === "whitelist") {
|
||||
if (permlevel >= 10) return;
|
||||
if (whitelist[user.id]) return;
|
||||
punish(user, antiwebhookConfig.action, guild);
|
||||
const webhookId = firstEntry.targetId;
|
||||
const webhook = await client.fetchWebhook(webhookId);
|
||||
await webhook.delete('Anti-webhook protection');
|
||||
await sendlog(user, antiwebhookConfig.action, guild, data);
|
||||
} else if (type === "owner") {
|
||||
if (permlevel >= 10) return;
|
||||
punish(user, antiwebhookConfig.action, guild);
|
||||
const webhookId = firstEntry.targetId;
|
||||
const webhook = await client.fetchWebhook(webhookId);
|
||||
await webhook.delete('Anti-webhook protection');
|
||||
await sendlog(user, antiwebhookConfig.action, guild, data);
|
||||
} else if (type === "buyer") {
|
||||
if (permlevel === 11) return;
|
||||
punish(user, antiwebhookConfig.action, guild);
|
||||
const webhookId = firstEntry.targetId;
|
||||
const webhook = await client.fetchWebhook(webhookId);
|
||||
await webhook.delete('Anti-webhook protection');
|
||||
await sendlog(user, antiwebhookConfig.action, guild, data);
|
||||
}
|
||||
} catch (err) {
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
async function punish(user, action, guild) {
|
||||
switch (action) {
|
||||
case 'ban':
|
||||
await guild.members.ban(user, { reason: 'Anti-webhook protection' });
|
||||
break;
|
||||
case 'kick':
|
||||
await guild.members.kick(user, 'Anti-webhook protection');
|
||||
break;
|
||||
case 'derank':
|
||||
const dangerousPermissions = [
|
||||
PermissionsBitField.Flags.Administrator,
|
||||
PermissionsBitField.Flags.ManageGuild,
|
||||
PermissionsBitField.Flags.ManageRoles,
|
||||
PermissionsBitField.Flags.ManageChannels,
|
||||
PermissionsBitField.Flags.KickMembers,
|
||||
PermissionsBitField.Flags.BanMembers,
|
||||
PermissionsBitField.Flags.ManageWebhooks,
|
||||
PermissionsBitField.Flags.MuteMembers,
|
||||
PermissionsBitField.Flags.MentionEveryone,
|
||||
PermissionsBitField.Flags.ManageEvents,
|
||||
PermissionsBitField.Flags.ManageThreads,
|
||||
];
|
||||
const member = guild.members.cache.get(user.id);
|
||||
if (member) {
|
||||
const rolesToRemove = member.roles.cache.filter(role => dangerousPermissions.includes(role.permissions.bitfield));
|
||||
await member.roles.remove(rolesToRemove, 'Anti-webhook protection');
|
||||
}
|
||||
break;
|
||||
case 'nothing':
|
||||
break;
|
||||
}
|
||||
}
|
||||
async function sendlog(user, action, guild, data) {
|
||||
if (!data[guild.id]) {
|
||||
data[guild.id] = {};
|
||||
}
|
||||
const channelid = data[guild.id]?.raidlog;
|
||||
if(channelid) {
|
||||
const logChannel = guild.channels.cache.get(channelid);
|
||||
if (!logChannel) return ;
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setDescription(`L'utilisateur <@${user.id}> a crée un webhook et a été \`${action}\`.`)
|
||||
.setColor('#ADD8E6')
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,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 => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -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();
|
||||
},
|
||||
};
|
||||
@@ -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);
|
||||
|
||||
},
|
||||
};
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -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 });
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -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);
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
},
|
||||
};
|
||||
@@ -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 {
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
};
|
||||
@@ -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) {
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
};
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -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 => {
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -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(),
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -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}`);
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,60 @@
|
||||
const { EmbedBuilder, Events } = require('discord.js');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
|
||||
module.exports = {
|
||||
name: Events.GuildMemberUpdate,
|
||||
async execute(oldMember, newMember) {
|
||||
if (!oldMember.premiumSince && newMember.premiumSince) {
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [newMember.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const boostlogChannelId = data[newMember.guild.id]?.boostlog;
|
||||
if (boostlogChannelId) {
|
||||
const boostlogChannel = newMember.guild.channels.cache.get(boostlogChannelId);
|
||||
if (boostlogChannel) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setTitle('Nouveau booster')
|
||||
.setDescription(`${newMember.user.tag} a commencé à booster le serveur!`)
|
||||
.setTimestamp();
|
||||
|
||||
boostlogChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(newMember.premiumSince)
|
||||
if (oldMember.premiumSince && !newMember.premiumSince) {
|
||||
let data = await new Promise((resolve, reject) => {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [newMember.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
reject(err);
|
||||
}
|
||||
resolve(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
const boostlogChannelId = data[newMember.guild.id]?.boostlog;
|
||||
if (boostlogChannelId) {
|
||||
const boostlogChannel = newMember.guild.channels.cache.get(boostlogChannelId);
|
||||
if (boostlogChannel) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setTitle('Booster arrêté')
|
||||
.setDescription(`${newMember.user.tag} a arrêté de booster le serveur.`)
|
||||
.setTimestamp();
|
||||
|
||||
boostlogChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
const { EmbedBuilder, Events } = require('discord.js');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ChannelCreate,
|
||||
execute(channel) {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [channel.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return;
|
||||
}
|
||||
const data = row ? JSON.parse(row.value) : {};
|
||||
const logChannelId = data[channel.guild.id]?.channelog;
|
||||
if (logChannelId) {
|
||||
const logChannel = channel.guild.channels.cache.get(logChannelId);
|
||||
if (logChannel) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setDescription(`Un nouveau salon a été créé : ${channel.name}`)
|
||||
.setTimestamp();
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
const { EmbedBuilder, Events } = require('discord.js');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ChannelDelete,
|
||||
execute(channel) {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [channel.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return;
|
||||
}
|
||||
const data = row ? JSON.parse(row.value) : {};
|
||||
const logChannelId = data[channel.guild.id]?.channelog;
|
||||
if (logChannelId) {
|
||||
const logChannel = channel.guild.channels.cache.get(logChannelId);
|
||||
if (logChannel) {
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setDescription(`Le salon ${channel.name} a été supprimé.`)
|
||||
.setTimestamp();
|
||||
logChannel.send({ embeds: [embed] });
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,32 @@
|
||||
const { EmbedBuilder, Events } = require('discord.js');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const db = new sqlite3.Database('myDatabase.db');
|
||||
|
||||
module.exports = {
|
||||
name: Events.ChannelUpdate,
|
||||
execute(oldChannel, newChannel) {
|
||||
db.get('SELECT value FROM gestion WHERE id = ?', [newChannel.client.user.id], (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return;
|
||||
}
|
||||
const data = row ? JSON.parse(row.value) : {};
|
||||
const logChannelId = data[newChannel.guild.id]?.channelog;
|
||||
if (logChannelId) {
|
||||
const logChannel = newChannel.guild.channels.cache.get(logChannelId);
|
||||
if (logChannel) {
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setColor('#0099ff')
|
||||
.setTitle('Salon modifié')
|
||||
.setDescription(`Le salon ${oldChannel.name} a été modifié.`)
|
||||
.setTimestamp();
|
||||
|
||||
logChannel.send({ embeds: [embed] });
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
};
|
||||
@@ -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
@@ -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.');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user