Discord.js下拉菜单持续运行失败,报client未定义错误如何解决?
核心错误原因
控制台抛出的ReferenceError: client is not defined是问题根源:rr1.js命令文件中直接使用client对象监听clickMenu事件,但该文件既没有引入client实例,也没有从外部接收该参数。该报错抛出后没有被catch捕获,所以同步触发了未处理Promise拒绝的警告,修复client未定义的问题后相关警告也会同步消失。
分步修复方案
1. 修改main.js的命令调用逻辑
给execute方法新增第三个参数传入client实例,修改后代码如下:
client.on('message', async (message, guild) => { if (!message.content.startsWith(prefix) || message.author.bot) return; const args = message.content.slice(prefix.length).split(/ +/); const command = args.shift().toLowerCase(); switch (message.content) { case (prefix + "rr1"): client.commands.get("rr1").execute(message, args, client); break; } });
2. 修改rr1.js的execute函数入参
接收从main.js传递过来的client实例,调整后的代码片段如下:
module.exports = { name: 'rr1', description: 'send embedded level message', async execute(message, args, client) { // 此处保留你原来的所有业务代码即可 } }
额外优化建议
当前写法每次执行rr1命令都会全局注册一个新的clickMenu事件监听器,多次执行后会出现重复触发、内存泄漏的问题。推荐改用discord-buttons提供的消息组件收集器来处理单次菜单交互,避免全局重复注册事件。
内容的提问来源于stack exchange,提问作者Nevyllo Kalangi
相关产品推荐
相关产品推荐

