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
相关产品推荐
相关产品推荐

