Discord.js v13+Mongoose:成员离服时删除数据失败求助
解决Discord.js中guildMemberRemove事件删除MongoDB数据失败的问题
你的代码无法正常运行的核心问题是事件回调参数错误,以下是具体修复方案和调试建议:
1. 修正事件回调参数
guildMemberRemove事件的第二个参数是离开服务器的成员对象(member),而非message。原代码中未正确定义member变量,会直接导致报错,数据库操作根本无法执行。
修正后的基础代码:
const Event = require("../Structures/Event.js"); const Discord = require("discord.js"); const ProfileModels = require('../Models/profileSchema.js') module.exports = new Event("guildMemberRemove", async (client, member) => { await ProfileModels.findOneAndDelete({ userID: member.id, serverID: member.guild.id }); });
2. 添加错误捕获与日志排查
为了确认数据库操作状态、快速定位问题,建议加上try/catch块和日志输出:
const Event = require("../Structures/Event.js"); const Discord = require("discord.js"); const ProfileModels = require('../Models/profileSchema.js') module.exports = new Event("guildMemberRemove", async (client, member) => { try { const deletedDoc = await ProfileModels.findOneAndDelete({ userID: member.id, serverID: member.guild.id }); if (deletedDoc) { console.log(`成功删除用户 ${member.tag}(${member.id}) 在服务器 ${member.guild.name} 的数据`); } else { console.log(`未找到用户 ${member.tag}(${member.id}) 在服务器 ${member.guild.name} 的对应数据`); } } catch (error) { console.error("删除用户数据时发生错误:", error); } });
3. 额外检查项
- 开启成员意图:在Discord开发者门户的机器人设置中,必须开启
Server Members Intent,否则机器人无法接收guildMemberRemove这类成员相关事件。 - 验证数据库模型:确认
profileSchema.js中的字段名与查询时使用的userID、serverID完全一致,避免因字段名不匹配导致找不到数据。
内容的提问来源于stack exchange,提问作者Tohru
相关产品推荐
相关产品推荐

