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

如何在Discord.js中监听用户昵称变更事件?

解决Discord.js中检测用户昵称变更的问题

你的代码没触发GuildMemberUpdate事件,核心原因是没开启Guild Members权限意图,这个事件需要机器人拥有该意图才能正常接收。

步骤1:开启开发者平台的权限意图

去Discord开发者后台,找到你的机器人应用:

  • 进入「Bot」页面
  • 拉到「Privileged Gateway Intents」区域
  • 开启「Server Members Intent」(也就是Guild Members权限)

步骤2:初始化客户端时声明意图

在你创建Discord客户端的代码里,必须显式添加GuildMembers意图,否则机器人还是收不到事件:

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
    intents: [
        GatewayIntentBits.Guilds, // 基础服务器意图,必须添加
        GatewayIntentBits.GuildMembers // 新增这个意图才能监听成员变更
    ]
});

步骤3:优化事件监听代码

原代码会在成员任何信息变更(比如角色、头像)时都触发,建议加个判断,只在昵称真的变化时执行逻辑,同时处理用户无昵称的情况(此时nickname为null,用用户名兜底):

const { Events } = require('discord.js');

module.exports = {
    name: Events.GuildMemberUpdate,
    async execute(oldMember, newMember) {
        // 处理无昵称的情况,用用户名替代
        const oldNick = oldMember.nickname || oldMember.user.username;
        const newNick = newMember.nickname || newMember.user.username;
        
        // 只有昵称确实变更时才输出
        if (oldNick !== newNick) {
            console.log(`用户昵称变更:${oldNick} → ${newNick}`);
        }
    },
};

做完这些,重启机器人就能正常检测到用户昵称的变更了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:42:09