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
相关产品推荐
相关产品推荐

