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

Discord.js v14清除命令报错:TypeError: Cannot read properties of undefined (reading 'has')

解决Discord.js v14 Clear命令的TypeError错误

你遇到的TypeError: Cannot read properties of undefined (reading 'has')错误,由以下几个问题导致:

错误原因

  1. 缺少必要导入:代码未导入PermissionsBitField,导致该变量未定义
  2. 权限对象获取错误:interaction.user.id是字符串类型的用户ID,不存在permissions属性,应通过interaction.member获取服务器成员对象后再访问权限
  3. 逻辑不完整:权限检查后未终止函数执行,且未处理机器人自身权限及消息删除的核心逻辑

修复后的完整代码

const { SlashCommandBuilder, EmbedBuilder, PermissionsBitField } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('clear')
        .setDescription("删除消息")
        .addIntegerOption(option => 
            option.setName('messages')
                .setDescription('要删除的消息数量')
                .setRequired(true)
                .setMinValue(1)
                .setMaxValue(100)),
    async execute(interaction) {
        const deleteCount = interaction.options.getInteger('messages');
        
        // 检查用户权限
        if (!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({ 
                content: "你没有管理消息的权限!", 
                ephemeral: true 
            });
        }

        // 检查机器人权限
        if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
            return interaction.reply({ 
                content: "我没有管理消息的权限,请先赋予我该权限!", 
                ephemeral: true 
            });
        }

        try {
            // 批量删除消息
            const deletedMessages = await interaction.channel.bulkDelete(deleteCount, true);
            await interaction.reply({
                content: `成功删除了 ${deletedMessages.size} 条消息`,
                ephemeral: true
            });
        } catch (error) {
            console.error(error);
            await interaction.reply({
                content: "删除消息失败,请检查消息是否超过14天(Discord无法删除超过14天的消息)",
                ephemeral: true
            });
        }
    }
}

关键修复点说明

  • 新增PermissionsBitField导入,确保权限常量可用
  • 将interaction.user.id.permissions替换为interaction.member.permissions,正确获取服务器成员的权限对象
  • 添加机器人自身权限检查,避免因权限不足导致操作失败
  • 限制输入范围为1-100,符合Discord批量删除的规则
  • 加入错误捕获,处理无法删除超14天消息的情况
  • 每个回复后添加return,终止函数执行,避免后续逻辑冲突

内容的提问来源于stack exchange,提问作者I'm una cosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:55:28