From 1ebbeaa0258ef5398a5646810783ab6ed3b4da64 Mon Sep 17 00:00:00 2001 From: UltraLionFr Date: Thu, 28 Aug 2025 16:40:46 +0200 Subject: [PATCH] feat: Ajout message automatique horaire d'ouverture QCSTD --- config.yml | 23 +++++++++- events/clients/scheduleMessage.js | 74 +++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 events/clients/scheduleMessage.js diff --git a/config.yml b/config.yml index c072e0c..0c69888 100644 --- a/config.yml +++ b/config.yml @@ -127,4 +127,25 @@ TicketAlert: # - "1h" = 1 heure # - "12h" = 12 heures # - "1d" = 1 jour - # Après ce délai, si personne n'annule le ticket se ferme automatiquement \ No newline at end of file + # Après ce délai, si personne n'annule le ticket se ferme automatiquement + + +# ========================= +# Horaires d'ouverture +# ========================= +Schedule: + Channel: "1387043509600522360" # ID du salon où envoyer l’embed + WebsiteURL: "https://quantumcraft-studios.com" + InfoMessages: + - "🔴 Le support peut avoir un délai de réponse prolongé durant le week-end." + - "✅ Aucune fermeture exceptionnelle prévue cette semaine." + - "📌 Mise à jour quotidienne automatique avec le jour actuel." + + Hours: + Lundi: "09:00–12:00, 14:00–17:00" + Mardi: "09:00–12:00, 14:00–17:00" + Mercredi: "09:00–12:00, 14:00–17:00" + Jeudi: "09:00–12:00, 14:00–17:00" + Vendredi: "09:00–12:00, 14:00–17:00" + Samedi: "09:00–12:00, 14:00–17:00" + Dimanche: "09:00–12:00, 14:00–17:00" \ No newline at end of file diff --git a/events/clients/scheduleMessage.js b/events/clients/scheduleMessage.js new file mode 100644 index 0000000..f10ed82 --- /dev/null +++ b/events/clients/scheduleMessage.js @@ -0,0 +1,74 @@ +const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js"); +const cron = require("node-cron"); +const { config } = require("../../handlers/configLoader"); +const logger = require("../../handlers/logger"); // ✅ On utilise ton logger + +// --- Fonction pour générer l'embed --- +function generateScheduleEmbed() { + const horaires = config.Schedule.Hours; + const infoMessages = config.Schedule.InfoMessages || []; + const now = new Date(); + const jours = Object.keys(horaires); + const jourActuel = jours[now.getDay() === 0 ? 6 : now.getDay() - 1]; // lundi=0, dimanche=6 + + let desc = ""; + for (const jour of jours) { + if (jour === jourActuel) { + desc += `➡️ **${jour} ${horaires[jour]}**\n`; + } else { + desc += `**${jour}** ${horaires[jour]}\n`; + } + } + + const embed = new EmbedBuilder() + .setColor(0x5865f2) + .setTitle("🕒 Horaires d'ouverture") + .setDescription(desc) + .addFields({ + name: "ℹ Informations", + value: infoMessages.join("\n"), + }) + .setFooter({ + text: `© ${new Date().getFullYear()} Quantumcraft Studios — Mise à jour automatique`, + }) + .setTimestamp(now); + + const row = new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setLabel("🌐 Visitez notre site") + .setStyle(ButtonStyle.Link) + .setURL(config.Schedule.WebsiteURL || "https://quantumcraft-studios.com") + ); + + return { embeds: [embed], components: [row] }; +} + +module.exports = { + name: "clientReady", + once: true, + async execute(client) { + const channelId = config.Schedule.Channel; + const channel = await client.channels.fetch(channelId).catch(() => null); + + if (!channel) { + return logger.error("❌ Impossible de trouver le salon défini dans config.Schedule.Channel"); + } + + // Envoi initial + let sentMessage = await channel.send(generateScheduleEmbed()); + logger.success("✅ Message des horaires envoyé avec succès"); + + // Mise à jour chaque jour à minuit + cron.schedule("0 0 * * *", async () => { + try { + await sentMessage.edit(generateScheduleEmbed()); + logger.info("🔄 Message des horaires mis à jour (00h00)"); + } catch { + sentMessage = await channel.send(generateScheduleEmbed()); + logger.warn("⚠️ Ancien message supprimé, nouveau message envoyé pour les horaires"); + } + }); + + logger.success("✅ Gestion automatique des horaires activée !"); + }, +};