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

Discord.js 使用高级事件处理器时如何为Bot设置自定义状态?

错误原因
  • 你当前的事件绑定语法存在错误:client.on()方法的第三个参数是事件监听的可选配置项,你把状态设置回调放在这个位置不会被执行,对应的代码从未运行
  • 状态设置调用时机错误:client.user.setActivity()必须等Bot完全登录完成、ready事件触发后才能调用,此时client.user才会完成初始化,提前调用会抛出未定义报错
修改方案

1. 修正事件加载器代码

删除加载器里错误插入的状态设置回调,修正后代码如下:

const fs = require('fs');

module.exports = (client, Discord) => {
    const load_dir = (dirs) => {
        const eventFiles = fs.readdirSync(`./Natsuki Events/${dirs}`).filter(file => file.endsWith('.js'));

        for (const file of eventFiles) {
            const event = require(`../Natsuki Events/${dirs}/${file}`);
            const eventName = file.split('.')[0];
            // 移除第三个无效的回调参数
            client.on(eventName, event.bind(null, Discord, client))
        }
    }

    ['Client', 'Guild'].forEach(e => load_dir(e));
}

2. 修改ready事件文件添加状态设置

你之前的ready事件处理函数没有接收加载器传入的Discord和client参数,导致无法拿到client实例设置状态,修改后代码如下:

module.exports = (Discord, client) => {
    console.log('Natsuki is online!');
    // 状态设置放在ready事件中,保证client.user已初始化
    client.user.setActivity("a game with That Penguin Guy", { type: 'PLAYING' });
}

状态设置逻辑本身没有问题,放在ready事件文件中是最合适的方案,能保证调用时客户端已准备就绪。

内容的提问来源于stack exchange,提问作者Pepega Pingu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:39:04