我的不和谐机器人将“ Patreon”角色提供给我的patreon支持者。这个角色是在我的主要不和谐bot服务器上指定的。因此,现在我正在尝试编写一些命令,这些命令仅对在BOTS不和谐服务器中具有“ Patreon”角色的用户可用。我如何才能做到这一点?
就像有一种我可以成为的方式-
message.member.has('Patreon Role')。in('My Discord Server)?
答案 0 :(得分:1)
让我们看一下完成此任务所需的任务。
与您的用户和相应的Patreon角色一起获得“家庭公会”。
请参见Client.guilds
和Map.get()
。
在公会中查找用户。
请参见Guild.member()
。
检查用户是否具有Patreon角色。
请参见GuildMember.roles
和Collection.find()
。
您可以定义一个功能来帮助您解决此问题,将其导出并在需要的位置进行调用(或在相关范围内进行定义),然后调用它以检查用户是否是Patreon支持者之一。 / p>
这是这个函数的样子...
// Assuming 'client' is the instance of your Discord Client.
function isSupporter(user) {
const homeGuild = client.guilds.get('idHere');
if (!homeGuild) return console.error('Couldn\'t find the bots guild!');
const member = homeGuild.member(user);
if (!member) return false;
const role = member.roles.find(role => role.name === 'Patreon');
if (!role) return false;
return true;
}
然后,例如,在命令中使用此功能...
// Assuming 'message' is a Message.
if (!isSupporter(message.author)) {
return message.channel.send(':x: This command is restricted to Patreon supporters.')
.catch(console.error);
}
答案 1 :(得分:0)
message.member.roles.find('name', 'Patreon Role');//this returns either undefined or a role
它的作用是搜索用户集合,以查看是否具有“ Patreon角色”
如果邮件在同一台服务器上,否则可以这样做
client.guild.find('name','My Discord Server').member(message.author).roles.find('name', 'Patreon Role'); //this also returns undefined or a role
很明显,第二个选项很长,但是基本上是在机器人所在的服务器中搜索名为“ My Discord Server”的服务器,然后找到该消息的GuildMember形式。角色“ Patreon角色”
即使它们不在服务器上,它也有可能崩溃(文档没有说明它是否由于某种原因而返回并返回错误或未定义),所以如果确实崩溃,您可以这样做
client.guild.find('name','My Discord Server').members.find('id', message.author.id).roles.find('name', 'Patreon Role'); //this also returns undefined or a role
您可以在此处了解更多信息:https://discord.js.org/#/docs/main/stable/class/User
在这里
https://discord.js.org/#/docs/main/stable/class/Client
在这里
答案 2 :(得分:0)
尝试给出一个完整的例子,假设这是您的消息事件中
if (message.member.roles.find(r => r.name === 'Patreon') == undefined &&
commandIsExclusive || message.guild.id !== 'this-id-for-BOTS-server') {
// Don't allow them in here
}
本质上,要运行命令,他们必须是特定服务器中的支持者,并且如果是排他性的并且不满足其他条件,则会被拒绝