问题
I want to be able to save my json file with new data and then call upon that data so that I can save new data again. Right now all it is doing is it is, when I call upon any part of the JSON file's data, staying the same the last time I manually saved it. (I did edit some code and a better description of my problem) Thank you in advance! Here is my code there is no error log:
const Discord = require('discord.js');
const botconfig = require("./botconfig.json");
const fs = require("fs");
const bot = new Discord.Client();
bot.on("message", async message => {
let prefix = botconfig.prefix;
let messageArray = message.content.split(" ");
let cmd = messageArray[0];
let args = messageArray.slice(1);
console.log(message.member.id)
var playerFile = require(`./playerData/${message.member.id}.json`);
if (message.author.bot) return;
if (message.channel.type === "dm") return;
if (cmd.charAt(0) === prefix) {
if(cmd === `${prefix}fc`){
fs.exists(`./playerData/${message.member.id}.json`, function(exists) {
if(exists){
let ar = args[0];
let ninConsole = args[1];
let code = args[2];
if(ar === "add" || ar === "remove"){
if(code){
if(ar === "add"){
console.log("Add");
if(ninConsole === "switch"){
console.log("Switch " + code);
let fileContent = `{"switch": "${code}","threeDS": "${playerFile.threeDS}"}`
fs.writeFile(`./playerData/${message.member.id}.json`, fileContent, (err) => {
if (err) {
console.error(err);
return;
};
});
}
if(ninConsole === "3ds"){
let fileContent = `{"switch": "${playerFile.switch}","threeDS": "${code}"}`
fs.writeFile(`./playerData/${message.member.id}.json`, fileContent, (err) => {
if (err) {
console.error(err);
return;
};
});
}
}
if(ar === "remove"){
if(ninConsole === "switch"){
let fileContent = `{"switch": "None","threeDS": "${playerFile.threeDS}"}`
fs.writeFile(`./playerData/${message.member.id}.json`, fileContent, (err) => {
if (err) {
console.error(err);
return;
};
});
}
if(ninConsole === "3ds"){
let fileContent = `{"switch": "${playerFile.switch}","threeDS": "None"}`
fs.writeFile(`./playerData/${message.member.id}.json`, fileContent, (err) => {
if (err) {
console.error(err);
return;
};
});
}
}
}
}
}else{
return;
}
});
}
回答1:
Here is an example of saving data to a JSON file using fs:
JSON.parse(fs.readFileSync("./points.json", "utf8"));
There is an example on how to use this code to make a points system for a discord bot here: https://anidiotsguide_old.gitbooks.io/discord-js-bot-guide/content/coding-guides/storing-data-in-a-json-file.html
Here is the code for this example:
const Discord = require("discord.js");
const fs = require("fs");
const client = new Discord.Client();
let points = JSON.parse(fs.readFileSync("./points.json", "utf8"));
const prefix = "+";
client.on("message", message => {
if (!message.content.startsWith(prefix)) return;
if (message.author.bot) return;
if (!points[message.author.id]) points[message.author.id] = {
points: 0,
level: 0
};
let userData = points[message.author.id];
userData.points++;
let curLevel = Math.floor(0.1 * Math.sqrt(userData.points));
if (curLevel > userData.level) {
// Level up!
userData.level = curLevel;
message.reply(`You"ve leveled up to level **${curLevel}**! Ain"t that dandy?`);
}
if (message.content.startsWith(prefix + "level")) {
message.reply(`You are currently level ${userData.level}, with ${userData.points} points.`);
}
fs.writeFile("./points.json", JSON.stringify(points), (err) => {
if (err) console.error(err)
});
});
client.login("SuperSecretBotTokenHere");
I hope this helps!
来源:https://stackoverflow.com/questions/49420471/save-json-file-to-grab-other-data-from-it-later