mirror of
https://github.com/arthur-pbty/gestion.git
synced 2026-06-03 15:07:26 +02:00
role limit and blrank add
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
const { ActionRowBuilder, EmbedBuilder, ButtonBuilder, ButtonStyle} = require('discord.js');
|
||||
const db = require('quick.db');
|
||||
const GestionDb = new db.table('gestion');
|
||||
|
||||
module.exports = {
|
||||
name: 'rolelimit',
|
||||
description: 'Affiche et gère les rôles limités',
|
||||
emote: '🔒',
|
||||
utilisation: '+rolelimit',
|
||||
category: 'antiraid',
|
||||
|
||||
async execute(interaction) {
|
||||
const botId = interaction.client.user.id;
|
||||
const guildId = interaction.guild.id;
|
||||
|
||||
// Récupère les rôles limités
|
||||
let limitedRoles = GestionDb.get(`${botId}.${guildId}.rolelimits`) || [];
|
||||
|
||||
// Crée un embed avec les rôles limités
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle('Rôles limités')
|
||||
.setDescription(limitedRoles.map(role => `<@&${role.id}>: ${role.limit}`).join('\n') || 'Aucun rôle limité.')
|
||||
.setColor('#0099ff');
|
||||
|
||||
// Crée les boutons
|
||||
const addButton = new ButtonBuilder()
|
||||
.setCustomId('rolelimit_add')
|
||||
.setLabel('Add')
|
||||
.setStyle(ButtonStyle.Success);
|
||||
const removeButton = new ButtonBuilder()
|
||||
.setCustomId('rolelimit_remove')
|
||||
.setLabel('Remove')
|
||||
.setStyle(ButtonStyle.Danger);
|
||||
const row = new ActionRowBuilder()
|
||||
.addComponents(addButton, removeButton);
|
||||
const sentMessage = await interaction.reply({ embeds: [embed], components: [row], fetchReply: true });
|
||||
|
||||
const filter = i => i.isButton() && i.customId.startsWith('rolelimit_') && i.user;
|
||||
const collector = sentMessage.createMessageComponentCollector({ filter: filter, time: 2 * 60 * 1000 + 30 * 1000 });
|
||||
|
||||
collector.on('collect', async (i) => {
|
||||
if (i.customId === 'rolelimit_add') {
|
||||
const questionMessage = await i.reply('Mentionnez un rôle ou fournissez un ID de rôle à limiter.');
|
||||
const filter = m => m.author && m.author.id === i.user.id;
|
||||
const collected = await i.channel.awaitMessages({ filter, max: 1, time: 60000000 });
|
||||
const role = collected.first().mentions.roles.first() || interaction.guild.roles.cache.get(collected.first().content);
|
||||
if (!role) {
|
||||
return i.followUp('Rôle invalide.');
|
||||
}
|
||||
await i.followUp('Quelle est la limite pour ce rôle ?');
|
||||
const limitCollected = await i.channel.awaitMessages({ filter, max: 1, time: 60000000 });
|
||||
const limit = parseInt(limitCollected.first().content);
|
||||
if (isNaN(limit)) {
|
||||
return i.followUp('Limite invalide.');
|
||||
}
|
||||
const existingRole = limitedRoles.find(r => r.id === role.id);
|
||||
if (existingRole) {
|
||||
existingRole.limit = limit;
|
||||
} else {
|
||||
limitedRoles.push({ id: role.id, limit });
|
||||
}
|
||||
GestionDb.set(`${botId}.${guildId}.rolelimits`, limitedRoles);
|
||||
await questionMessage.delete();
|
||||
await collected.first().delete();
|
||||
const updatedEmbed = new EmbedBuilder()
|
||||
.setTitle('Rôles limités')
|
||||
.setDescription(limitedRoles.map(role => `<@&${role.id}>: ${role.limit}`).join('\n') || 'Aucun rôle limité.')
|
||||
.setColor('#0099ff');
|
||||
|
||||
sentMessage.edit({ embeds: [updatedEmbed] });
|
||||
} else if (i.customId === 'rolelimit_remove') {
|
||||
const questionMessage = await i.reply('Mentionnez un rôle ou fournissez un ID de rôle à supprimer.');
|
||||
const filter = m => m.author && m.author.id === i.user.id;
|
||||
const collected = await i.channel.awaitMessages({ filter, max: 1, time: 60000000 });
|
||||
const roleToRemove = collected.first().mentions.roles.first() || interaction.guild.roles.cache.get(collected.first().content);
|
||||
if (!roleToRemove) {
|
||||
return i.followUp('Rôle invalide.');
|
||||
}
|
||||
limitedRoles = limitedRoles.filter(role => role.id !== roleToRemove.id);
|
||||
GestionDb.set(`${botId}.${guildId}.rolelimits`, limitedRoles);
|
||||
const updatedEmbed = new EmbedBuilder()
|
||||
.setTitle('Rôles limités')
|
||||
.setDescription(limitedRoles.map(role => `<@&${role.id}>: ${role.limit}`).join('\n') || 'Aucun rôle limité.')
|
||||
.setColor('#0099ff');
|
||||
await questionMessage.delete();
|
||||
await collected.first().delete();
|
||||
sentMessage.edit({ embeds: [updatedEmbed] });
|
||||
}
|
||||
});
|
||||
|
||||
collector.on('end', collected => {
|
||||
sentMessage.delete();
|
||||
collected.forEach(i => i.message.delete());
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,39 @@
|
||||
const { EmbedBuilder} = require('discord.js');
|
||||
const db = require('quick.db');
|
||||
const GestionDb = new db.table("gestion");
|
||||
|
||||
module.exports = {
|
||||
name: 'blrank',
|
||||
description: 'Affiché ou gérés la blrankn',
|
||||
emote: '👑',
|
||||
utilisation: 'blrank [@user]',
|
||||
category: 'gestion',
|
||||
|
||||
async execute(message, args, client) {
|
||||
const botId = message.client.user.id;
|
||||
const guildId = message.guild.id;
|
||||
|
||||
if (args.length > 0) {
|
||||
const userId = args[0].replace(/<@!?(\d+)>/, '$1');
|
||||
let blrank = await GestionDb.get(`${botId}.${guildId}.blrank`) || {};
|
||||
|
||||
if (blrank[userId]) {
|
||||
delete blrank[userId];
|
||||
await GestionDb.set(`${botId}.${guildId}.blrank`, blrank);
|
||||
message.reply('Utilisateur retiré de la blrank.');
|
||||
} else {
|
||||
blrank[userId] = true;
|
||||
await GestionDb.set(`${botId}.${guildId}.blrank`, blrank);
|
||||
message.reply('Utilisateur ajouté à la blrank.');
|
||||
}
|
||||
} else {
|
||||
let blrank = await GestionDb.get(`${botId}.${guildId}.blrank`) || {};
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle('Blrank')
|
||||
.setDescription(Object.keys(blrank).map(id => `<@${id}>`).join('\n') || 'Aucun utilisateur sur la liste blanche')
|
||||
.setFooter({ text: message.client.user.username, iconURL: client.user.displayAvatarURL({dynamic: true})});
|
||||
|
||||
message.channel.send({ embeds: [embed] });
|
||||
}
|
||||
},
|
||||
};
|
||||
+14
-30
@@ -39,40 +39,24 @@ module.exports = {
|
||||
|
||||
return message.channel.send({ embeds: [embed] });
|
||||
}
|
||||
|
||||
// Si l'utilisateur fournit un salon vocal et des rôles
|
||||
if (mentionedChannel && args.length > 1) {
|
||||
const roles = [];
|
||||
// Utilisez une boucle pour traiter tous les rôles mentionnés
|
||||
for (let i = 1; i < args.length; i++) {
|
||||
// Vérifiez si message.mentions.roles est défini
|
||||
if (message.mentions.roles && message.mentions.roles.cache) {
|
||||
const role = message.mentions.roles.cache.get(args[i]);
|
||||
if (role) {
|
||||
roles.push(role.id);
|
||||
} else {
|
||||
// Vérifiez si l'argument est un ID de rôle valide
|
||||
const roleById = message.guild.roles.cache.get(args[i]);
|
||||
if (roleById) {
|
||||
roles.push(roleById.id);
|
||||
if (mentionedChannel && args.length > 1) {
|
||||
const roles = [];
|
||||
for (let i = 1; i < args.length; i++) {
|
||||
const roleId = args[i].match(/^<@&(\d+)>$/) || args[i].match(/^(\d+)$/);
|
||||
if (roleId) {
|
||||
const role = message.guild.roles.cache.get(roleId[1]);
|
||||
if (role) {
|
||||
roles.push(role.id);
|
||||
} else {
|
||||
return message.channel.send("Un ou plusieurs rôles mentionnés sont invalides.");
|
||||
}
|
||||
} else {
|
||||
return message.channel.send("Un ou plusieurs rôles mentionnés sont invalides.");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Vérifiez si l'argument est un ID de rôle valide
|
||||
const roleById = message.guild.roles.cache.get(args[i]);
|
||||
if (roleById) {
|
||||
roles.push(roleById.id);
|
||||
} else {
|
||||
return message.channel.send("Un ou plusieurs rôles mentionnés sont invalides.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Enregistre les rôles dans la base de données
|
||||
GestionDb.set(`${botId}.${guildId}.rolevocal.${mentionedChannel.id}`, roles);
|
||||
message.channel.send(`Les rôles ont été enregistrés pour le salon vocal <#${mentionedChannel.id}>.`);
|
||||
}
|
||||
GestionDb.set(`${botId}.${guildId}.rolevocal.${mentionedChannel.id}`, roles);
|
||||
message.channel.send(`Les rôles ont été enregistrés pour le salon vocal <#${mentionedChannel.id}>.`);
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
const db = require('quick.db');
|
||||
const GestionDb = new db.table('gestion');
|
||||
module.exports = {
|
||||
name: 'guildMemberUpdate',
|
||||
execute(oldMember, newMember) {
|
||||
const botId = newMember.client.user.id;
|
||||
const guildId = newMember.guild.id;
|
||||
|
||||
const limitedRoles = GestionDb.get(`${botId}.${guildId}.rolelimits`) || [];
|
||||
const blrank = GestionDb.get(`${botId}.${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) {
|
||||
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
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) {
|
||||
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
|
||||
}
|
||||
}
|
||||
if (memberCount > limitedRole.limit) {
|
||||
try {
|
||||
await newMember.roles.remove(role);
|
||||
} catch (error) {
|
||||
console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user