Quiero programar un comando de ban para mi bot de Discord. Tengo esta línea donde el bot debe verificar si un usuario tiene el permiso de Administrador. Si el usuario que debería ser baneado los tiene, el bot no banea al usuario y falla. Cuando trato de ejecutar este comando me sale esto:
TypeError: Cannot read properties of undefined (reading 'has')no entiendo porque Nadie a quien le pregunté pudo ayudarme, no encontré nada en línea, así que espero poder encontrar ayuda aquí.
Mi código:
const discord = require('discord.js'); const { Permissions } = require('discord.js'); module.exports.run = async (Client, message, args) => { if (!message.member.roles.cache.some(role => role.id == 589850931785498624)) { return message.reply("You don't have the perms."); } const mention = message.mentions.users.first(); if (!mention) { return message.reply('You need to tag a user!'); } if (mention.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) { return message.reply("You can't ban an Administrator!") } //message.guild.members.ban(mention); } module.exports.help = { name: "ban", aliases: ["b"], }"Error de tipo: no se pueden leer las propiedades de undefined (leyendo 'has')" significa que mention.permissions la mención no están undefined . Es porque su variable de mention es un User y solo los miembros del GuildMember tienen permissions .
Otro error es que intenta verificar si role.id es igual a un número/entero, pero los copos de nieve (como 589850931785498624 ) siempre deben ser cadenas , ya que son mayores que MAX_SAFE_INTEGER .
module.exports.run = async (Client, message, args) => { if (!message.member.roles.cache.some((role) => role.id == '589850931785498624')) return message.reply("You don't have the perms."); const mentionedMember = message.mentions.members.first(); if (!mentionedMember) return message.reply('You need to tag a user!'); if (mentionedMember.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) return message.reply("You can't ban an Administrator!"); message.guild.members.ban(mentionedMember); };