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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:12:02