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

如何解决Discord机器人在成员角色变动时误报昵称更新的问题

问题原因及修复方案

问题根因

  • 代码存在拼写错误:oldMember.nickame 少写了1个字母n,正确属性名为nickname。该错误会导致旧昵称永远返回undefined,只要成员的任何属性变动触发了guildMemberUpdate事件(包括角色变更、头像变更、超时状态变更等),判断逻辑都会误认为昵称发生了修改,进而触发推送。
  • 空值处理逻辑不够严谨:直接用String()转换null值会得到字符串"null",如果有成员的昵称就是字面量的"null",会出现判断误差。

修复后代码

// 统一处理昵称获取逻辑,null代表未设置自定义昵称
function getMemberNick(member) {
  return member.nickname ?? null;
}

const oldNick = getMemberNick(oldMember);
const newNick = getMemberNick(newMember);

// 仅当昵称真实发生变更时才推送日志
if (oldNick !== newNick) {
  gwebhook.send({
    embeds: [new Discord.MessageEmbed()
      .setAuthor(newMember.guild.name, newMember.guild.iconURL({dynamic: true}))
      .setTitle('Member Nickname Update')
      .setColor("YELLOW")
      .addField('Before', oldNick ?? "无自定义昵称", true)
      .addField('After', newNick ?? "无自定义昵称", true)]
  });
}

补充说明

如果你使用的是Discord.js v14及以上版本,需要将Discord.MessageEmbed替换为Discord.EmbedBuilder,对应构造方法写法同步调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:04