使用discord.js开发Discord机器人计分板时分值无法更新求助
问题根因
- 你将分数变量
x、y的初始化代码放在了message事件的回调函数内部,这个回调函数每收到一条新消息就会完整执行一次,也就是说每次你触发指令时,x和y都会被重新赋值为0,之前的加分操作自然会被覆盖,分值永远停留在0。 - 代码还有一处小笔误:给X队加分的回复文案写错成了Y队,运行时会误导使用的用户。
修复方法
把x、y两个变量的声明移到message事件监听的外部即可,这样两个变量只会在机器人启动时初始化一次,后续所有的加分操作都会保留修改后的值,修复后的完整代码如下:
// 变量移到事件外部,全局只初始化一次 var x = 0 var y = 0 client.on('message', msg => { if(msg.content.toLowerCase() === 'r!score x 1') { x = x + 1; // 修正了文案的笔误 msg.channel.send("Team X has won a point, now they're at " + x + "!") }else if(msg.content.toLowerCase() === 'r!score y 1') { y = y + 1; msg.channel.send("Team Y has won a point, now they're at " + y + "!") } else if(msg.content.toLowerCase() === 'r!placar') { const scoreboard = new Discord.MessageEmbed() .setColor("#0099ff") .setTitle("**Scoreboard**") .addFields( {name: "__Team X__", value: x + " points"}, {name: "__Team Y__", value: y + " points"} ); msg.channel.send(scoreboard) } })
如果你后续需要实现机器人重启后分数也不丢失的效果,可以把分数数据存储到本地json文件或者轻量数据库中,入门阶段先使用上述内存存储的方式测试运行即可。
内容的提问来源于stack exchange,提问作者Rafallooko
相关产品推荐
相关产品推荐

