Estoy trabajando en un sistema de matrimonio para mi bot de Discord, pero estoy luchando por descubrir si un usuario ya tiene el rol de "casado".
const Discord = require('discord.js'); module.exports = { name: "marry", aliases: ['m'], description: "marry someone", async run(client, message, args) { const user = message.mentions.users.first() || client.users.get(args[0]); let marriedRole = message.guild.roles.cache.find(r => r.name === "Married"); let singleRole = message.guild.roles.cache.find(r => r.name === "Single"); let proposerID = message.author.id; let proposerName = message.author.username; if (user.roles.cache.some(marriedRole)) { let embed = new Discord.MessageEmbed() .setDescription(`Sorry **${user.tag}**, is already married!`); let messageEmbed = await message.channel.send({ embeds: [embed] }); } if (message.member.roles.cache.some(role => role.name === 'Single')) { let embed = new Discord.MessageEmbed() .setDescription(`**${user.username}**, **${message.author.username}** is asking for your hand in marriage, would you like to accept?`); let messageEmbed = await message.channel.send({ embeds: [embed] }); messageEmbed.react('✅'); messageEmbed.react('❌'); } if (message.member.roles.cache.some(role => role.name === 'Married')) { let embed = new Discord.MessageEmbed() .setDescription(`Sorry **${message.author.username}**, but you are already married!`); let messageEmbed = await message.channel.send({ embeds: [embed] }); } } }sigo recibiendo el error
if (user.roles.cache.some(marriedRole)) { ^
TypeError: no se pueden leer las propiedades de undefined (leyendo 'caché')
Al usar message.mentions.users.first() , obtiene un objeto User a cambio que no tiene la propiedad roles . En su lugar, necesita el objeto GuildMember . Para obtenerlo, todo lo que tiene que hacer es cambiar la parte donde declara la variable de user a:
const user = message.mentions.members.first() || client.users.get(args[0]); Respuesta de Zsolt Meszaros Ya que, si no se menciona en el mensaje, message.mentions.members.first() , así que tenlo en cuenta. client.users.get(args[0]) también obtendría un objeto User , por lo que en lugar de usar eso, puede usar esto:
const user = message.guild.members.cache.get(args[0])