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

Discord机器人/remove命令报错:Cannot read properties of undefined (reading 'edit')

解决Discord.js中/remove命令权限修改报错及逻辑问题

问题根源分析

  1. 频道对象获取错误:你把interaction.channel.id赋值给了channel,这只是字符串形式的频道ID,不是频道对象,自然没有permissionOverwrites.edit方法——这就是报错TypeError: Cannot read properties of undefined (reading 'edit')的直接原因。
  2. 用户参数类型错误:用addStringOption接收@用户是不合理的,Discord.js提供了专门的addUserOption来处理用户提及,用字符串选项拿到的是纯文本(可能是ID或@格式文本),无法直接调用user.id。
  3. 权限逻辑反向:你设置ViewChannel: true是给用户添加查看权限,要移除权限应该设为false。
  4. 冗余的Guild获取:interaction本身包含当前服务器的guild属性,不需要再通过client.guilds.cache.get重复获取。

修正后的代码

module.exports = {
    data: new SlashCommandBuilder()
        .setName('remove')
        .setDescription('移除用户查看当前工单频道的权限')
        .addUserOption(option => 
            option
                .setName("user")
                .setDescription("请提及要移除权限的用户")
                .setRequired(true)
        ),    
    async execute(interaction, client) {
        // 直接获取当前频道对象(而非ID)
        const channel = interaction.channel;
        // 通过UserOption获取完整用户对象
        const user = interaction.options.getUser('user');

        try {
            // 修改权限覆盖,移除用户的频道查看权限
            await channel.permissionOverwrites.edit(user.id, { 
                ViewChannel: false 
            });
            await interaction.reply(`已成功移除用户 ${user.tag} 的频道查看权限`);
        } catch (error) {
            console.error('修改权限时出错:', error);
            await interaction.reply({ content: '修改权限失败,请检查机器人是否拥有「管理频道」权限', ephemeral: true });
        }
    },
};

额外注意事项

  • 确保机器人拥有管理频道的服务器权限,否则无法修改频道权限覆盖规则。
  • 可以给命令添加权限校验,只允许管理员使用:在data部分添加.setDefaultMemberPermissions(PermissionFlagsBits.ManageChannels)(需提前引入PermissionFlagsBits)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:01:44