javascript bot未提供角色

m1m5dgzv  于 2022-11-27  发布在  Java
关注(0)|答案(1)|浏览(133)

下面的代码应该让bot给予用户一个角色,但它目前没有这样做。我的代码:

client.on('interactionCreate', async (interaction) => {
    if (interaction.customId == 'n1') {
        let IGN25 = interaction.fields.getTextInputValue('ask_7')
        let user = client.users.fetch(IGN25)
        interaction.reply(`**done** <@${interaction.user.id}>`)
        const embed8 = new MessageEmbed()
            .setColor('GREEN')
            .setTitle(`**done**`)
            .setThumbnail(client.user.displayAvatarURL())
            .setTimestamp()
        let button25 = new MessageActionRow().addComponents(
            new MessageButton()
                .setCustomId('ROLE')
                .setLabel('give role')
                .setStyle('PRIMARY')
                .setEmoji('➕')
        )
        user.send({ embeds: [embed8], components: [button25] })
        let embed = new MessageEmbed()
            .setColor('GREEN')
            .setTitle(`**info**`)
            .setThumbnail(client.user.displayAvatarURL())
            .setFields(
                { name: 'name', value: ` <@${IGN25}>`, inline: true },
                { name: 'id', value: `**${IGN25}**`, inline: true },
                { name: 'time', value: `**${contents}**` }
            )
        interaction.guild.channels.cache
            .get('1045531394870362232')
            .send({ embeds: [embed] })
    }
    if (interaction.customId == 'ROLE') {
        if (!interaction.isButton()) return
        let role = interaction.guild.roles.cache.find(
            (role) => role.name === 'member'
        )
        user.roles.add(role)
    }
})

这是我收到的错误:

TypeError: Cannot read properties of undefined (reading 'add') 
    at Client.<anonymous> (C:\Users\\Desktop\bot\index.js:93:14) 
    at Client.emit (node:events:525:35)

我已经试过很多次了,都没有效果

bprjcwpo

bprjcwpo1#

这段代码有很多问题。
1.第一个问题是不能在第二个if语句中使用user.roles.add,因为user变量的作用域仅限于第一个if语句,不能在第一个if语句之外使用。您必须将user变量声明移到两个if语句之外,或者在第二个if中创建一个新变量陈述式。
1.第二个问题是user变量是一个User对象,它没有.roles属性。相反,你要寻找的是一个GuildMember,你可以通过interaction.guild.members.cache.get(interaction.user.id)得到它。
您的固定代码如下所示:

// ...
if (interaction.customId == 'ROLE') {
    if (!interaction.isButton()) return
    await interaction.guild.members.fetch()
    const member = interaction.guild.members.cache.get(interaction.user.id)
    let role = interaction.guild.roles.cache.find(
        (role) => role.name === 'member'
    )
    member.roles.add(role)
}
// ...

相关问题