Update Bot (j'ai plus le repo sur GitHub)
Qui c'est la conne qui a delete le repo sur GitHub? C'EST MOIIIII
This commit is contained in:
70
utils/constants.js
Normal file
70
utils/constants.js
Normal file
@@ -0,0 +1,70 @@
|
||||
module.exports = {
|
||||
// Couleurs pour les embeds (Discord Brand Colors + Custom)
|
||||
colors: {
|
||||
// Couleurs principales
|
||||
primary: '#5865F2', // Discord Blurple
|
||||
success: '#57F287', // Discord Green
|
||||
error: '#ED4245', // Discord Red
|
||||
warning: '#FEE75C', // Discord Yellow
|
||||
info: '#5865F2', // Discord Blurple
|
||||
|
||||
// Couleurs de modération
|
||||
moderation: '#ED4245',
|
||||
ban: '#ED4245',
|
||||
unban: '#57F287',
|
||||
kick: '#FEE75C',
|
||||
warn: '#FEE75C',
|
||||
mute: '#FFA500',
|
||||
unmute: '#57F287',
|
||||
timeout: '#FF6B6B',
|
||||
|
||||
// Couleurs spéciales
|
||||
xp: '#9B59B6', // Purple pour XP
|
||||
info: '#3498DB', // Blue pour info
|
||||
utility: '#1ABC9C', // Turquoise pour utility
|
||||
dev: '#E74C3C', // Red pour dev
|
||||
},
|
||||
|
||||
// Emojis pour les embeds
|
||||
emojis: {
|
||||
// Statuts
|
||||
success: '✅',
|
||||
error: '❌',
|
||||
warning: '⚠️',
|
||||
info: 'ℹ️',
|
||||
|
||||
// Modération
|
||||
ban: '🔨',
|
||||
unban: '🔓',
|
||||
kick: '👢',
|
||||
warn: '⚠️',
|
||||
mute: '🔇',
|
||||
unmute: '🔊',
|
||||
timeout: '⏱️',
|
||||
|
||||
// XP & Niveaux
|
||||
level: '⭐',
|
||||
xp: '💎',
|
||||
rank: '🏆',
|
||||
leaderboard: '📊',
|
||||
|
||||
// Informations
|
||||
user: '👤',
|
||||
server: '🖥️',
|
||||
avatar: '🖼️',
|
||||
profile: '📋',
|
||||
|
||||
// Utilitaires
|
||||
ping: '🏓',
|
||||
help: '📚',
|
||||
settings: '⚙️',
|
||||
|
||||
// Autres
|
||||
calendar: '📅',
|
||||
clock: '⏰',
|
||||
id: '🆔',
|
||||
reason: '📝',
|
||||
moderator: '👮',
|
||||
},
|
||||
};
|
||||
|
||||
103
utils/helpers.js
Normal file
103
utils/helpers.js
Normal file
@@ -0,0 +1,103 @@
|
||||
const ms = require('ms');
|
||||
|
||||
/**
|
||||
* Parse une durée en string (ex: "1h", "2d") en millisecondes
|
||||
* @param {string} duration - Durée à parser
|
||||
* @returns {number|null} - Durée en millisecondes ou null si invalide
|
||||
*/
|
||||
function parseDuration(duration) {
|
||||
if (!duration) return null;
|
||||
try {
|
||||
return ms(duration);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Formate une durée en millisecondes en string lisible
|
||||
* @param {number} ms - Durée en millisecondes
|
||||
* @returns {string} - Durée formatée
|
||||
*/
|
||||
function formatDuration(ms) {
|
||||
if (!ms || ms < 0) return 'Permanent';
|
||||
const seconds = Math.floor(ms / 1000) % 60;
|
||||
const minutes = Math.floor(ms / (1000 * 60)) % 60;
|
||||
const hours = Math.floor(ms / (1000 * 60 * 60)) % 24;
|
||||
const days = Math.floor(ms / (1000 * 60 * 60 * 24));
|
||||
const months = Math.floor(ms / (1000 * 60 * 60 * 24 * 30));
|
||||
const years = Math.floor(ms / (1000 * 60 * 60 * 24 * 365));
|
||||
|
||||
if (years) return `${years} Année${years > 1 ? 's' : ''}`;
|
||||
if (months) return `${months} Mois`;
|
||||
if (days) return `${days} Jour${days > 1 ? 's' : ''}`;
|
||||
if (hours) return `${hours} Heure${hours > 1 ? 's' : ''}`;
|
||||
if (minutes) return `${minutes} Minute${minutes > 1 ? 's' : ''}`;
|
||||
if (seconds) return `${seconds} Seconde${seconds > 1 ? 's' : ''}`;
|
||||
return 'Instantané';
|
||||
}
|
||||
|
||||
/**
|
||||
* Formate l'uptime en string lisible
|
||||
* @param {number} seconds - Uptime en secondes
|
||||
* @returns {string} - Uptime formaté
|
||||
*/
|
||||
function formatUptime(seconds) {
|
||||
const days = Math.floor(seconds / 86400);
|
||||
const hours = Math.floor((seconds % 86400) / 3600);
|
||||
const minutes = Math.floor((seconds % 3600) / 60);
|
||||
const secs = Math.floor(seconds % 60);
|
||||
|
||||
if (days > 0) return `${days}j ${hours}h ${minutes}m ${secs}s`;
|
||||
if (hours > 0) return `${hours}h ${minutes}m ${secs}s`;
|
||||
if (minutes > 0) return `${minutes}m ${secs}s`;
|
||||
return `${secs}s`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trouve un canal de logs dans une guild avec vérification des permissions
|
||||
* @param {Guild} guild - La guild Discord
|
||||
* @returns {TextChannel|null} - Le canal de logs ou null
|
||||
*/
|
||||
function findLogChannel(guild) {
|
||||
const logChannel = guild.channels.cache.find(ch => ch.name === 'logs' && ch.isTextBased());
|
||||
if (!logChannel) return null;
|
||||
|
||||
// Vérifier que le bot a les permissions pour envoyer des messages
|
||||
const botMember = guild.members.me;
|
||||
if (!botMember) return null;
|
||||
|
||||
const permissions = logChannel.permissionsFor(botMember);
|
||||
if (!permissions || !permissions.has(['ViewChannel', 'SendMessages', 'EmbedLinks'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return logChannel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Envoie un log dans le canal de logs de manière sécurisée
|
||||
* @param {Guild} guild - La guild Discord
|
||||
* @param {Object} embedData - Les données de l'embed à envoyer
|
||||
* @returns {Promise<boolean>} - true si envoyé, false sinon
|
||||
*/
|
||||
async function sendLog(guild, embedData) {
|
||||
const logChannel = findLogChannel(guild);
|
||||
if (!logChannel) return false;
|
||||
|
||||
try {
|
||||
await logChannel.send(embedData);
|
||||
return true;
|
||||
} catch (err) {
|
||||
console.warn('⚠️ Impossible d\'envoyer le log dans le canal de logs:', err.message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
parseDuration,
|
||||
formatDuration,
|
||||
formatUptime,
|
||||
sendLog,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user