这是我的新手,我创建了一个工作级别的系统,该数据将数据存储在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.
答案 0 :(得分:0)
非常抱歉。我搞砸了,忘了删除一些旧代码,将其称为不存在此变量的命令。