尝试在我的不和谐机器人上实现仅限 Patreon 的命令/功能,我将如何做到这一点



我的不和谐机器人将"Patreon"的角色交给了我的Patreon支持者。这个角色是在我的主不和谐机器人服务器上给出的。所以现在我正在尝试编写一些命令,这些命令仅适用于在 BOTS 不和谐服务器中具有"Patreon"角色的用户,我该如何完成此操作?

就像有没有办法我可以喜欢——

message.member.has('Patreon Role'(.in('My Discord Server(?

让我们回顾一下完成此操作所需的任务。

  1. 获得与您的用户和相应的 Patreon 角色
    的"家庭公会"。请参阅Client.guildsMap.get()

  2. 在公会中找到用户。
    请参阅Guild.member()

  3. 检查用户是否具有 Patreon 角色。
    请参阅GuildMember.rolesCollection.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
}

从本质上讲,要运行命令,他们必须是特定服务器中的支持者,如果它是排他性的并且不满足其他条件,则拒绝他们

最新更新