【问题标题】:Toggle role of a member切换成员的角色
【发布时间】:2021-10-01 04:22:49
【问题描述】:
所以我尝试做的是,如果标记的用户没有标记的角色,机器人会给他们标记的角色,如果标记的用户已经有标记的角色,机器人会从他们身上删除它。但它只给标记的用户角色,即使用户已经拥有角色。
if (!member.roles.cache.has(role)) {
member.roles.add(role)
message.channel.send(new MessageEmbed()
.setColor("RED")
.setDescription(`${role} wurde ${member} hinzugefügt.`))
} else if (member.roles.cache.has(role)) {
member.roles.remove(role)
message.channel.send(new MessageEmbed()
.setColor("RED")
.setDescription(`${role} wurde von ${member} entfernt.`)
}
【问题讨论】:
标签:
javascript
discord
discord.js
【解决方案1】:
您的role 变量似乎是Role 对象(可能是message.mentions.roles.first())。
由于member.roles.cache 是一个集合,它的has 方法接受一个ID 作为参数。所以试试看if (member.roles.cache.has(role.id))
此外,您可能应该在发送确认消息之前等待添加/删除角色。查看下面的代码。
if (member.roles.cache.has(role.id)) {
await member.roles.remove(role);
return message.channel.send(
new MessageEmbed()
.setColor('RED')
.setDescription(`${role} wurde von ${member} entfernt.`),
);
}
await member.roles.add(role);
message.channel.send(
new MessageEmbed()
.setColor('RED')
.setDescription(`${role} wurde ${member} hinzugefügt.`),
);
PS:确保你的处理程序是一个异步函数,因为我在上面使用await。