调用setNickname遇TypeError:Cannot read properties of undefined求助
问题原因
你遇到的错误是因为client.users.cache.get()获取到的是User对象,而setNickname()是Discord.js中GuildMember(服务器成员)专属的方法,User对象并没有这个方法,所以调用时会提示“无法读取undefined的setNickname属性”。
解决方案
要修改用户的服务器昵称,必须先获取对应服务器的GuildMember对象,而不是User对象。具体步骤如下:
- 先确定目标用户所在的服务器ID,通过服务器ID获取Guild实例
- 再从该Guild中获取目标用户的GuildMember对象
- 调用
setNickname()方法修改昵称
示例代码:
// 替换为目标服务器的ID const guildId = "你的服务器ID"; const targetUserId = "930654978777948160"; // 方式1:从缓存获取(如果成员已被缓存) const guild = client.guilds.cache.get(guildId); const memberTarget = guild?.members.cache.get(targetUserId); // 方式2:如果缓存中没有,使用fetch(需要异步) // const guild = await client.guilds.fetch(guildId); // const memberTarget = await guild.members.fetch(targetUserId); if (memberTarget) { try { await memberTarget.setNickname("nickname"); console.log("昵称修改成功"); } catch (err) { console.error("修改昵称失败:", err); } } else { console.log("未找到目标成员,或机器人不在该服务器中"); }
注意事项
- 确保机器人已经加入目标服务器,并且拥有
MANAGE_NICKNAMES权限 - 如果使用
fetch方法,需要将代码放在异步函数中,因为fetch是异步操作,需要用await等待结果
内容的提问来源于stack exchange,提问作者Nathan Witten
相关产品推荐
相关产品推荐

