Ошибка в базе данных JSON

215
10 февраля 2020, 02:00

Есть начальные данные для каждого аккаунта

const accounts = require('./base/coins.json');
const pathAccount = './base/coins.json';
    const settings = {
        "balance": 0
    }

Потом идёт проверка на новое сообщение через VK Api и если пользователя нету, то он его добавляет.

if (!accounts[context.senderId] && context.senderId > 0){
accounts[context.senderId] = settings;
fs.writeFileSync(pathAccount, JSON.stringify(accounts, null, '\t'));
var name = await get_name(context.senderId);
context.send(`
Здравствуй @id`+context.senderId +`(`+name+`), добро пожаловать в интерфейс нашего бота. Регистрация прошла успешна, можно приступать к использованию. Напишите "!команды" чтобы получить список команд и клавиатуру.`)
}

Есть единственная команда, которую я выполню

updates.hear(/!баланс (\d+) (\d+)/i, async (context) => {
  accounts[context.$match[1]].balance = Number(context.$match[2]);
  fs.writeFileSync(pathAccount, JSON.stringify(accounts, null, '\t'));
});

По плану, должно было сохранится значение баланса для одного пользователя, а когда их несколько, получается так, что сохраняется значение сразу для всех пользователей. Почему так я до сих пор не понял.

Если вкратце для тех кто не шарит в VK API, я сохраняю в одну ячейку памяти JSON значение, и оно сохраняется на все ячейки памяти. Чудо не правда-ли?

Примеры

После выполнения команды "!баланс 1 228", вид базы данных должен быть:

"1": {
    "balance": 228
}
"123": {
    "balance": 0
}
"228": {
    "balance": 1
}

А не таким

"1": {
    "balance": 228
}
"123": {
    "balance": 228
}
"228": {
    "balance": 228
}

Весь мой код

const { VK, Keyboard } = require('vk-io'); 
const randomFloat = require('random-float'); 
const vk = new VK(); 
const accounts = require('./base/coins.json'); 
const pathAccount = './base/coins.json'; 
var fs = require("fs");
const { updates } = vk;
vk.setOptions({
  token: 'токен',
  pollingGroupId: '181482968',
  apiLimit: 20,
  webhookPath: '/webhook/secret-path'
});
const settings = { 
"balance": 0, 
"something": "to be continued" 
} 
updates.use(async (context, next) => { 
if (context.type === 'message' && context.isOutbox) { 
return; 
} 
try { 
await next(); 
} catch (error) { 
console.error('Ошибка:', error); 
} 
if (!accounts[context.senderId]&&context.senderId>0){ 
accounts[context.senderId] = settings; 
fs.writeFileSync(pathAccount, JSON.stringify(accounts, null, '\t')); 
context.send('привет');
} 
})
updates.hear(/!баланс (\d+) (\d+)/i, async (context) => { 
accounts[context.$match[1]].balance = Number(context.$match[2]); 
fs.writeFileSync(pathAccount, JSON.stringify(accounts, null, '\t')); 
context.send('сохрится');
});
vk.updates.startPolling();
console.log('Polling started');
vk.updates.startWebhook();
console.log('Webhook server started');
READ ALSO
изменить цвет пункта меню

изменить цвет пункта меню

У меня длинное меню, функция обработки выбранного пункта меню однаУ всех пунктов меню один общий класс и разные id

231
Как скрыть форму обратного звонка при успешном заполнении?

Как скрыть форму обратного звонка при успешном заполнении?

На сайте есть форма обратного звонка, когда клиент заполняет поля и нажимает на "отправить" то рядом с баттоном появляется слово "Ваш запрос...

176
Lazy для this.props.children

Lazy для this.props.children

Подскажите, есть ли вариант использовать thisprops

193
В чем смысл конструкции Bar.prototype = new Foo() [дубликат]

В чем смысл конструкции Bar.prototype = new Foo() [дубликат]

Объясните пожалуйста, почему происиходит вызов функции?

191