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

使用discord.js v13与Node.js 16时检查服务器所有者权限报错:TypeError: Cannot read properties of undefined (reading 'has')

解决Discord.js v13中检查服务器所有者时的TypeError问题

嘿,我来帮你搞定这个报错!你遇到的TypeError: Cannot read properties of undefined (reading 'has')主要有两个原因,咱们一步步拆解:

错误根源

  1. 对象类型用错了:你通过message.mentions.users.first()拿到的是User对象,但User并没有permissions属性——只有GuildMember(服务器成员)对象才包含服务器内的权限、角色这类专属信息。
  2. 没处理无提及的情况:如果用户没@任何人,member会变成undefined,这时候去访问member.permissions自然会触发报错。

另外,你想判断对方是不是服务器所有者,靠检查MANAGE_GUILD权限并不准确——因为其他管理员也可能拥有这个权限,但他们不是所有者。直接对比成员ID和服务器所有者ID才是最靠谱的方式。

修正后的代码

// 获取提及的服务器成员(GuildMember),而非User对象
const member = message.mentions.members.first();
const reason = args.slice(1).join(' ') || 'No reason specified.';

// 先检查是否有提及目标成员
if (!member) {
  return message.reply('你需要提及一个成员才能执行这个操作哦!');
}

// 直接对比成员ID与服务器所有者ID(Discord.js v13的写法)
if (member.id === message.guild.ownerId) {
  return message.reply('我不能对服务器所有者进行 moderation 操作。');
}

关键说明

  • 使用message.mentions.members.first()获取GuildMember实例,它包含了成员在当前服务器的所有相关数据,包括权限信息。
  • 先判断member是否存在,避免因未提及成员导致的undefined报错。
  • message.guild.ownerId是Discord.js v13中获取服务器所有者ID的属性,直接对比ID是判断所有者最准确的方法,比权限检查更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:22:50