Есть начальные данные для каждого аккаунта
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');
У меня длинное меню, функция обработки выбранного пункта меню однаУ всех пунктов меню один общий класс и разные id
На сайте есть форма обратного звонка, когда клиент заполняет поля и нажимает на "отправить" то рядом с баттоном появляется слово "Ваш запрос...
Объясните пожалуйста, почему происиходит вызов функции?