尝试在不和谐的bot上实现仅Patreon的命令/功能,我将如何实现?

时间:2019-06-19 23:19:04

标签: discord.js

我的不和谐机器人将“ Patreon”角色提供给我的patreon支持者。这个角色是在我的主要不和谐bot服务器上指定的。因此,现在我正在尝试编写一些命令,这些命令仅对在BOTS不和谐服务器中具有“ Patreon”角色的用户可用。我如何才能做到这一点?

就像有一种我可以成为的方式-

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

3 个答案:

答案 0 :(得分:1)

让我们看一下完成此任务所需的任务。

  1. 与您的用户和相应的Patreon角色一起获得“家庭公会”。
    请参见Client.guildsMap.get()

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

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

在这里

https://discord.js.org/#/docs/main/stable/class/Guild

答案 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
}

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