1

所以我正在使用 discord.js 及其突击队框架开发一个不和谐机器人。

我将一些信息存储在 mongodb 数据库中,例如服务器前缀或角色,以便运行某些命令。

突击队框架有一个名为

hasPermission(message) {
   ...
}

这期望一个值返回 true 或 false,如果为 true,则命令运行,如果 false 命令不运行并在不和谐中吐出错误。

好吧,我需要检查用户是否具有特定角色或角色以供他们使用某个命令(审核)

这是代码

async hasPermission(message) {
   const perm = await roleList.find({Guild_id: message.guild.id})
   console.log(perm[0].Roles)
   return (message.member.roles.cache.some(role => perm[0].Roles.includes(role.name)))
}

现在,让它异步只会破坏它的功能,并且总是会返回 true。

所以我尝试使用这样的承诺

hasPermission(message){
   roleList.find({Guild_id: message.guild.id}).then(roles => {
      console.log(roles[0].Roles)
      const b= (message.member.roles.cache.some(role => roles[0].Roles.includes(role.name)))
      console.log("Has permission?", b)
      return b
   })
}

这在 .then() 中返回 true,但没有通过并返回 false(这是默认值)

数据库调用正常工作,比较应该返回 true,应该返回 false,只是函数hasPermission()没有运行。

我需要在他们可以运行命令之前从数据库中检查他们的角色,并且没有内置的“角色”检查,我对他们的不和谐支持服务器没有运气。有什么建议么。

4

1 回答 1

1

你绝对是在正确的轨道上!then尝试返回一个承诺,而不是仅仅使用。

hasPermission(message) {
  return new Promise((resolve, reject) => {
    roleList.find({
        Guild_id: message.guild.id
    }).then(perm => {
        console.log(perm[0].Roles);

        return resolve((message.member.roles.cache.some(role => perm[0].Roles.includes(role.name))));
    });
  });
};

这将返回一个承诺,该承诺将在resolve调用该函数时自行解决。现在您可以在调用它时简单地调用awaithasPermission函数,它应该返回您想要的内容。如果需要,这也允许您.then()hasPermission函数上使用。

于 2021-08-02T14:15:13.130 回答