下面的代码应该让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)
我已经试过很多次了,都没有效果
1条答案
按热度按时间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)
得到它。您的固定代码如下所示: