【问题标题】:Discord.js Commando need to havehasPermisison() needs to make it async or wait for database queryDiscord.js Commando 需要有hasPermisison() 需要使其异步或等待数据库查询
【发布时间】:2021-10-06 20:56:14
【问题描述】:

所以我正在使用 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()没有运行。

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

【问题讨论】:

    标签: javascript node.js mongodb discord.js commando


    【解决方案1】:

    您绝对是在正确的轨道上!不要只使用then,而是尝试返回一个promise。

    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 函数时自行解决。现在你可以在调用它时简单地 await hasPermission 函数,它应该返回你想要的。如果需要,这还允许您在 hasPermission 函数上使用 .then()

    【讨论】:

    • 因此,在这种特殊情况下,虽然返回一个对我有用的承诺,但问题是,hasPermission HAS 要同步运行。我没有在 hasPermission 函数中检查数据库,而是将数据库的结果缓存在 hasPermission 有权访问的客户端对象中,并将缓存的内容与消息中传递的内容进行比较。
    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    相关资源
    最近更新 更多