javascript - Java/Discord.js ReferenceError: X 未定义
问题描述
我在这方面很新,我创建了一个工作级别系统,将数据存储在 JSON 中以用于特定的不和谐,在他们达到一定的“经验”后,他们得到提升并可以访问越来越多的后端渠道。一种奖励系统,用户可以更轻松地与我和我的团队(我是内容创建者)进行交流。
我知道这段代码远非完美,但以我目前的知识,它可以解决问题。但是我有一个问题,我希望用户看到他们当前的排名,这也很好,但是每次使用“命令”(.xp)时,它都会在我的控制台中返回一个错误。不过,它确实会以不和谐的方式输出所需的东西。非常感谢有关如何解决此问题的任何想法。
编码
//Levelup system.
var stats = {};
if (fs.existsSync('stats.json')) {
stats = jsonfile.readFileSync('stats.json');
}
client.on('message', (message) => {
if (message.guild.id != '335008833267040256')return;{
if (message.author.id == client.user.id)
return;
if (message.guild.id in stats === false) {
stats[message.guild.id] = {};
}
const guildStats = stats[message.guild.id];
if (message.author.id in guildStats === false) {
guildStats[message.author.id] = {
xp: 0,
level: 0,
last_message: 0
};
}
const userStats = guildStats[message.author.id];
if (Date.now() - userStats.last_message > 10000) {
userStats.xp += random.int(10, 25);
userStats.last_message = Date.now();
const xpToNextLevel = 5 * Math.pow(userStats.level, 2) + 50 * userStats.level + 100;
if (userStats.xp >= xpToNextLevel) {
userStats.level++;
if (userStats.level >= 5) {
message.member.addRole('495558358380838913');
}
if (userStats.level >= 10) {
message.member.addRole('634538508618301445');
}
if (userStats.level >= 25) {
message.member.addRole('634538456265261081');
}
if (userStats.level >= 50) {
message.member.addRole('634539458594865154');
}
if (userStats.level >= 100) {
message.member.addRole('634539508444168203');
}
userStats.xp = userStats.xp - xpToNextLevel;
message.channel.send(message.author + ' has reached level ' + userStats.level + '. **' + xpToNextLevel + '** XP needed for next level.');
}
jsonfile.writeFileSync('stats.json', stats);
console.log(message.author.username + ' now has ' + userStats.xp + 'XP. ' + xpToNextLevel + 'XP needed for next level.');
if (message.content.startsWith (".xp")) {
message.reply ('you are level '+ userStats.level + ', with ' + userStats.xp + ' exp. ' + xpToNextLevel + ' exp is needed for next level.');
}
}
}
const parts = message.content.split(' ');
});
fs.readFile('stats.json', (err, data) => {
if (err) throw err;
let ShowStats = JSON.parse(data);
console.log(data);
//change to ^ stats to show better info
});
控制台输出日志
(node:11) UnhandledPromiseRejectionWarning: ReferenceError: userStats is not defined
at Client.client.on (/home/container/index.js:272:64)
at Client.emit (events.js:203:15)
at MessageCreateHandler.handle (/home/container/node_modules/discord.js/src/client/websocket/packets/handlers/MessageCreate.js:9:34)
at WebSocketPacketManager.handle (/home/container/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:105:65)
at WebSocketConnection.onPacket (/home/container/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (/home/container/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:296:17)
at WebSocket.onMessage (/home/container/node_modules/discord.js/node_modules/ws/lib/event-target.js:120:16)
at WebSocket.emit (events.js:198:13)
at Receiver.receiverOnMessage (/home/container/node_modules/discord.js/node_modules/ws/lib/websocket.js:789:20)
at Receiver.emit (events.js:198:13)
(node:11) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:11) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
解决方案
我很抱歉。我搞砸了,忘记删除一些旧代码,这些代码将其称为不存在此变量的命令。
推荐阅读
- r - 按 R 中的条件删除几乎相同的数据框行
- c++ - 为什么我们没有在运行时提供有关分段错误的更多信息?
- google-chrome -
- javascript - 理解 ES6 命名导入
- python - 查看字符串中字母“y”之前是否有元音
- java - 不能从静态上下文中引用非静态方法 .setRetryPolicy
- amazon-web-services - 无法访问 AWS EC2 上的端口 8080
- javascript - 如何将数组作为输入值插入到 HTML 输入字段中?
- r - 如何使用可能会或可能不会传入的几个函数参数来过滤数据帧?(R; dplyr)
- symfony - Symfony 表单面板未显示在分析器中