Discord.js v12使用discord-buttons时报结构扩展类继承错误如何解决
问题原因
这个错误属于Discord.js结构扩展冲突,触发原因有两个:
- 你使用的
discord-buttons是已停止维护的第三方包,仅适配discord.js v12、v13早期版本,如果你使用v13后期或v14版本的discord.js,官方已经原生支持按钮功能,版本不匹配会触发结构扩展冲突。 - 你重复初始化了
discord-buttons:错误栈显示你在index.js第35行已经执行了require('discord-buttons')(client),之后加载events/ready.js文件时,该文件第一行又再次引入并初始化了discord-buttons,两次调用扩展同一个TextChannel结构就会触发报错。
另外你提供的事件加载代码存在冗余逻辑,外层的forEach是多余的,会导致你重复加载N次事件文件(N为events目录下的文件总数),也可能加剧重复初始化的问题。
修复方案
推荐方案(适配高版本discord.js)
discord.js v13及以上版本已经原生支持按钮组件,不需要额外安装discord-buttons:
- 执行卸载命令:
npm uninstall discord-buttons - 删除所有
require('discord-buttons')(client)相关代码 - 原有按钮逻辑替换为discord.js官方的
ButtonBuilder等原生API即可 - 优化事件加载代码,删除多余的外层遍历:
const events = readdirSync("./events/").filter(file => file.endsWith(".js")); for (const file of events) { const pull = require(`./events/${file}`); if (pull.name) { client.events.set(pull.name, pull); } }
兼容方案(坚持使用旧版本discord.js和discord-buttons)
- 确认discord.js版本为v13.6以下的兼容版本
- 仅保留index.js第35行的
discord-buttons初始化代码,删除events/ready.js第一行重复引入初始化discord-buttons的代码 - 检查代码中是否有其他手动扩展TextChannel结构的逻辑,如有需要调整避免冲突
- 同上优化事件加载的冗余代码
内容的提问来源于stack exchange,提问作者8less
相关产品推荐
相关产品推荐

