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

discord.js开发工单机器人报错:channel.updateOverwrite is not a function

报错原因

你参考的教程基于discord.js v12版本编写,discord.js v13及以上版本已经移除channel.updateOverwrite方法,所以调用时会抛出方法不存在的错误。

修复方案

  1. 将代码中所有channel.updateOverwrite调用替换为channel.permissionOverwrites.edit,传参规则完全一致无需调整
  2. 修复代码中channel.setname的拼写错误,正确方法名为channel.setName
  3. 修复权限校验方法的版本兼容问题,v13及以上版本hasPermission已废弃,替换为permissions.has
  4. 如果你使用的是discord.js v14版本,还需要将所有权限标识从大写蛇形(如SEND_MESSAGE、VIEW_CHANNEL)改为大驼峰写法(SendMessages、ViewChannel),否则权限设置不会生效

修复后的完整代码

module.exports = {
    name: 'ticket',
    description: 'Open a ticket!',
    async execute(client, message, args, cmd, Discord) {
        // 创建工单频道
        let channel = await message.guild.channels.create(
            `ticket: ${message.author.tag}`,
            // v14版本请替换为 { type: Discord.ChannelType.GuildText }
            { type: 'text' }
        );
        await channel.setParent('912495738947260446');

        // 更新频道权限
        channel.permissionOverwrites.edit(message.guild.id, {
            // v14版本请替换为 SendMessages: false, ViewChannel: false
            SEND_MESSAGE: false,
            VIEW_CHANNEL: false
        });

        channel.permissionOverwrites.edit(message.author, {
            // v14版本请替换为 SendMessages: true, ViewChannel: true
            SEND_MESSAGE: true,
            VIEW_CHANNEL: true
        });

        const reactionMessage = await channel.send('感谢提交工单!工作人员会尽快与你联系,请在此说明提交工单的原因。');

        try {
            await reactionMessage.react("🔒");
            await reactionMessage.react("🗑️");
        } catch(err) {
            channel.send('表情添加失败!请告知开发者查看控制台报错!');
            throw err;
        }

        const collector = reactionMessage.createReactionCollector((reaction, user) => message.guild.members.cache.find((member) => member.id === user.id).permissions.has('ADMINISTRATOR'), {dispose: true});

        collector.on('collect', (reaction, user) => {
            switch (reaction.emoji.name) {
                case "🔒":
                    channel.permissionOverwrites.edit(message.author, { 
                        // v14版本请替换为 SendMessages: false, ViewChannel: false
                        SEND_MESSAGE: false, VIEW_CHANNEL: false
                    });
                    channel.setName(`🔒 ${channel.name}`)
                    break;
                case "🗑️":
                    channel.send('10秒后将删除该频道!');
                    setTimeout(() => channel.delete(), 10000);
                    break;
            }
        });
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:24:04