我希望我的机器人在人们加入服务器时赋予他们特定的 Angular 色。但我遇到了一些我不太明白的奇怪错误。
这是代码:
const { GuildMember, MessageEmbed } = require("discord.js");
module.exports = {
name: "guildMemberAdd",
/**
* @param {GuildMember} member
*/
async execute(member){
let role = member.guild.roles.cache.some(role => role.name === 'Member')
member.roles.add(role)
member.guild.channels.cache.get(process.env.WELCOME_MESSAGE_CHANNEL_ID).send({
embeds: [
new MessageEmbed()
.setTitle("Welcome! :smiley:")
.setDescription(`${member.toString()} has joined the server!\n
Thanks for joining. Head over to <#${process.env.RULE_CHANNEL_ID}> and verify yourself in <#${process.env.VERIFY_CHANNEL_ID}> to get access to all other channels.`)
.setThumbnail(member.user.displayAvatarURL())
.setColor("GREEN")
]
})
}
}
当有人加入时,我收到此错误消息:
TypeError [INVALID_TYPE]: Supplied roles is not a Role, Snowflake or Array or Collection of Roles or Snowflakes.
最佳答案
问题是 some()
返回一个 bool 值(true
或 false
),当您尝试向成员添加 Angular 色时,您将传递此 bool 值而不是 Angular 色 ID。您可以使用 find()
方法,而不是返回给定函数返回真值的第一项(即,其中 role.name
等于 "Member"
):
async execute(member) {
let role = member.guild.roles.cache.find((role) => role.name === 'Member');
if (!role)
return console.log('Cannot find the role with the name "Member"');
member.roles.add(role);
member.guild.channels.cache
.get(process.env.WELCOME_MESSAGE_CHANNEL_ID)
.send({
embeds: [
new MessageEmbed()
.setTitle('Welcome! :smiley:')
.setDescription(
`${member.toString()} has joined the server!\n Thanks for joining. Head over to <#${process.env.RULE_CHANNEL_ID}> and verify yourself in <#${process.env.VERIFY_CHANNEL_ID}> to get access to all other channels.`,
)
.setThumbnail(member.user.displayAvatarURL())
.setColor('GREEN'),
],
});
}
关于javascript - 当成员加入我的服务器时,discord.js 无法向成员添加角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70640545/