Files
Arthur Puechberty 95cd796839 refonte css of site
2026-01-17 20:59:52 +01:00

107 lines
5.2 KiB
JavaScript

const levelEnabled = document.getElementById("level-enabled");
const levelAnnouncementsEnabled = document.getElementById("level-announcement-enabled");
const levelAnnouncementsChannel = document.getElementById("level-announcements-channel");
const levelAnnouncementsMessage = document.getElementById("level-announcements-message");
const xpCourbeType = document.getElementById("level-xp-curve-type");
const multiplierCourbeForLevel = document.getElementById("level-xp-multiplier");
const levelAnnouncementEveryLevel = document.getElementById("level-announcement-every");
const levelMax = document.getElementById("level-max-level");
const roleWithWithoutType = document.getElementById("level-role-with-or-without-xp-type");
const roleWithWithoutXp = document.getElementById("level-role-with-or-without-xp");
const salonWithWithoutType = document.getElementById("level-channel-with-or-without-xp-type");
const salonWithWithoutXp = document.getElementById("level-channel-with-or-without-xp");
const gainXpOnMessage = document.getElementById("message-xp-enabled");
const gainXpMessageLowerBound = document.getElementById("level-xp-per-message-min");
const gainXpMessageUpperBound = document.getElementById("level-xp-per-message-max");
const cooldownXpMessageSeconds = document.getElementById("level-xp-cooldown");
const gainXpOnVoice = document.getElementById("voice-xp-enabled");
const gainVoiceXpLowerBound = document.getElementById("level-xp-per-voice-min");
const gainVoiceXpUpperBound = document.getElementById("level-xp-per-voice-max");
const saveLevel = document.getElementById("save-level");
// Message par défaut
const defaultLevelMessage = "Félicitations {mention}, tu es maintenant niveau **{level}** ! 🎉";
// Charger la config après que les channels/roles soient chargés
setTimeout(() => {
fetch(`/api/bot/get-level-config/${guildId}`)
.then(res => res.json())
.then(cfg => {
levelEnabled.checked = cfg.enabled;
levelAnnouncementsEnabled.checked = cfg.levelAnnouncementsEnabled;
levelAnnouncementsChannel.value = cfg.levelAnnouncementsChannelId;
levelAnnouncementsMessage.value = cfg.levelAnnouncementsMessage || defaultLevelMessage;
xpCourbeType.value = cfg.xpCourbeType;
multiplierCourbeForLevel.value = cfg.multiplierCourbeForLevel;
levelAnnouncementEveryLevel.value = cfg.levelAnnouncementEveryLevel;
levelMax.value = cfg.levelMax;
roleWithWithoutType.value = cfg.roleWithWithoutType;
Array.from(roleWithWithoutXp.options).forEach(opt => {
opt.selected = cfg.roleWithWithoutXp?.includes(opt.value);
});
salonWithWithoutType.value = cfg.salonWithWithoutType;
Array.from(salonWithWithoutXp.options).forEach(opt => {
opt.selected = cfg.salonWithWithoutXp?.includes(opt.value);
});
gainXpOnMessage.checked = cfg.gainXpOnMessage;
gainXpMessageLowerBound.value = cfg.gainXpMessageLowerBound;
gainXpMessageUpperBound.value = cfg.gainXpMessageUpperBound;
cooldownXpMessageSeconds.value = cfg.cooldownXpMessageSeconds;
gainXpOnVoice.checked = cfg.gainXpOnVoice;
gainVoiceXpLowerBound.value = cfg.gainVoiceXpLowerBound;
gainVoiceXpUpperBound.value = cfg.gainVoiceXpUpperBound;
})
.catch(console.error);
}, 500);
// Sauvegarder
saveLevel.addEventListener("click", async () => {
saveLevel.disabled = true;
saveLevel.textContent = "Sauvegarde...";
try {
const res = await fetch("/api/bot/save-level-config", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
guildId,
levelEnabled: levelEnabled.checked,
levelAnnouncementsEnabled: levelAnnouncementsEnabled.checked,
levelAnnouncementsChannelId: levelAnnouncementsChannel.value,
levelAnnouncementsMessage: levelAnnouncementsMessage.value,
xpCourbeType: xpCourbeType.value,
multiplierCourbeForLevel: parseInt(multiplierCourbeForLevel.value, 10),
levelAnnouncementEveryLevel: parseInt(levelAnnouncementEveryLevel.value, 10),
levelMax: parseInt(levelMax.value, 10),
roleWithWithoutType: roleWithWithoutType.value,
roleWithWithoutXp: Array.from(roleWithWithoutXp.selectedOptions).map(opt => opt.value),
salonWithWithoutType: salonWithWithoutType.value,
salonWithWithoutXp: Array.from(salonWithWithoutXp.selectedOptions).map(opt => opt.value),
gainXpOnMessage: gainXpOnMessage.checked,
gainXpMessageLowerBound: parseInt(gainXpMessageLowerBound.value, 10),
gainXpMessageUpperBound: parseInt(gainXpMessageUpperBound.value, 10),
cooldownXpMessageSeconds: parseInt(cooldownXpMessageSeconds.value, 10),
gainXpOnVoice: gainXpOnVoice.checked,
gainVoiceXpLowerBound: parseInt(gainVoiceXpLowerBound.value, 10),
gainVoiceXpUpperBound: parseInt(gainVoiceXpUpperBound.value, 10)
})
});
const data = await res.json();
if (data.success) {
showStatus("status-level-form", "Configuration sauvegardée ✅", "success");
} else {
showStatus("status-level-form", "Erreur lors de la sauvegarde ❌", "error");
}
} catch (error) {
showStatus("status-level-form", "Erreur de connexion ❌", "error");
}
saveLevel.disabled = false;
saveLevel.textContent = "Sauvegarder";
});