我希望我的机器人仅在我的服务器中具有角色时才运行命令。我的机器人位于许多服务器中,我希望该命令仅在它们在特定服务器中具有角色时才起作用。
我尝试了很多方法,例如:
let guildcheck = client.guilds.get('496780648351006720')
if (guildcheck.member.roles.has(role => role.name === 'Role')) {
message.channel.send("works")
}else{
message.channel.send("doesn't work")
}
我预计这会成功,所以如果我在“496780648351006720”中拥有“角色”,它会回复“作品”。
最佳答案
if (guildcheck.member.roles.has(role => role.name === '角色'))
由于公会成员数量众多,无法通过guildcheck.member
直接获取公会成员;无论如何,代码都会对要获取哪个成员感到困惑。
您尝试使用的可能是 member(User)
函数,而不是属性。按照文档,您需要为其提供一个用户作为参数,如下所示:
if (guildcheck.member(message.author).rol...)
这样,您就可以将消息的发送者作为公会成员获取。
(请注意,如果用户不在目标公会中,guildcheck.member(message.author)
将为 null。 )
或者...
你可以做message.member
简单地将消息的发送者作为公会成员
如果消息不在公会中(或者用户不在服务器中),它只会返回 null/default。
唯一的问题是它现在允许公会中的任何用户使用您的命令。
您可以通过检查发送此消息的公会 ID 来避免这种情况,如下所示:
// Ignore if this is not the desired guild.
if (message.guild.id !== "Your desired guild ID") { return; }
if (message.member.roles.has(role => role.name === 'Role')) {
message.channel.send("works");
}else{
message.channel.send("doesn't work");
}
关于javascript - 如何才能确保只有在我的服务器中具有角色的人员才能使用该机器人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740539/