/** * Système de reminder pour les bumps * Vérifie toutes les minutes les bumps qui doivent avoir un reminder 2h après */ const chalk = require('chalk'); module.exports = (client, db) => { setInterval(async () => { try { const now = Date.now(); // Récupérer les bumps qui ont besoin d'un reminder (2h après, avec une fenêtre de 1 minute) const twoHours = 2 * 60 * 60 * 1000; const oneMinute = 60 * 1000; const [bumps] = await db.query( 'SELECT * FROM bumps WHERE reminderSent = ? AND bumpTime <= ? AND bumpTime >= ?', [false, now - twoHours + oneMinute, now - twoHours - oneMinute] ); if (!bumps.length) return; for (const bump of bumps) { try { const guild = client.guilds.cache.get(bump.guildId); if (!guild) { console.warn(chalk.yellow(`⚠️ Impossible d'envoyer le reminder de bump: le bot n'est pas dans la guild ${bump.guildId}`)); continue; } const member = await guild.members.fetch(bump.userId).catch(() => null); if (!member) { console.warn(chalk.yellow(`⚠️ Utilisateur ${bump.userId} introuvable dans la guild ${guild.id}`)); continue; } // Trouver le canal de bump (ou utiliser le canal système) // On cherche dans les canaux de bump configurés, sinon on utilise le canal système const [bumpChannels] = await db.query( 'SELECT * FROM bump_channels WHERE guildId = ?', [bump.guildId] ); let channel = null; if (bumpChannels.length > 0) { // Utiliser le premier canal de bump configuré channel = guild.channels.cache.get(bumpChannels[0].channelId); } // Si pas de canal de bump configuré, utiliser le canal système if (!channel) { channel = guild.systemChannel; } if (!channel) { console.warn(chalk.yellow(`⚠️ Aucun canal disponible pour envoyer le reminder de bump dans la guild ${guild.id}`)); continue; } const { EmbedBuilder } = require('discord.js'); const { colors } = require('../../utils/constants'); const reminderEmbed = new EmbedBuilder() .setTitle('⏰ Rappel de Bump') .setDescription(`${member.toString()}, tu peux maintenant refaire un bump !`) .setColor(colors.info) .setFooter({ text: 'Utilise /bump (Disboard) pour bump le serveur • /bumptime pour vérifier' }) .setTimestamp(); await channel.send({ embeds: [reminderEmbed] }); // Marquer le reminder comme envoyé await db.query( 'UPDATE bumps SET reminderSent = ? WHERE id = ?', [true, bump.id] ); console.log(chalk.green(`✅ Reminder de bump envoyé à ${member.user.tag} dans la guild ${guild.name}`)); } catch (err) { console.error(chalk.red(`❌ Erreur lors de l'envoi du reminder de bump ${bump.id}:`), err); } } } catch (err) { console.error(chalk.red('❌ Erreur lors de la vérification des reminders de bump:'), err); } }, 60 * 1000); // Vérifier toutes les minutes };