i work on a discord bot but i have a problem when i want to know if user who clicked on button have a role
if (interaction.customId === "button_one") {
responseembed.description = `\u200b\n**${config.responses.response_1}**\n\u200b\n`
if (interaction.user.roles.cache.has(config.lspd_role_id)) {
const logchannel = interaction.guild.channels.cache.get(config.lspd_channel_id)
}else if (interaction.user.roles.cache.has(config.lssd_role_id)) {
const logchannel = interaction.guild.channels.cache.get(config.lssd_channel_id)
}
logchannel.send({ embeds: [PriseService], ephemeral: false })
// let invitecutie = new MessageButton()
// .setLabel("Invite Link")
// .setStyle("url")
// .setURL("Link")
// let buttonRow = new MessageActionRow()
// .addComponent(invitecutie)
//!If You Want Button in the Response remove // from the the Above 6 lines
return interaction.reply({ embeds: [responseembed], ephemeral: true })//If you want to send link button add ,component: buttonRow after the ephermeral: true declaration
}
but i have this error :
if (interaction.user.roles.cache.has(config.lspd_role_id)) { ^
TypeError: Cannot read properties of undefined (reading 'cache')
CodePudding user response:
User
's doesn't have roles in cache, only GuildMember
's have.
Instead of getting users' roles, you must fetch him as guildmember (member) and then search his roles in cache.
const user = interaction.user
const member = interaction.guild.members.fetch({ user: user })
if (member.roles.cache.has(config.lspd_role_id)) return true
// output: true
if (user.roles.cache.has(config.lspd_role_id)) return true
// expected output: true
// output: TypeError: Cannot read properties of undefined (reading 'cache')
CodePudding user response:
You must access the roles from a GuildMember
object. You can get the member with BaseInteraction#member
if (interaction.member.roles.cache.has(id)) {
// ...
}