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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:27:03