| 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 | |
| }; | |
| }; | |