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

Discord.js v13斜杠命令mute功能报TypeError无法读取undefined的cache属性如何解决

报错原因

你遇到的TypeError: Cannot read properties of undefined (reading 'cache')错误由两个代码问题共同导致:

  1. 你使用interaction.options.getUser("miembro")获取到的是全局User类型对象,该对象仅存储用户的通用公开信息,没有服务器角色相关的roles属性,访问target.roles直接返回undefined,读取cache属性就会抛出报错。
  2. 就算你获取到正确的服务器成员对象,调用roles.cache.add也是错误用法:cache是角色数据的只读缓存集合,添加角色的方法直接挂载在roles管理器上,不需要经过cache。
修复方案

核心修改点

  1. 将目标用户的获取方式改为获取服务器成员对象:
    const target = interaction.options.getMember("miembro");
  2. 替换添加角色的写法:
    await target.roles.add("902652079762468975");
  3. 补充斜杠命令的预响应处理,避免3秒超时导致的交互失效,在逻辑执行前先调用await interaction.deferReply()。

额外补充的必要校验

为了避免后续出现权限类运行错误,建议增加如下校验逻辑:

  • 校验命令发起者是否拥有「管理成员」权限,普通用户不能调用静音命令
  • 校验Bot自身是否拥有「管理角色」权限,没有权限无法给用户加角色
  • 校验目标用户的角色等级低于发起者和Bot,避免无法操作管理员/高阶角色用户
  • 确认静音角色的位置在Bot的角色等级下方,Discord不允许给用户添加比自身等级更高的角色
完整修复后代码
const { SlashCommandBuilder } = require("@discordjs/builders")
const { MessageEmbed, Permissions } = require("discord.js")

module.exports = {
    data: new SlashCommandBuilder()
    .setName("mute")
    .setDescription("静音指定服务器用户")
    .addUserOption(option => 
        option
        .setName("miembro") // 目标用户
        .setDescription("选择你要静音的服务器成员")
        .setRequired(true)
    )
    .addStringOption(option => 
        option
        .setName("razon") // 静音原因
        .setDescription("填写静音该用户的原因")
        .setRequired(true)
    ),

    async run(client, interaction){
        // 预响应避免交互超时
        await interaction.deferReply();
        const target = interaction.options.getMember("miembro");
        const reason = interaction.options.getString("razon");
        const muteRoleId = '902652079762468975';

        // 校验发起者权限
        if(!interaction.member.permissions.has(Permissions.FLAGS.MODERATE_MEMBERS)) {
            return interaction.followUp({ embeds: [new MessageEmbed().setColor("RED").setDescription("你没有管理成员的权限,无法使用静音命令")]})
        }
        // 校验Bot权限
        if(!interaction.guild.me.permissions.has(Permissions.FLAGS.MANAGE_ROLES)) {
            return interaction.followUp({ embeds: [new MessageEmbed().setColor("RED").setDescription("Bot没有管理角色的权限,无法执行静音操作")]})
        }
        // 校验静音角色是否存在
        const muteRole = interaction.guild.roles.cache.get(muteRoleId);
        if(!muteRole) {
            return interaction.followUp({ embeds: [new MessageEmbed().setColor("RED").setDescription("服务器未配置静音角色")]})
        }
        // 校验目标用户可操作
        if(target.permissions.has(Permissions.FLAGS.ADMINISTRATOR) || target.roles.highest.position >= interaction.member.roles.highest.position) {
            return interaction.followUp({ embeds: [new MessageEmbed().setColor("RED").setDescription("你无法静音权限高于或等于你的用户")]})
        }
        if(target.roles.highest.position >= interaction.guild.me.roles.highest.position) {
            return interaction.followUp({ embeds: [new MessageEmbed().setColor("RED").setDescription("Bot无法静音权限高于自身的用户")]})
        }

        // 执行静音
        await target.roles.add(muteRoleId, reason);
        interaction.followUp({ embeds: [new MessageEmbed().setColor("GREEN").setDescription(`✅ ${target} 已被静音,原因:${reason}`)]})
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:39:02