您好,我遇到了这个问题,我的个人资料没有更新,所以当我在不和谐中使用该功能时,它只是垃圾邮件,我尝试将任务标记为已修改,但这也不起作用,我可以尝试其他任何事情吗?它很好地找到了配置文件,并在我登录时进行了更改,但当需要更新时,它只是忘记了所有内容并且不更新
async function reward(userID, task, interaction) {
try {
let profile = await profileModel.findOne({ user: userID });
let profileTaskIndex = profile.tasks.findIndex((v) => v.name === task.name);
if (profileTaskIndex === -1) return;
profile.tasks.splice(profileTaskIndex, 1);
if (task.rewardType === "item") {
let found = items.find((v) => v.name === task.reward);
if (!found) return;
profile = await giveItem(userID, task.reward, profile);
} else if (task.rewardType === "coins") profile.coins += task.reward;
profile.markModified("tasks");
await profile.save();
} catch (error) {
console.log(error);
}
}
主要问题可能是您正在就地修改配置文件对象,而没有确保 Mongoose 完全跟踪其更改。 尝试下面的代码,让我知道它是否解决了您的疑问:
async function reward(userID, task, interaction) {
try {
let profile = await profileModel.findOne({ user: userID });
let profileTaskIndex = profile.tasks.findIndex((v) => v.name === task.name);
if (profileTaskIndex === -1) return; // Exit if task not found
profile.tasks.splice(profileTaskIndex, 1);
if (task.rewardType === "item") {
let found = items.find((v) => v.name === task.reward);
if (!found) return;
profile = await giveItem(userID, task.reward, profile);
} else if (task.rewardType === "coins") {
profile.coins += task.reward; // Add coins reward
}
profile.markModified("tasks");
await profile.save();
} catch (error) {
console.log(error);
}
}
我希望这能解决您的疑问。