discord-rebackup
Version:
An rewamped fork of the discord-backup module ! by the iHorizon Team
176 lines (175 loc) • 7.18 kB
JavaScript
;
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;