【发布时间】:2021-09-23 13:32:03
【问题描述】:
我正在为我的 discord 机器人编写一个调平系统,但在途中遇到了一个 mongoerror,有谁知道为什么会发生这种情况? (每当有人聊天时,addXp 函数就会运行,该错误记录在 removeTimeout 函数中。)我在代码中以更多方式使用了猫鼬,但这之前还没有发生过,我也确实发现了其他人的这个错误的问题,但是没有找到合适的解决方案。
async function removeTimeout(leveldataid) {
console.log("removetimeout")
await mongo().then(async (mongoose) => {
try {
await levelSchema.findByIdAndUpdate(
leveldataid,
{
_id: leveldataid,
oncooldown: false
},
{upsert: true}
)
} catch(err) {
console.log(err)
} finally {
mongoose.connection.close()
}
})
}
async function addXP(member, guild) {
let data = undefined
let changedleveldata = false
await mongo().then(async (mongoose) => {
try {
data = await levelenabledSchema.findById(guild.id)
if (data) {
if (data.enabled == true) {
let extraxp = Math.floor(Math.random() *20) + 15
let leveldata = await levelSchema.findById(`guild${guild.id}member${member.id}`)
if (!leveldata) {
await levelSchema.findByIdAndUpdate(
`guild${guild.id}member${member.id}`,
{
_id: `guild${guild.id}member${member.id}`,
guild: guild.id,
level: 1,
maxXp: 113,
xp: extraxp,
oncooldown: true
},
{upsert: true}
)
} else {
if (leveldata.oncooldown == false) {
let newlevel = leveldata.level
let newMaxXp = leveldata.maxXp
newMaxXp = Math.floor(newMaxXp)
let xp = leveldata.xp
xp +=extraxp
if (xp > leveldata.maxXp) {
xp -=Math.floor(100*1.135**newlevel)
newlevel++
newMaxXp = 100*1.13**newlevel
}
await levelSchema.findByIdAndUpdate(
`guild${guild.id}member${member.id}`,
{
level: newlevel,
maxXp: newMaxXp,
xp: xp,
oncooldown: true
},
{upsert: true}
)
}
}
}
}
changedleveldata = true
} catch(err) {
console.log(err)
} finally {
mongoose.connection.close()
}
if (changedleveldata == true) {
setTimeout(remoteTimeout(`guild${guild.id}member${member.id}`), 60000)
}
})
}
【问题讨论】:
标签: javascript mongodb mongoose discord.js