discord.js中如何向事件文件传递guild变量并解决guild undefined报错
问题原因
- 你在index.js中注册事件回调时硬编码了参数顺序
(message, guild, ...args),但Discord.js不同事件触发时传递的参数完全不同:guildCreate事件触发时只会传递1个参数:刚加入的服务器对象guild,没有message参数。所以此时你代码中回调的第一个变量message实际拿到了guild对象,第二个变量guild自然是undefined。 - 你没有把
client对象传递给事件的execute方法,而事件文件中execute的第一个参数要求是client,参数顺序完全错位,进一步导致变量取值错误。
修复方法
1. 修改index.js中的事件注册逻辑
删除硬编码的参数,直接透传所有事件参数,同时主动传入client对象:
const eventFiles = fs.readdirSync('./events').filter(file => file.endsWith('.js')); for (const file of eventFiles) { const event = require(`./events/${file}`); if (event.once) { client.once(event.name, (...args) => event.execute(client, ...args)); } else { client.on(event.name, (...args) => event.execute(client, ...args)); } }
这种写法适配所有类型的事件,不需要为不同事件单独调整参数顺序。
2. 事件文件无需修改
你现有的guildCreate事件文件的execute参数(client, guild)顺序是正确的,修改index.js后即可正常获取到guild对象。
内容的提问来源于stack exchange,提问作者johng3587
相关产品推荐
相关产品推荐

