如何在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
相关产品推荐
相关产品推荐

