Discord.js Commando 需要 havehasPermisison() 需要使其异步或等待数据库查询

Discord.js Commando need to havehasPermisison() needs to make it async or wait for database query

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

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

突击队框架有一个函数叫做

hasPermission(message) {
   ...
}

这需要一个值为 return true 或 false 的值,如果为 true,命令 运行s,如果 false 命令不 运行 并在 discord 中吐出错误。

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

这是代码

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)))
}

现在,将其设为异步只会破坏其功能,并且始终 return 为真。

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

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
   })
}

这个 return 在 .then() 中为真,但它没有通过并且 return 为假(这是默认值)

数据库调用正常工作,比较 return 在应该的时候为真,在应该的时候为假,只是函数 hasPermission() 没有 运行。

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

您绝对是在正确的轨道上!不要仅仅使用 then,而是尝试 return 承诺。

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))));
    });
  });
};

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