我正在尝试使用一个命令来制作一个 Discord 机器人,该命令/moderator
使用一个子命令调用/moderator add
,将用户的 ID 添加到主持人数据库(MongoDB/Mongoose),然后在有人想要运行主持人命令时检查该数据库。
我正在使用 mongoose 作为模板模式。
这是我的完整代码:
if (!ModeratorSchema.find({ user_id: target.id })) {
ModeratorSchema.create({
username: target.username,
user_id: target.id,
type: interaction.options.getInteger("type")
})
interaction.reply({
content: `Added \`${target} (${target.id})\` as a system moderator with permission level ${interaction.options.getInteger("type")}`,
ephemeral: true
});
client.channels.cache.get(log_channel).send({
content: `\`${target} (${target.id})\` was added as a system moderator by \`${interaction.user.username} (${interaction.user.id})\` with permission level \`${interaction.options.getInteger("type")}\`.`
})
} else {
interaction.reply({
content: "User is already a system moderator.",
ephemeral: true
});
}
这是我用来查看模式是否正常工作的检查,运行后,根本没有任何输出。
ModeratorSchema.find({ user_id: target.id }), function (err, data) {
if (data) {
info("OK");
} else if (err) {
info("Error")
error(err)
} else {
info("No data")
}
}
任何帮助都将不胜感激!提前致谢。
在添加新记录之前,我想检查用户是否已经在数据库中。
我这样做是为了使代码确实将版主(用户名、用户 ID、类型)添加到数据库中,但我似乎无法使验证检查正常工作以确保人们不会多次添加用户 ID。我使用 mongoose 作为架构,并使 user_id 唯一,因此虽然系统不会多次添加用户文档,但 Discord 输出仍然不起作用。
就像评论中提到的那样,您在使用函数时遇到了一些问题。因此,应检查并更改以下内容:
find()
函数返回一个承诺,您可能需要阅读有关.find() 的更多信息。因此,您的模式返回一个承诺,因此您应该使用async
andawait
或then
andcatch
。其次,您不需要使用
.find()
实际返回数组的函数,而是需要使用也可以在.findOne().findOne()
中找到的函数。当您使用 时
target.id
,您可以使用.findOne()
来检查文档是否存在。如果存在,则显示如果不存在,您可以使用
.create()
来创建一个新文档。您还可以尝试使用
try/catch
,以使您的代码更好。