I want to check if the member that was mentioned role is as the same position of the bot or higher, but I am getting an error.
const member = message.mentions.users.first();
const reason = args.slice(1).join(' ') || 'No reason specified.'
if (member.roles.highest.position >= message.guild.client.roles.highest.position) return message.reply('I cannot moderate this user as their highest role is higher than mine or I have the same highest role position as them.')
The error:
TypeError: Cannot read properties of undefined (reading 'highest')
I am discord.js v13 and Node.js v16
CodePudding user response:
It's important to remember that in Discord (and, consequently, Discord.js), User
s are absolutely not the same as Member
s. message.mentions.users.first();
returns a User
object, which doesn't have any property named roles
.
You seem to want the members
property on message.mentions
instead, which returns a Collection of GuildMember
objects, each of which should have the roles
property:
const member = message.mentions.members.first();
const reason = args.slice(1).join(' ') || 'No reason specified.'
if (member.roles.highest.position >= message.guild.client.roles.highest.position) return message.reply('I cannot moderate this user as their highest role is higher than mine or I have the same highest role position as them.')
CodePudding user response:
You are using assigning a User
to member
, and message.guild.client
returns a Client
object, which does not have .roles
. Use .mentions.members
and .guild.me
instead
const member = message.mentions.members.first();
const reason = args.slice(1).join(' ') || 'No reason specified.'
if (member.roles.highest.position >= message.guild.me.roles.highest.position) return message.reply('...')
CodePudding user response:
When you use message.guild.client
, you get the client which instantiated the guild and it doesn't have a roles
property. Instead you can use:
const member = message.mentions.members.first();
const botMember = message.guild.members.cache.get(client.user.id)
const reason = args.slice(1).join(' ') || 'No reason specified.'
if (member.roles.highest.position >= botMember.roles.highest.position) return message.reply('I cannot moderate this user as their highest role is higher than mine or I have the same highest role position as them.')