Jonell01's picture
Upload 3 files
e758fa7 verified
module.exports = function ({ api }) {
const { writeFileSync } = require("fs-extra");
var path = __dirname + "/data/usersData.json";
try {
var usersData = require(path)
} catch {
writeFileSync(path, "{}", { flag: 'a+' });
}
async function saveData(data) {
try {
if (!data) throw new Error('Data cannot be left blank');
writeFileSync(path, JSON.stringify(data, null, 4))
return true
} catch (error) {
return false
}
}
async function getInfo(id) {
return (await api.getUserInfo(id))[id];
}
async function getNameUser(userID) {
try {
if (!userID) throw new Error("User ID cannot be blank");
if (isNaN(userID)) throw new Error("Invalid user ID");
var userInfo = await api.getUserInfo(userID);
return `User ID: ${userID}`;
} catch (error) {
return `Facebook users`
}
}
async function getUserFull(id) {
var resolveFunc = function () { };
var rejectFunc = function () { };
var returnPromise = new Promise(function (resolve, reject) {
resolveFunc = resolve;
rejectFunc = reject;
});
try {
api.httpGet(`https://graph.facebook.com/${id}?fields=email,about,birthday,link&access_token=${global.account.accessToken}`, (e, i) => {
if (e) return rejectFunc(e)
var t = JSON.parse(i);
var dataUser = {
error: 0,
author: 'D-Jukie',
data: {
uid: t.id || null,
about: t.about || null,
link: t.link || null,
imgavt: `https://graph.facebook.com/${t.id}/picture?height=1500&width=1500&access_token=1073911769817594|aa417da57f9e260d1ac1ec4530b417de`
}
};
return resolveFunc(dataUser)
});
return returnPromise
} catch (error) {
return resolveFunc({
error: 1,
author: 'D-Jukie',
data: {}
})
}
}
async function getAll(keys, callback) {
try {
if (!keys) {
if (Object.keys(usersData).length == 0) return [];
else if (Object.keys(usersData).length > 0) {
var db = [];
for (var i of Object.keys(usersData)) db.push(usersData[i]);
return db;
}
}
if (!Array.isArray(keys)) throw new Error("The input parameter must be an array");
const data = [];
for (var userID in usersData) {
var database = {
ID: userID
};
var userData = usersData[userID];
for (var i of keys) database[i] = userData[i];
data.push(database);
}
if (callback && typeof callback == "function") callback(null, data);
return data;
} catch (error) {
if (callback && typeof callback == "function") callback(error, null);
return false
}
}
async function getData(userID, callback) {
try {
if (!userID) throw new Error("User ID cannot be blank");
if (isNaN(userID)) throw new Error("Invalid user ID");
if (!usersData.hasOwnProperty(userID)) await createData(userID, (error, info) => {
return info;
});
const data = usersData[userID];
if (callback && typeof callback == "function") callback(null, data);
return data;
} catch (error) {
if (callback && typeof callback == "function") callback(error, null);
return false
}
}
async function setData(userID, options, callback) {
try {
if (!userID) throw new Error("User ID cannot be blank");
if (isNaN(userID)) throw new Error("Invalid user ID");
if (!userID) throw new Error("userID cannot be empty");
if (global.config.autoCreateDB) {
if (!usersData.hasOwnProperty(userID)) throw new Error(`User ID: ${userID} does not exist in Database`);
}
if (typeof options != 'object') throw new Error("The options parameter passed must be an object");
usersData[userID] = { ...usersData[userID], ...options };
await saveData(usersData);
if (callback && typeof callback == "function") callback(null, dataUser[userID]);
return usersData[userID];
} catch (error) {
if (callback && typeof callback == "function") callback(error, null);
return false
}
}
async function delData(userID, callback) {
try {
if (!userID) throw new Error("User ID cannot be blank");
if (isNaN(userID)) throw new Error("Invalid user ID");
if (global.config.autoCreateDB) {
if (!usersData.hasOwnProperty(userID)) throw new Error(`User ID: ${userID} does not exist in Database`);
}
delete usersData[userID];
await saveData(usersData);
if (callback && typeof callback == "function") callback(null, usersData);
return usersData;
} catch (error) {
if (callback && typeof callback == "function") callback(error, null);
return false
}
}
async function createData(userID, callback) {
try {
if (!userID) throw new Error("User ID cannot be blank");
if (isNaN(userID)) throw new Error("Invalid user ID");
var userInfo = await getInfo(userID);
if (usersData.hasOwnProperty(userID)) return false
var data = {
[userID]: {
userID: userID,
money: 0,
exp: 0,
createTime: {
timestamp: Date.now()
},
data: {
timestamp: Date.now()
},
lastUpdate: Date.now()
}
}
Object.assign(usersData, data);
await saveData(usersData);
if (callback && typeof callback == "function") callback(null, data);
return data;
} catch (error) {
if (callback && typeof callback == "function") callback(error, null);
return false
}
}
return {
getInfo,
getNameUser,
getAll,
getData,
setData,
delData,
createData,
getUserFull
};
};