You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:05:29