Discord.js Akairo Bot报setInterval错误如何适配discord.js v13版本
解决方案
你遇到的this.client.setInterval is not a function报错,核心原因是旧版discord-akairo依赖discord.js v12提供的客户端内置定时器方法,而discord.js v13将这部分方法从Client实例上移除,同时废弃了部分旧配置项导致的,可通过以下两种方案解决:
方案1:临时兼容(无需更换Akairo版本)
直接在你的Client类构造函数中补充缺失的定时器方法,同时调整适配discord.js v13的配置项即可,修改后的完整代码如下:
require('dotenv').config(); const { AkairoClient, CommandHandler } = require('discord-akairo'); class MyClient extends AkairoClient { constructor() { super({ ownerID: '123992700587343872', // 替换为你自己的用户ID }, { // 替换旧的disableMentions配置,实现相同的禁用everyone提及效果 allowedMentions: { parse: ['users', 'roles'], repliedUser: true }, // 补充v13要求的必须intents,可根据业务需求新增 intents: [ 'GUILDS', // v13强制要求的基础Intent 'GUILD_MESSAGES', 'MESSAGE_CONTENT' // 如需读取消息内容触发前缀命令必须添加 ] }); // 手动补充akairo需要的内置定时器方法 this.setInterval = setInterval.bind(global); this.clearInterval = clearInterval.bind(global); this.setTimeout = setTimeout.bind(global); this.clearTimeout = clearTimeout.bind(global); this.commandHandler = new CommandHandler(this, { directory: './commands/', prefix: '<3', }); this.commandHandler.loadAll(); } } const client = new MyClient(); client.login(process.env.TOKEN);
注意事项
- 必须在Discord开发者后台的机器人设置页面开启
Message Content Intent权限,否则无法读取消息内容触发前缀命令 - 该方案仅为临时兼容,后续如果遇到其他API不兼容问题,建议切换到适配discord.js v13的Akairo维护版本
方案2:使用适配v13的Akairo维护版本
卸载原有旧版discord-akairo,安装社区维护的适配v13的版本,无需手动补充定时器方法,仅需按方案1调整intents和allowedMentions配置即可正常运行,安装命令:npm uninstall discord-akairo && npm install @notenoughupdates/discord-akairo
该维护版和官方原版API完全一致,不会影响原有业务逻辑的编写。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

