我的不和谐机器人将"Patreon"的角色交给了我的Patreon支持者。这个角色是在我的主不和谐机器人服务器上给出的。所以现在我正在尝试编写一些命令,这些命令仅适用于在 BOTS 不和谐服务器中具有"Patreon"角色的用户,我该如何完成此操作?
就像有没有办法我可以喜欢——
message.member.has('Patreon Role'(.in('My Discord Server(?
让我们回顾一下完成此操作所需的任务。
-
获得与您的用户和相应的 Patreon 角色
的"家庭公会"。请参阅Client.guilds
和Map.get()
。 -
在公会中找到用户。
请参阅Guild.member()
。 -
检查用户是否具有 Patreon 角色。
请参阅GuildMember.roles
和Collection.find()
。
您可以定义一个函数来帮助您解决此问题,将其导出并在您需要的地方需要它(或在相关范围内定义它(,然后调用它以检查用户是否是您的 Patreon 支持者之一。
这是这个函数的样子...
// 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);
}
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
显然,第二个选项很长,但基本上所做的是搜索机器人所在的服务器,寻找名为"我的不和谐服务器"的服务器,然后找到消息的公会成员形式.author用户可解析,然后搜索他们的角色"Patreon Role">
如果它们不在服务器上,它可能会崩溃(文档没有说明它是否返回和错误或由于某种原因未定义(,所以如果它确实崩溃了,你可以改为
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
和这里
https://discord.js.org/#/docs/main/stable/class/Guild
尝试给出一个完整的示例,假设这是在您的消息事件中
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
}
从本质上讲,要运行命令,他们必须是特定服务器中的支持者,如果它是排他性的并且不满足其他条件,则拒绝他们