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

Discord.js@13事件处理器保留...args时传递client的实现问题

解决方案

你只需要在调用事件的execute方法时,把client作为第一个参数传入,再展开...args即可,完全不需要移除现有的参数展开逻辑。

第一步:修改事件处理器代码

把循环里的两处event.execute调用调整为传入client:

const client = new Client({ intents: [Intents.FLAGS.GUILDS] });

const eventFiles = fs.readdirSync('./events').filter(file => file.endsWith('.js'));
for (const file of eventFiles) {
    const event = require(`./events/${file}`);
    if (event.once) {
        // 新增client作为第一个入参传递
        client.once(event.name, (...args) => event.execute(client, ...args));
    } else {
        // 新增client作为第一个入参传递
        client.on(event.name, (...args) => event.execute(client, ...args));
    }
}

第二步:事件模块无需额外调整

你当前写的事件模块参数写法已经符合要求,client会作为第一个参数被传入,后面跟着事件本身的所有原生参数:

module.exports = {
    name: 'interactionCreate',
    async execute(client,interaction) {
       // 这里直接使用client即可
       console.log(client.user.tag);
    },
};

补充说明

  • 这种写法完全保留了所有事件的原生参数,不管是messageCreate的message参数,还是guildMemberAdd的member参数,都会在client之后按原有顺序传递,不需要单独适配每个事件。
  • 如果后续你需要给所有事件传递额外的公共参数,也可以用同样的方式放在client和...args之间即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:18:01