UNPKG

discord.emoji-backup

Version:

A simple package to make your emoji easier to handle.

158 lines (143 loc) 4.42 kB
/* eslint-disable no-shadow */ const util = require('util'); const { existsSync, mkdirSync, readdir: test, writeFileSync, statSync } = require('fs'); const { join } = require('path'); const readdir = util.promisify(test); const PACKAGE = require('./package.json'); const { generate } = require('randomstring'); let dirBackup = `${join(__dirname)}/backups/`; if (!existsSync(dirBackup)) { mkdirSync(dirBackup); } const Backup = require('./source/util/backup'); const backup = new Backup(); const Loader = require('./source/util/load'); const loader = new Loader(); /** * @since 1.0.0 * @param {string} id Backup ID * @returns Backup informations */ async function backupInfo(id) { return new Promise(async function(sucess, reject) { const files = await readdir(dirBackup); const file = files.filter(ff => ff.split('.').pop() === 'json').find(ff => ff === `${id}.json`); if (file) { const backup = require(`${dirBackup}${file}`); sucess(backup); } else { reject(`No backups found with id ${id}`); } }); } class DiscordBackup { constructor() { this.version = PACKAGE.version; } /** * Change the storage path * @param {string} path The folder path */ setStorageFolder(path) { dirBackup = path; if (!existsSync(dirBackup)) { mkdirSync(dirBackup); } } /** * This function fetches a backyp and returns the information about it * @param {string} backupID The ID of the backup to fetch * @returns An object, the backup informations */ async fetch(backupID) { return new Promise(async function(sucess, reject) { backupInfo(backupID).then(async info => { const size = statSync(`${dirBackup}${backupID}.json`).size; sucess({ ID: backupID, guildID: info.id, createdTimestamp: info.createdTimestamp, size: `${(size / 1024 / 1024).toFixed(2)}MB`, data: backupInformations, }); }).catch(() => { reject(`No backups found with id ${backupid}`); }); }); } /** * @since 1.0.0 * @returns A list of backups */ async list() { const files = await readdir(dirBackup); return files.map((f) => f.length === 0 ? 'No backups found.' : f.substr(0, 5)); } /** * Function of creating guild emoji backup * @since 1.0.0 * @param {object} guild Guild to create a emoji backup * @param {object} options * @returns Sucess or error */ async create(guild, options = { json: false }) { return new Promise(async function(sucess, reject) { try { guild.iconURL(); } catch (error) { if (error.message.includes('guild.iconURL is not a function')) { return reject('You must install discord.js version 12 to use this package.'); } else { return console.error(error); } } const data = { name: guild.name, id: guild.id, emojis: [], createdTimestamp: (+new Date()), }; data.emojis = await backup.getEmojis(guild).catch(() => null); const backupid = generate(8); if (options.json) { return sucess(data); } else if (!options.json) { writeFileSync(`${dirBackup}${backupid}.json`, JSON.stringify(data)); return sucess(backupid); } }); } /** * @since 1.0.0 * @param {object} guild Guild to load the emoji backup * @param {string} backupid Backup id you want to upload * @param {object} options If you want to delete all guild emojis, put {deleteAll: true} */ async load(guild, backupid, options = { deleteAll: false }) { return new Promise(async function(sucess, reject) { if (typeof options !== 'object') return reject('Options must be an object'); await backupInfo(backupid).then(async (info) => { if (!guild) { return reject('Invalid guild'); } try { guild.iconURL(); } catch (error) { if (error.message.includes('guild.iconURL is not a function')) { return reject('You must install discord.js version 12 to use this package.'); } } if (options.deleteAll) { await loader.deleteEmojis(guild); await loader.loadEmojis(guild, info); } else if (!options.deleteAll) { await loader.loadEmojis(guild, info); } return sucess(true); }).catch(() => { return reject(`No backups found with id ${backupid}`); }); }); } } module.exports.EmojiBackup = DiscordBackup;