Discord.js开发giveaway抽奖命令报start属性未定义错误如何解决
错误原因
你调用命令execute方法时的参数传递顺序和命令文件定义的接收顺序不匹配,导致命令内拿到的client为无效值,自然找不到giveaways属性,触发Cannot read property 'start' of undefined报错。
具体参数匹配差异:
- 命令文件中
execute定义的接收顺序:(message, args, client) - 命令执行逻辑中传递的参数顺序:
(message, args, cmd, client, Discord)
第三个位置你传递的是cmd变量,因此命令里拿到的所谓client实际是cmd,不存在giveaways属性。
修复方案
二选一即可:
方案1:调整命令执行的传参顺序
修改命令执行逻辑的传参,和定义的顺序对齐:
try{ command.execute(message, args, client, cmd, Discord); } catch (err){ message.reply("执行该命令时出现错误!"); console.log(err); }
方案2:调整命令的参数接收顺序
如果其他命令已经沿用了现有传参规则,直接修改giveaway命令的参数接收位置即可:
execute : async(message, args, cmd, client) => { // 命令内部逻辑无需改动 }
额外检查项
避免后续触发其他报错:
- 确保
index.js中GiveawaysManager的初始化代码写在命令加载、消息事件监听之前,保证触发命令时client.giveaways已经完成赋值 - 中奖人数参数需要转成数字类型,现在直接传递的是字符串
args[2],会导致逻辑异常,修改为:const winners = parseInt(args[2]) if(isNaN(winners) || winners < 1) return message.channel.send('请输入有效的中奖人数') - 确认你已经正确安装
discord-giveaways依赖,版本和教程使用的版本一致,避免API不兼容
内容的提问来源于stack exchange,提问作者Falcone
相关产品推荐
相关产品推荐

