Discord.js v14清除命令报错:TypeError: Cannot read properties of undefined (reading 'has')
解决Discord.js v14 Clear命令的TypeError错误
你遇到的TypeError: Cannot read properties of undefined (reading 'has')错误,由以下几个问题导致:
错误原因
- 缺少必要导入:代码未导入
PermissionsBitField,导致该变量未定义 - 权限对象获取错误:
interaction.user.id是字符串类型的用户ID,不存在permissions属性,应通过interaction.member获取服务器成员对象后再访问权限 - 逻辑不完整:权限检查后未终止函数执行,且未处理机器人自身权限及消息删除的核心逻辑
修复后的完整代码
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
相关产品推荐
相关产品推荐

