Данные пользователя, распределенные только серверу

Ранее, он сделал программу, в которой, когда кто-то посылал сообщение, добавлялось поле с Вашей идентификацией и Вашей пунктуацией в файле JSON через NodeJS и FS здесь.

Они обобщают, у меня есть файл, который сохраняет глобальную пунктуацию, следующего способа:

let points = JSON.parse(fs.readFileSync('./points.json', 'utf8'));

В которой, у файла./points.json был следующий формат:

{
 "242043489611808769":{"points":617,"level":4,"time":1482316617392},
 "129213229221019648":{"points":22,"level":0,"time":1482316617609},
 "190388892799598592":{"points":214,"level":2,"time":1482316612355}
}

И данные добавлялись (в случае несуществующей идентификации) или становились отвечающими современным требованиям со следующим кодом:

let userData = points[msg.author.id];
if(!userData) {
    userData = {points: 0, level: 0, time: msg.createdTimestamp};
    points[msg.author.id] = userData;
}

Но сейчас, я нуждаюсь в том, чтобы создать "локальную" пунктуацию, в которой сохраняли бы данные со следующей структурой:

{
  "256566731684839428":[
    {"ID":"242043489611808769", "points":617},
    {"ID":"129213229221019648", "points":22},
    {"ID":"190388892799598592", "points":214},
  ]
}

И я определяю второй файл JSON как:

let lpoints = JSON.parse(fs.readFileSync('./lpoints.json', 'utf8'));

В которой 256566731684839428 - идентификация guild или сервера. Моя проблема, когда идентификация guild/servidor несуществующая, этот должен быть добавленным, и если он это, но пользователь сервера это не, они должны добавляться поле для соответствующего пользователя и делать те же процедуры, что и моя программа делает с данными пользователей во всем мире (написанные более наверху).

Я пробовал со следующим кодом, чтобы получать данные пользователей как в глобальном уровне (в "локальных" данных пользователя только я нуждаюсь в точках, распределенных каждой идентификации, в отличие от "глобальных", у которых есть точки, уровень и время). И, у стоимости "points" в локальных данных нет, почему быть тем же самым для всех серверов (для этого - глобальный).

let lguild = msg.guild.id;
let luserData = lpoints.lguild[msg.author.id];

Но возврати undefined: как я могу решать это?

Заранее спасибо.

2
задан 13.04.2017, 16:00
1 ответ

Имея этот объект: (описанным внизу является эквивалент, который должен загружать JSON.parse)

var lpoints = { 
  "256566731684839428":[
    {"ID":"242043489611808769", "points":617},
    {"ID":"129213229221019648", "points":22},
    {"ID":"190388892799598592", "points":214},
  ]
}

Получать данные

, я объясняю Тебе формат JSON, и как читается / пишется в javascript вышеупомянутый формат:

Блок, заключенный между { } - объект. А именно, что элементы идентифицируются по имени. Чтобы соглашаться на элементы объекта на то, чтобы использовать нотацию

lpoints[nombre]  // donde nombre es la clave a obtener o establecer el valor 

В этот случай serГ - в:

var guild = lpoints["256566731684839428"]

сейчас, когда он заключен между [ ] - array, следовательно, как у этого array есть элементы, заключенные между {}, оказывается, что guild один: array объектов.

, Чтобы соглашаться на элементы этого array (объекты), ты должен использовать Ваш индекс (у первого элемента есть индекс 0)

var user1 = guild[1]   // devueve {"ID":"129213229221019648", "points":22}
user1.points = 25;

Добавлять новые данные

, Чтобы добавлять данные к объекту guild типов дебета использовать ту же самую notaciГіn, что у тебя есть до настоящего времени, но если ты хочешь использовать array (как другой guild), просто помести один [] в ассигнование то, что добавляло договоренность как новый guild.

lpoints["NUEVO CODIGO"] = [] // esto agrega un array vacio.

, Потом чтобы добавлять элементы к новому guild, ты должен использовать метод push из array.

var nuevoGuild = lpoints["NUEVO CODIGO"];  // obtenemos lo agregado antes.
nuevoGuild.push({ ID: "12312321321321321", "points" : 0});

Искать идентификацию внутри одного guild.

Есть большие способы это делать, я рекомендую тебе find. Функция find выполняет ее funciГіn callback однажды из-за каждого присутствующего элемента договоренность до тех пор, пока он не найдет один, где callback возвратил стоимость true. Если такой элемент найден, find немедленно возврати стоимость элемента.

оставил Тебе пример:

var userX = guild.find( function(elemento) {
  // retornara el elemento que 
  return elemento.ID === "242043489611808769"
}); 
2
ответ дан 24.11.2019, 11:55

Теги

Похожие вопросы