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