NodeJS 无法使用角色读取未定义(阅读“缓存”)的属性

fzsnzjdm  于 2023-01-30  发布在  Node.js
关注(0)|答案(2)|浏览(106)

我工作在一个不和谐的机器人,但我有一个问题,当我想知道如果用户谁点击按钮有一个角色

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
        }

但我有这个错误:
if(交互.用户.角色.缓存.has(配置.lspd_role_id)){ ^
TypeError:无法读取未定义的属性(阅读“缓存”)

2hh7jdfx

2hh7jdfx1#

User在缓存中没有角色,只有GuildMember具有角色。
您不需要获取用户的角色,而是必须获取他作为guildmember(成员),然后在缓存中搜索他的角色。

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')
b4qexyjb

b4qexyjb2#

必须从GuildMember对象访问角色。可以使用BaseInteraction#member获取成员

if (interaction.member.roles.cache.has(id)) {
  // ...
}

相关问题