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

为何在guildMemberUpdate事件中无法获取角色增减操作用户的昵称?

问题原因及修复方案

你代码里存在3个核心问题导致无法正常获取对应数据:

  • 变量未定义错误:审计日志条目变量命名为memberLog,后续判断逻辑中错误使用了未声明的entry变量,会直接抛出异常中断逻辑执行
  • 逻辑嵌套错误:角色移除的判断分支被放在了角色新增的判断分支内部,只有给用户新增角色时才会触发移除逻辑的判断,移除角色的场景永远无法命中对应逻辑
  • 无法获取操作用户昵称的核心原因:审计日志返回的executor是Discord User类的实例,仅存储用户全局账号信息,没有当前服务器内的昵称数据,需要手动拉取该用户在当前服务器的成员实例才能获取昵称

修复后代码

module.exports = {
    name: 'guildMemberUpdate',
    once: false,
    async execute(oldMember, newMember) {
        try {
            const fetchedLogs = await newMember.guild.fetchAuditLogs({
                limit: 1,
                type: 'MEMBER_UPDATE',
            });
            const memberLog = fetchedLogs.entries.first();
            if (!memberLog) return console.log(`${newMember.displayName} 自行更新了个人信息`);
            const { executor, target } = memberLog;

            // 校验审计日志目标是否为当前更新的成员
            if (target.id !== newMember.user.id) return;

            // 拉取操作用户在当前服务器的成员实例,获取昵称,降级逻辑处理取不到的情况
            const operatorMember = await newMember.guild.members.fetch(executor.id);
            const operatorNickname = operatorMember?.displayName || executor.tag;

            const changedRole = newMember.roles.cache.difference(oldMember.roles.cache).first();
            if (!changedRole) return;

            const logTime = new Date().toLocaleString('ru-RU', { timeZone: 'Europe/Moscow', hour12: false });
            
            // 角色新增逻辑
            if (oldMember.roles.cache.size < newMember.roles.cache.size) {
                console.log(`${logTime} 角色: ${changedRole.name} 授予人 - ${operatorNickname} 目标用户 - ${newMember.displayName} - <@${newMember.user.id}>`)
            }

            // 角色移除逻辑
            if (oldMember.roles.cache.size > newMember.roles.cache.size) {
                console.log(`${logTime} 角色: ${changedRole.name} 移除人 - ${operatorNickname} 目标用户 - ${newMember.displayName} - <@${newMember.user.id}>`)
            }

        } catch (err) {
            return console.log(`Error: ${err.stack}`)
        }
    }
};

额外注意事项

请确保你的机器人已经被授予查看审计日志权限,否则会拉取不到审计日志数据。

内容的提问来源于stack exchange,提问作者Svetlov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:06:03