Discord机器人cookie命令Math.random固定输出、多分支执行异常如何解决?
问题原因
- 你把
random随机数变量定义在了execute函数外部:Node.js 启动机器人时会先执行一次全局/模块级别的代码,此时随机数只会生成1次,之后每次调用cookie命令都会复用启动时生成的固定值,就会出现每次都输出相同结果的问题。 - 旧版本全分支发送的问题大概率是之前的
if/else if分支漏写了大括号、或者判断逻辑写法错误导致分支判断失效,所有send逻辑都被执行。
具体修复方案
- 把随机数生成的代码移动到
execute函数内部,确保每次触发命令时都会重新生成新的随机数:
// 命令定义 name: 'cookie', description: "RNG Cookie Command", execute(message, args){ // 把随机数生成移到此处,每次调用命令都会重新生成 const random = Math.floor(Math.random() * 10) + 1; // 后续放你的分支判断代码 if (random == 1){ message.channel.send("you got 9:cookie:! They're sweet and yummy!") } else if (random == 2) { message.channel.send("you got 0:cookie:! Try Again?") } else if (random == 3) { message.channel.send("you got 3:cookie:! They're sweet and yummy!") } else if (random == 4) { message.channel.send("you got 0:cookie:! Try Again?") } else if (random == 5) { message.channel.send("you got 9:cookie:! They're sweet and yummy!") } else if (random == 6) { message.channel.send("you got 5:cookie:! They're sweet and yummy!") } else if (random == 7) { message.channel.send("you got 6:cookie:! They're sweet and yummy!") } else if (random == 8) { message.channel.send("you got 0:cookie:! Try Again?") } else if (random == 9){ message.channel.send("you got 2:cookie:! They're sweet and yummy!") } else if (random == 10) { message.channel.send("you got 0:cookie:! Try Again?") } else{ message.channel.send("Amonger") } }
- 可选优化:用数组映射替代冗长的
if/else if分支,代码更简洁易维护:
execute(message, args){ const random = Math.floor(Math.random() * 10) + 1; // 下标0占位,对应随机数1-10的返回结果 const cookieMap = [ "", "you got 9:cookie:! They're sweet and yummy!", "you got 0:cookie:! Try Again?", "you got 3:cookie:! They're sweet and yummy!", "you got 0:cookie:! Try Again?", "you got 9:cookie:! They're sweet and yummy!", "you got 5:cookie:! They're sweet and yummy!", "you got 6:cookie:! They're sweet and yummy!", "you got 0:cookie:! Try Again?", "you got 2:cookie:! They're sweet and yummy!", "you got 0:cookie:! Try Again?" ] message.channel.send(cookieMap[random] || "Amonger") }
内容的提问来源于stack exchange,提问作者Skyitande
相关产品推荐
相关产品推荐

