{"version":3,"sources":["jsdelivr-header.js","/npm/discord-backup@3.4.0/lib/index.js"],"names":[],"mappings":"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","file":"/npm/discord-backup@3.4.0/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/discord-backup@3.4.0/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setStorageFolder = exports.list = exports.remove = exports.load = exports.create = exports.fetch = void 0;\nconst discord_js_1 = require(\"discord.js\");\nconst node_fetch_1 = require(\"node-fetch\");\nconst path_1 = require(\"path\");\nconst fs_1 = require(\"fs\");\nconst promises_1 = require(\"fs/promises\");\nconst createMaster = require(\"./create\");\nconst loadMaster = require(\"./load\");\nconst utilMaster = require(\"./util\");\nlet backups = `${__dirname}/backups`;\nif (!(0, fs_1.existsSync)(backups)) {\n    (0, fs_1.mkdirSync)(backups);\n}\n/**\n * Checks if a backup exists and returns its data\n */\nconst getBackupData = async (backupID) => {\n    return new Promise(async (resolve, reject) => {\n        const files = await (0, promises_1.readdir)(backups); // Read \"backups\" directory\n        // Try to get the json file\n        const file = files.filter((f) => f.split('.').pop() === 'json').find((f) => f === `${backupID}.json`);\n        if (file) {\n            // If the file exists\n            const backupData = require(`${backups}${path_1.sep}${file}`);\n            // Returns backup informations\n            resolve(backupData);\n        }\n        else {\n            // If no backup was found, return an error message\n            reject('No backup found');\n        }\n    });\n};\n/**\n * Fetches a backyp and returns the information about it\n */\nconst fetch = (backupID) => {\n    return new Promise(async (resolve, reject) => {\n        getBackupData(backupID)\n            .then((backupData) => {\n            const size = (0, fs_1.statSync)(`${backups}${path_1.sep}${backupID}.json`).size; // Gets the size of the file using fs\n            const backupInfos = {\n                data: backupData,\n                id: backupID,\n                size: Number((size / 1024).toFixed(2))\n            };\n            // Returns backup informations\n            resolve(backupInfos);\n        })\n            .catch(() => {\n            reject('No backup found');\n        });\n    });\n};\nexports.fetch = fetch;\n/**\n * Creates a new backup and saves it to the storage\n */\nconst create = async (guild, options = {\n    backupID: null,\n    maxMessagesPerChannel: 10,\n    jsonSave: true,\n    jsonBeautify: true,\n    doNotBackup: [],\n    backupMembers: false,\n    saveImages: ''\n}) => {\n    return new Promise(async (resolve, reject) => {\n        const intents = new discord_js_1.IntentsBitField(guild.client.options.intents);\n        if (!intents.has(discord_js_1.IntentsBitField.Flags.Guilds))\n            return reject('Guilds intent is required');\n        try {\n            const backupData = {\n                name: guild.name,\n                verificationLevel: guild.verificationLevel,\n                explicitContentFilter: guild.explicitContentFilter,\n                defaultMessageNotifications: guild.defaultMessageNotifications,\n                afk: guild.afkChannel ? { name: guild.afkChannel.name, timeout: guild.afkTimeout } : null,\n                widget: {\n                    enabled: guild.widgetEnabled,\n                    channel: guild.widgetChannel ? guild.widgetChannel.name : null\n                },\n                channels: { categories: [], others: [] },\n                roles: [],\n                bans: [],\n                emojis: [],\n                members: [],\n                createdTimestamp: Date.now(),\n                guildID: guild.id,\n                id: options.backupID ?? discord_js_1.SnowflakeUtil.generate().toString()\n            };\n            if (guild.iconURL()) {\n                if (options && options.saveImages && options.saveImages === 'base64') {\n                    backupData.iconBase64 = (await (0, node_fetch_1.default)(guild.iconURL()).then((res) => res.buffer())).toString('base64');\n                }\n                backupData.iconURL = guild.iconURL();\n            }\n            if (guild.splashURL()) {\n                if (options && options.saveImages && options.saveImages === 'base64') {\n                    backupData.splashBase64 = (await (0, node_fetch_1.default)(guild.splashURL()).then((res) => res.buffer())).toString('base64');\n                }\n                backupData.splashURL = guild.splashURL();\n            }\n            if (guild.bannerURL()) {\n                if (options && options.saveImages && options.saveImages === 'base64') {\n                    backupData.bannerBase64 = (await (0, node_fetch_1.default)(guild.bannerURL()).then((res) => res.buffer())).toString('base64');\n                }\n                backupData.bannerURL = guild.bannerURL();\n            }\n            if (options && options.backupMembers) {\n                // Backup members\n                backupData.members = await createMaster.getMembers(guild);\n            }\n            if (!options || !(options.doNotBackup || []).includes('bans')) {\n                // Backup bans\n                backupData.bans = await createMaster.getBans(guild);\n            }\n            if (!options || !(options.doNotBackup || []).includes('roles')) {\n                // Backup roles\n                backupData.roles = await createMaster.getRoles(guild);\n            }\n            if (!options || !(options.doNotBackup || []).includes('emojis')) {\n                // Backup emojis\n                backupData.emojis = await createMaster.getEmojis(guild, options);\n            }\n            if (!options || !(options.doNotBackup || []).includes('channels')) {\n                // Backup channels\n                backupData.channels = await createMaster.getChannels(guild, options);\n            }\n            if (!options || options.jsonSave === undefined || options.jsonSave) {\n                // Convert Object to JSON\n                const backupJSON = options.jsonBeautify\n                    ? JSON.stringify(backupData, null, 4)\n                    : JSON.stringify(backupData);\n                // Save the backup\n                await (0, promises_1.writeFile)(`${backups}${path_1.sep}${backupData.id}.json`, backupJSON, 'utf-8');\n            }\n            // Returns ID\n            resolve(backupData);\n        }\n        catch (e) {\n            return reject(e);\n        }\n    });\n};\nexports.create = create;\n/**\n * Loads a backup for a guild\n */\nconst load = async (backup, guild, options = {\n    clearGuildBeforeRestore: true,\n    maxMessagesPerChannel: 10\n}) => {\n    return new Promise(async (resolve, reject) => {\n        if (!guild) {\n            return reject('Invalid guild');\n        }\n        try {\n            const backupData = typeof backup === 'string' ? await getBackupData(backup) : backup;\n            try {\n                if (options.clearGuildBeforeRestore === undefined || options.clearGuildBeforeRestore) {\n                    // Clear the guild\n                    await utilMaster.clearGuild(guild);\n                }\n                await Promise.all([\n                    // Restore guild configuration\n                    loadMaster.loadConfig(guild, backupData),\n                    // Restore guild roles\n                    loadMaster.loadRoles(guild, backupData),\n                    // Restore guild channels\n                    loadMaster.loadChannels(guild, backupData, options),\n                    // Restore afk channel and timeout\n                    loadMaster.loadAFK(guild, backupData),\n                    // Restore guild emojis\n                    loadMaster.loadEmojis(guild, backupData),\n                    // Restore guild bans\n                    loadMaster.loadBans(guild, backupData),\n                    // Restore embed channel\n                    loadMaster.loadEmbedChannel(guild, backupData)\n                ]);\n            }\n            catch (e) {\n                return reject(e);\n            }\n            // Then return the backup data\n            return resolve(backupData);\n        }\n        catch (e) {\n            return reject('No backup found');\n        }\n    });\n};\nexports.load = load;\n/**\n * Removes a backup\n */\nconst remove = async (backupID) => {\n    return new Promise((resolve, reject) => {\n        try {\n            require(`${backups}${path_1.sep}${backupID}.json`);\n            (0, fs_1.unlinkSync)(`${backups}${path_1.sep}${backupID}.json`);\n            resolve();\n        }\n        catch (error) {\n            reject('Backup not found');\n        }\n    });\n};\nexports.remove = remove;\n/**\n * Returns the list of all backup\n */\nconst list = async () => {\n    const files = await (0, promises_1.readdir)(backups); // Read \"backups\" directory\n    return files.map((f) => f.split('.')[0]);\n};\nexports.list = list;\n/**\n * Change the storage path\n */\nconst setStorageFolder = (path) => {\n    if (path.endsWith(path_1.sep)) {\n        path = path.substr(0, path.length - 1);\n    }\n    backups = path;\n    if (!(0, fs_1.existsSync)(backups)) {\n        (0, fs_1.mkdirSync)(backups);\n    }\n};\nexports.setStorageFolder = setStorageFolder;\nexports.default = {\n    create: exports.create,\n    fetch: exports.fetch,\n    list: exports.list,\n    load: exports.load,\n    remove: exports.remove\n};\n"]}