| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- const fs = require('await-file')
- const Path = require('path')
- const { Snowflake } = require('discord.js')
- const storageDirectory = './users'
- const userDirectory = user => Path.join(storageDirectory, `${user.id}`)
- const userIndexFile = user => Path.join(userDirectory(user), 'index.json')
- const userStateFile = (user, snowflake) => Path.join(userDirectory(user), `${snowflake}.json`)
- const ensureUserDirectory = async user => {
- if (!await fs.exists(userDirectory(user))) {
- await fs.createDirectory(userDirectory(user))
- }
- }
- const getIndex = async user => {
- if (await fs.exists(userIndexFile(user)))
- return JSON.parse(await fs.readFile(userIndexFile(user), 'utf8'))
- return {}
- }
- const setIndex = async (user, index) => {
- await ensureUserDirectory(user)
- await fs.writeFile(userIndexFile(user), JSON.stringify(index))
- }
- const get = async (user) => {
- const index = await getIndex(user)
- if (!index.latest) return {}
- return JSON.parse(await fs.readFile(userStateFile(user, index.latest)))
- }
- const set = async (user, object) => {
- const json = JSON.stringify(object)
- await ensureUserDirectory(user)
- const index = await getIndex(user)
- index.latest = Snowflake.generate()
- await fs.writeFile(userStateFile(user, index.latest), json)
- await setIndex(user, index)
- }
- module.exports = {
- get,
- set,
- getIndex,
- setIndex,
- storageDirectory,
- userDirectory,
- userIndexFile,
- userStateFile,
- ensureUserDirectory
- }
|