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

DISCORD.JS V13 校验成员权限报TypeError: Cannot read property 'has' of undefined 求助

问题排查与修复方案

报错触发原因

  • 核心错误是你调用permissions.has()的对象类型不符合要求:你通过message.mentions.users.first()获取的是Discord的User(全局用户)对象,该对象仅存储用户全局公共属性(如用户名、头像、用户标签),不存在服务器权限相关的permissions属性,因此读取permissions会返回undefined,调用has方法时自然抛出类型错误。
  • 权限属性是GuildMember(服务器成员)对象独有的,只有归属对应服务器的成员实例才会携带权限字段。

修复方案

  1. 将获取提及对象的API从message.mentions.users.first()改为message.mentions.members.first(),直接获取服务器成员对象
  2. 增加边界判断,避免用户未@任何人时出现新的报错
  3. 修正reply方法的content参数格式,该参数接收字符串而非数组

修复后的完整代码如下:

const { Client, Message } = require("discord.js");

module.exports = {
    name: "user",
    description: "comando a risposta",
    aliases: ["boop", "test"],
    /** 
     * @param {Client} client 
     * @param {Message} message 
     * @param {String[]} args 
     */
    run: async (client, message, args) => {
        // 改为获取服务器成员对象,而非全局用户对象
        const member = message.mentions.members.first();
        // 边界判断:未@任何成员时直接返回提示
        if(!member) return message.reply({content: "请先@一位服务器成员"});
        if(member.permissions.has("ADMINISTRATOR")) return message.reply({content: "he has the admin"});
        message.reply(`${member.user.tag}`)
    }
}

补充注意事项

  • 确保机器人已经开启了Guilds、GuildMembers相关的网关意图,否则可能无法正常获取成员对象
  • 如果你使用的是discord.js v14及以上版本,权限枚举值需要改为PermissionFlagsBits.Administrator,注意提前导入对应的枚举类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:24:08