Encontranos en redes
PermisosRolesIntents4 min de lectura
Gestionar permisos y roles del bot
Calculadora de permisos, jerarquía de roles, verificación de permisos en comandos e intents.
Jerarquía de permisos en Discord
Discord usa un sistema jerárquico de permisos. El bot solo puede gestionar roles que estén por debajo de su rol más alto en la lista del servidor.
Paso 1: Entender la calculadora de permisos
Cada permiso es un bit en un integer. Podés combinarlos:
javascript
const { PermissionFlagsBits } = require('discord.js');
// Permisos comunes para bots
const botPermissions = [
PermissionFlagsBits.SendMessages,
PermissionFlagsBits.EmbedLinks,
PermissionFlagsBits.ManageMessages,
PermissionFlagsBits.ManageRoles,
PermissionFlagsBits.KickMembers,
PermissionFlagsBits.BanMembers
];
// Calcular el integer de permisos
const permissionInteger = botPermissions.reduce((acc, perm) => acc | perm, 0n);
console.log(`Permission integer: ${permissionInteger}`);Paso 2: Verificar permisos en comandos
Siempre verificá permisos antes de ejecutar acciones:
javascript
client.on('interactionCreate', async interaction => {
if (commandName === 'ban') {
// Verificar que el usuario tiene permiso
if (!interaction.member.permissions.has(PermissionFlagsBits.BanMembers)) {
return interaction.reply({
content: 'No tenés permiso para banear.',
ephemeral: true
});
}
// Verificar que el bot tiene permiso
if (!interaction.guild.members.me.permissions.has(PermissionFlagsBits.BanMembers)) {
return interaction.reply({
content: 'No tengo permiso para banear. Revisá mis roles.',
ephemeral: true
});
}
// Verificar jerarquía de roles
const target = interaction.options.getMember('usuario');
if (target.roles.highest.position >= interaction.guild.members.me.roles.highest.position) {
return interaction.reply({
content: 'No puedo banear a alguien con un rol igual o superior al mío.',
ephemeral: true
});
}
}
});Paso 3: Configurar intents correctamente
Los intents controlan qué eventos recibe tu bot:
javascript
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds, // Siempre necesario
GatewayIntentBits.GuildMessages, // Para leer mensajes
GatewayIntentBits.MessageContent, // Para leer contenido (privilegiado)
GatewayIntentBits.GuildMembers, // Para eventos de miembros (privilegiado)
GatewayIntentBits.GuildModeration, // Para eventos de moderación
]
});Intents privilegiados requieren activación manual en el Developer Portal.
Paso 4: Permisos por comando con defaultMemberPermissions
javascript
new SlashCommandBuilder()
.setName('ban')
.setDescription('Banear un usuario')
.setDefaultMemberPermissions(PermissionFlagsBits.BanMembers)
.setDMPermission(false) // Solo funciona en servidoresEsto oculta el comando a usuarios sin el permiso requerido.
Recomendaciones
- Pedí solo los permisos que tu bot realmente necesita
- Verificá permisos tanto del usuario como del bot antes de actuar
- Usá
defaultMemberPermissionspara restringir comandos sensibles - Documentá qué permisos necesita tu bot y por qué
¿Te resultó útil esta guía?