| module.exports = function ({ api }) { | |
| const Users = require("./users")({ api }); | |
| const logger =require("../../utils/log.js"); | |
| const { writeFileSync, readFileSync } = require("fs-extra"); | |
| var path = __dirname + "/data/threadsData.json"; | |
| try { | |
| var threadsData = require(path) | |
| } catch { | |
| writeFileSync(path, "{}", { flag: 'a+' }); | |
| } | |
| async function getInfo(threadID) { | |
| try { | |
| const result = await api.getThreadInfo(threadID); | |
| return result; | |
| } | |
| catch (error) { | |
| throw new Error(error); | |
| return false | |
| }; | |
| } | |
| async function getData(threadID, callback) { | |
| try { | |
| if (!threadID) throw new Error("threadID cannot be empty"); | |
| if (isNaN(threadID)) throw new Error("Invalid threadID"); | |
| if (!threadsData.hasOwnProperty(threadID)) await createData(threadID); | |
| const data = threadsData[threadID]; | |
| if (callback && typeof callback == "function") callback(null, data); | |
| return data; | |
| } catch (error) { | |
| if (callback && typeof callback == "function") callback(error, null); | |
| return false | |
| } | |
| } | |
| async function saveData(data) { | |
| try { | |
| if (!data) throw new Error('Data cannot be left blank'); | |
| writeFileSync(path, JSON.stringify(data, null, 4)) | |
| } catch (error) { | |
| return false | |
| } | |
| } | |
| async function getAll(keys, callback) { | |
| try { | |
| if (!keys) { | |
| if (Object.keys(threadsData).length == 0) return []; | |
| else if (Object.keys(threadsData).length > 0) { | |
| var db = []; | |
| for (var i of Object.keys(threadsData)) db.push(threadsData[i]); | |
| return db; | |
| } | |
| } | |
| if (!Array.isArray(keys)) throw new Error("The input parameter must be an array"); | |
| const data = []; | |
| for (var ID in threadsData) { | |
| const database = { | |
| ID: ID | |
| }; | |
| const threadData = threadsData[ID]; | |
| for (var i of keys) database[i] = threadData[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 setData(threadID, options, callback) { | |
| try { | |
| if (!threadID) throw new Error("threadID cannot be empty"); | |
| if (isNaN(threadID)) throw new Error("Invalid threadID"); | |
| if (!threadsData.hasOwnProperty(threadID)) throw new Error(`Threads with ID: ${threadID} does not exist in Database`); | |
| if (typeof options != 'object') throw new Error("The options parameter passed must be an object"); | |
| threadsData[threadID] = { | |
| ...threadsData[threadID], | |
| ...options | |
| } | |
| await saveData(threadsData); | |
| if (callback && typeof callback == "function") callback(null, threadsData[threadID]); | |
| return threadsData[threadID]; | |
| } | |
| catch(error) { | |
| if (callback && typeof callback == "function") callback(error, null); | |
| return false | |
| } | |
| } | |
| async function delData(threadID, callback) { | |
| try { | |
| if (!threadID) throw new Error("threadID cannot be empty"); | |
| if (isNaN(threadID)) throw new Error("Invalid threadID"); | |
| if (!threadsData.hasOwnProperty(threadID)) throw new Error(`Threads with ID: ${threadID} does not exist in Database`); | |
| delete threadsData[threadID]; | |
| await saveData(threadsData); | |
| if (callback && typeof callback == "function") callback(null, "REMOVE THREAD"+ threadID + "SUCCESS"); | |
| return true; | |
| } catch(error) { | |
| if (callback && typeof callback == "function") callback(error, null); | |
| return false | |
| } | |
| } | |
| async function createData(threadID, callback) { | |
| try { | |
| if (!threadID) throw new Error("threadID cannot be empty"); | |
| if (isNaN(threadID)) throw new Error("Invalid threadID"); | |
| if (threadsData.hasOwnProperty(threadID)) throw new Error(`Threads with ID: ${threadID} already exists in Database`); | |
| var threadInfo = await api.getThreadInfo(threadID); | |
| var data = { | |
| [threadID]: { | |
| threadInfo: { | |
| threadID: threadID, | |
| threadName: threadInfo.threadName, | |
| emoji: threadInfo.emoji, | |
| adminIDs: threadInfo.adminIDs, | |
| participantIDs: threadInfo.participantIDs, | |
| isGroup: threadInfo.isGroup, | |
| }, | |
| createTime: { | |
| timestamp: Date.now() | |
| }, | |
| data: { | |
| timestamp: Date.now() | |
| } | |
| } | |
| } | |
| Object.assign(threadsData, data); | |
| const dataUser = global.data.allUserID | |
| for (singleData of threadInfo.userInfo) { | |
| if(singleData.gender != undefined) { | |
| try { | |
| if(dataUser.includes(singleData.id) || Users.hasOwnProperty(singleData.id)) continue | |
| dataUser.push(singleData.id) | |
| await Users.createData(singleData.id) | |
| logger.log(global.getText('handleCreateDatabase', 'newUser', singleData.id), 'DATABASE'); | |
| } catch(e) { console.log(e) }; | |
| } | |
| } | |
| await saveData(threadsData) | |
| if (callback && typeof callback == "function") callback(null, data); | |
| return data; | |
| } catch (error) { | |
| if (callback && typeof callback == "function") callback(error, null); | |
| return false | |
| } | |
| } | |
| return { | |
| getInfo, | |
| getAll, | |
| getData, | |
| setData, | |
| delData, | |
| createData | |
| }; | |
| }; |