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

Discord.js报错TypeError: channel.updateOverwrite is not a function问题问询

问题分析与修复方案
  • 问题1:频道对象获取逻辑错误

你当前的channel变量取值逻辑存在隐患:如果没有获取到提及的频道,会直接将args[0]的字符串(一般是用户输入的频道ID)赋值给channel,字符串类型没有updateOverwrite方法,直接调用就会触发类型错误。
修复方式为对args[0]传入的ID做频道实例查找:

// 替换原有的channel赋值行
let channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0])
  • 问题2:Discord.js 版本API不兼容

如果你使用的是Discord.js v14及以上版本,旧版的updateOverwrite方法已经被官方移除,替换为permissionOverwrites.edit方法。同时你不需要两次调用权限更新方法,传入服务器ID和传入@everyone角色的效果完全一致,重复调用属于冗余逻辑。
对应代码修改示例:

// 替换原有的两行updateOverwrite调用代码
await channel.permissionOverwrites.edit(message.guild.id, { SEND_MESSAGES: false }).catch(() => {})

完整修正后代码

module.exports =
{
    async execute(message, args)
    {
            let channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0])
            if(!channel) channel = message.channel

            if(channel.permissionsFor(message.guild.id).has('SEND_MESSAGES') === false) return message.channel.send(`${channel} is already locked.`)

            // v14+ 版本用这行
            await channel.permissionOverwrites.edit(message.guild.id, { SEND_MESSAGES: false }).catch(() => {})
            // v12/v13 版本保留原来的updateOverwrite写法即可,无需修改这部分
            // await channel.updateOverwrite(message.guild.id, { SEND_MESSAGES: false }).catch(() => {})
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:08