如何做到这一点,以便只有在我的服务器中具有角色的人才能使用该机器人?

时间:2019-08-31 18:10:34

标签: javascript discord discord.js

我希望我的机器人仅在他们在我的服务器中具有角色的情况下运行命令。我的机器人程序位于许多服务器中,我希望该命令仅在它们在特定服务器中具有角色时才起作用。

我尝试了许多方法,例如:

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”中有“角色”,它将以“作品”答复。

1 个答案:

答案 0 :(得分:2)

if (guildcheck.member.roles.has(role => role.name === 'Role'))
您不能仅通过执行guildcheck.member来直接获得公会成员,因为公会中有如此多的成员。该代码对于无论如何都要获取哪个成员都感到困惑。

您尝试使用的可能是member(User)函数,而不是属性。遵循文档之后,您需要给它一个用户作为参数,例如:

if (guildcheck.member(message.author).rol...)
这样,您可以将消息的发件人作为公会成员。
(请注意,如果用户不在目标公会中,guildcheck.member(message.author)将为空。)

或者...

您可以执行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");
}