Soy nuevo en la codificación de bots de Discord y quiero crear un comando en el que el bot solo responda si el remitente del mensaje tiene un rol específico.
De acuerdo con la documentación de discord.js, tengo que usar GuildMemberRoleManager.cache . Lamentablemente, no está funcionando.
Todo el comando se ve así:
client.on('messageCreate', (message) => { if ( message.content.toLowerCase() === prefix + 'test' && GuildMemberRoleManager.cache.has(AdminRole) ) message.reply('test'); });Deberías conseguir los papeles del autor. Solo los miembros tienen roles, por lo que deberá obtener al autor como miembro mediante message.member . message.member devuelve un GuildMember y GuildMember s tienen una propiedad de roles que devuelve un GuildMemberRoleManager (el que mencionaste en tu publicación original).
Su propiedad de cache es una colección de los roles de este miembro, por lo que puede usar su método has() para verificar si el usuario tiene el rol de administrador:
client.on('messageCreate', (message) => { let adminRole = 'ADMIN_ROLE'; let isAdmin = message.member.roles.cache.has(adminRole); if (message.content.toLowerCase() === prefix + 'test' && isAdmin) message.reply('test'); });Define las variables que te harán fácil de entender como eres nuevo
const guild = message.guild.id; const role = guild.roles.cache.get("role id"); const cmduser = message.author; const member = await guild.members.fetch(cmduser.id);y hacer si declaración como
if(member.roles.cache.has(role.id)) { return message.channel.send("test") }si desea que el bot verifique si el usuario tiene permiso de administrador que
message.member.hasPermission('ADMINISTRATOR')Verifique todas las banderas permanentes en Discord Perm Flags
Así que de acuerdo a su código será
const guild = message.guild.id; const role = guild.roles.cache.get("role id"); const cmduser = message.author; const member = await guild.members.fetch(cmduser.id); client.on("messageCreate",(message) => { if(message.content.toLowerCase() === prefix + "test" && member.roles.cache.has(role.id)) message.reply("test") })