更新JSON文件NodeJS

时间:2018-05-27 22:53:06

标签: json node.js

这是我的代码:

const Discord = require('discord.js');
const client = new Discord.Client();
const TOKEN = "***********";
const PREFIX = "!";

client.on("ready", function () {
    console.log("Ready!");
});


client.on("message", function (message) {
    if (message.author.equals(client.user)) return;
    if (!message.content.startsWith(PREFIX)) return;
    var args = message.content.substring(PREFIX.length).split(" ");
    switch (args[0]) {
        case "rules":
            var _embed = new Discord.RichEmbed()
                .setTitle("Ruleset")
                .addField("Where is my order?", "Theres only one proper way to recive an order and help. Its a command .ticket")
                .addField("Why AZATEJ is such a bitch?", "If my status is 'dont disturb' and hue is way more red than green it means I have a reason to do so, im not a dick, but i recive a shitload of messages on daily route with stupid quiestions.")
                .addField("Dont ask stupid questions", "Stupid doesnt mean basic, we are up to help you but before you'll contact anyone read twice explanation documents and use a ticket.")
                .setColor(0x00FFFF)
                .setFooter("This message is coool !")
                .setThumbnail(message.author.avatarURL);
            message.channel.send(_embed);
            break;

        case "spotify":
            var uID = message.author.id;
            for (let i = 0; i < ftpr.buyers.length; i++) {
                if (uID === ftpr.buyers[i].id) {
                    var _embed = new Discord.RichEmbed()
                        .setTitle("Spotify")
                        .addField("Username", "testsda@yahoo.com")
                        .addField("Password", "ithastobe8")
                        .setColor(0x00FFFF)
                        .setFooter("Sincerely, LajgaardMoneyService")
                        .setThumbnail(message.author.avatarURL);
                    message.author.send(_embed);
                    console.log(message.author.username + "(" + JSON.stringify(ftpr.buyers[i].id) + ") Just used the command !spotify");
                    break;
                }
                else {
                    message.channel.send(message.author + "You haven't got a valid subscription. This command is locked until a new one is obtained!");
                    break;
                }

            }

            break;

    }
});

client.on('guildMemberAdd', function(member) {
    console.log("User " + member.id + " has joined the server!");
    //var role = member.guild.roles.find("name", "Google!");
    var myRole = member.guild.roles.find("name", "Google!");
    member.addRole(myRole);

});

client.login(TOKEN);

这是JSON文件:

{
  "buyers": [
    {
      "id": "1331499609509724162"
    },
    {
      "id": "181336616164392960"
    },
    {
      "id": "266389854122672128"
    }
  ]
}

当机器人正在运行并且即时更改其中一个ID时,case "spotify":中的检查功能仍在使用旧ID。每次json文件更新时我都不想重新启动程序,因为它应该全天候运行。我尝试了const fs = require("fs");方法,但它给了我这个错误:TypeError: Cannot read property 'buyers' of undefined json

真诚的,奥斯卡

1 个答案:

答案 0 :(得分:0)

const fs = require("fs");只是加载模块。把它放在你文件的顶部。

要在每次需要检查用户ID时读取json文件(效率低下,但应该可以正常工作),请将其放在spotify案例的顶部:

case "spotify":
    var yourjsonfile = fs.readFileSync("yourjsonfile.json");
    var ftpr = JSON.parse(yourjsonfile);
    var uID = message.author.id;
    for (let i = 0; i < ftpr.buyers.length; i++) {
        if (uID === ftpr.buyers[i].id) {

同样,这是非常低效的 - 每次需要检查它时都会重新加载文件,它使用readFileSync(),它会阻塞直到读取文件(最好利用节点的异步功能)。因此,随着JSON文件变大,这将运行得更慢。但此时您可能需要一个数据库或其他一些机制来持久化和查询您的数据。