UNPKG

discord-rebackup

Version:

An rewamped fork of the discord-backup module ! by the iHorizon Team

176 lines (175 loc) 7.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadEmbedChannel = exports.loadBans = exports.loadEmojis = exports.loadAFK = exports.loadChannels = exports.loadRoles = exports.loadConfig = void 0; const discord_js_1 = require("discord.js"); const util_1 = require("./util"); const logger_1 = require("./logger"); /** * Restores the guild configuration */ const loadConfig = (guild, backupData) => { const configPromises = []; if (backupData.name) { configPromises.push(guild.setName(backupData.name)); } if (backupData.iconBase64) { configPromises.push(guild.setIcon(Buffer.from(backupData.iconBase64, 'base64'))); } else if (backupData.iconURL) { configPromises.push(guild.setIcon(backupData.iconURL)); } if (backupData.splashBase64) { configPromises.push(guild.setSplash(Buffer.from(backupData.splashBase64, 'base64'))); } else if (backupData.splashURL) { configPromises.push(guild.setSplash(backupData.splashURL)); } if (backupData.bannerBase64) { configPromises.push(guild.setBanner(Buffer.from(backupData.bannerBase64, 'base64'))); } else if (backupData.bannerURL) { configPromises.push(guild.setBanner(backupData.bannerURL)); } if (backupData.verificationLevel) { configPromises.push(guild.setVerificationLevel(backupData.verificationLevel)); } if (backupData.defaultMessageNotifications) { configPromises.push(guild.setDefaultMessageNotifications(backupData.defaultMessageNotifications)); } const changeableExplicitLevel = guild.features.includes(discord_js_1.GuildFeature.Community); if (backupData.explicitContentFilter && changeableExplicitLevel) { configPromises.push(guild.setExplicitContentFilter(backupData.explicitContentFilter)); } return Promise.all(configPromises); }; exports.loadConfig = loadConfig; /** * Restore the guild roles */ const loadRoles = (guild, backupData) => { const rolePromises = []; backupData.roles.forEach((roleData) => { if (roleData.isEveryone) { rolePromises.push(guild.roles.cache.get(guild.id).edit({ name: roleData.name, color: roleData.color, permissions: BigInt(roleData.permissions), mentionable: roleData.mentionable })); } else { rolePromises.push(guild.roles.create({ name: roleData.name, color: roleData.color, hoist: roleData.hoist, permissions: BigInt(roleData.permissions), mentionable: roleData.mentionable })); } }); return Promise.all(rolePromises); }; exports.loadRoles = loadRoles; /** * Restore the guild channels */ const loadChannels = (guild, backupData, options) => { (0, logger_1.debugLoad)(`Début du chargement des canaux pour le serveur ${guild.name}`); (0, logger_1.debugLoad)(`Nombre de catégories: ${backupData.channels.categories.length}, Nombre de canaux hors catégorie: ${backupData.channels.others.length}`); (0, logger_1.debugLoad)(`Options: ${JSON.stringify(options)}`); const loadChannelPromises = []; // Charger les catégories et leurs canaux enfants backupData.channels.categories.forEach((categoryData) => { (0, logger_1.debugLoad)(`Chargement de la catégorie: ${categoryData.name}`); loadChannelPromises.push(new Promise((resolve) => { (0, util_1.loadCategory)(categoryData, guild).then((createdCategory) => { (0, logger_1.debugLoad)(`Catégorie créée: ${categoryData.name}, Nombre de canaux enfants: ${categoryData.children.length}`); // Créer un tableau de promesses pour les canaux enfants const childPromises = []; categoryData.children.forEach((channelData) => { (0, logger_1.debugLoad)(`Chargement du canal enfant: ${channelData.name} dans la catégorie ${categoryData.name}`); childPromises.push((0, util_1.loadChannel)(channelData, guild, createdCategory, options)); }); // Attendre que tous les canaux enfants soient chargés avant de résoudre la promesse Promise.all(childPromises) .then(() => { (0, logger_1.debugLoad)(`Tous les canaux enfants de la catégorie ${categoryData.name} ont été chargés`); resolve(true); }) .catch((err) => { (0, logger_1.error)(`Erreur lors du chargement des canaux enfants de la catégorie ${categoryData.name}:`, err); resolve(false); }); }); })); }); // Charger les canaux hors catégorie backupData.channels.others.forEach((channelData) => { (0, logger_1.debugLoad)(`Chargement du canal hors catégorie: ${channelData.name}`); loadChannelPromises.push((0, util_1.loadChannel)(channelData, guild, null, options)); }); (0, logger_1.debugLoad)(`Nombre total de promesses de chargement de canaux: ${loadChannelPromises.length}`); return Promise.all(loadChannelPromises); }; exports.loadChannels = loadChannels; /** * Restore the afk configuration */ const loadAFK = (guild, backupData) => { const afkPromises = []; if (backupData.afk) { afkPromises.push(guild.setAFKChannel(guild.channels.cache.find((ch) => ch.name === backupData.afk.name && ch.type === discord_js_1.ChannelType.GuildVoice))); afkPromises.push(guild.setAFKTimeout(backupData.afk.timeout)); } return Promise.all(afkPromises); }; exports.loadAFK = loadAFK; /** * Restore guild emojis */ const loadEmojis = (guild, backupData) => { const emojiPromises = []; backupData.emojis.forEach((emoji) => { if (emoji.url) { emojiPromises.push(guild.emojis.create({ name: emoji.name, attachment: emoji.url })); } else if (emoji.base64) { emojiPromises.push(guild.emojis.create({ name: emoji.name, attachment: Buffer.from(emoji.base64, 'base64') })); } }); return Promise.all(emojiPromises); }; exports.loadEmojis = loadEmojis; /** * Restore guild bans */ const loadBans = (guild, backupData) => { const banPromises = []; backupData.bans.forEach((ban) => { banPromises.push(guild.members.ban(ban.id, { reason: ban.reason })); }); return Promise.all(banPromises); }; exports.loadBans = loadBans; /** * Restore embedChannel configuration */ const loadEmbedChannel = (guild, backupData) => { const embedChannelPromises = []; if (backupData.widget.channel) { embedChannelPromises.push(guild.setWidgetSettings({ enabled: backupData.widget.enabled, channel: guild.channels.cache.find((ch) => ch.name === backupData.widget.channel) })); } return Promise.all(embedChannelPromises); }; exports.loadEmbedChannel = loadEmbedChannel;