首页 > 解决方案 > Discord.js 错误“TypeError:channel.updateOverwrite 不是函数”

问题描述

当我尝试更改频道权限以锁定用户发送消息时,无论我做什么都会弹出此错误。

TypeError:channel.updateOverwrite 不是函数

有什么问题吗?

module.exports =
{
    async execute(message, args)
    {
            const role = message.guild.roles.cache.find(r => r.name === '@everyone')

            let channel = message.mentions.channels.first() || 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.`)

            await channel.updateOverwrite(message.guild.id, { SEND_MESSAGES: false }).catch(() => {}) // Line in which the error happens
            await channel.updateOverwrite(role, { SEND_MESSAGES: false} ).catch(() => {})
    }
}

标签: javascriptnode.jsdiscorddiscord.js

解决方案


看来您正在使用 discord.js v13,但使用了一些旧代码。在 v13 中,该channel#updateOverwrite()方法被删除,而在以前的版本channel#permissionOverwrites中是覆盖的集合,而在 v13 中,它是一个PermissionOverwriteManager. 这意味着,您应该使用它的.edit()方法来更新覆盖:

await channel
  .permissionOverwrites.edit(message.guild.id, { SEND_MESSAGES: false })
await channel
  .permissionOverwrites.edit(role, { SEND_MESSAGES: false })

推荐阅读