80 lines
3.4 KiB
JavaScript
80 lines
3.4 KiB
JavaScript
const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js');
|
|
const { getAllLinks } = require('../../database.js');
|
|
|
|
module.exports = {
|
|
data: new SlashCommandBuilder()
|
|
.setName('afficher-lies')
|
|
.setDescription('Afficher tous les comptes liés'),
|
|
|
|
async execute(interaction) {
|
|
try {
|
|
await interaction.deferReply({});
|
|
|
|
const links = await getAllLinks();
|
|
|
|
if (links.length === 0) {
|
|
return interaction.editReply({
|
|
content: '📝 Aucun compte lié pour le moment.',
|
|
flags: MessageFlags.Ephemeral
|
|
});
|
|
}
|
|
|
|
const embeds = [];
|
|
const FIELDS_PER_EMBED = 24; // Maximum 25 fields par embed, on garde une marge
|
|
|
|
// Diviser les liens en chunks de 24 pour respecter la limite Discord
|
|
for (let i = 0; i < links.length; i += FIELDS_PER_EMBED) {
|
|
const chunk = links.slice(i, i + FIELDS_PER_EMBED);
|
|
|
|
const embed = new EmbedBuilder()
|
|
.setColor(0x0099FF)
|
|
.setTitle(i === 0 ? '🔗 Liste des comptes liés' : null)
|
|
.setDescription(i === 0 ? `Total: **${links.length}** compte(s) lié(s)` : null)
|
|
// si c'est le dernier embed, on met la date actuelle
|
|
.setTimestamp(i + FIELDS_PER_EMBED >= links.length ? new Date() : null);
|
|
|
|
for (const link of chunk) {
|
|
const user = await interaction.client.users.fetch(link.discord_id).catch(() => null);
|
|
const discordName = user ? (user.globalName ? user.globalName : user.username) : link.discord_username;
|
|
const discordMention = `<@${link.discord_id}>`;
|
|
|
|
// Calculer le temps depuis la dernière connexion
|
|
let lastConnectionText = '';
|
|
if (link.lastConnection) {
|
|
const lastConn = new Date(link.lastConnection);
|
|
const now = new Date();
|
|
const diffMs = now - lastConn;
|
|
const diffMinutes = Math.floor(diffMs / 60000);
|
|
const diffHours = Math.floor(diffMs / 3600000);
|
|
const diffDays = Math.floor(diffMs / 86400000);
|
|
|
|
if (diffMinutes < 60) {
|
|
lastConnectionText = ` - ${diffMinutes}min ago`;
|
|
} else if (diffHours < 24) {
|
|
lastConnectionText = ` - ${diffHours}h ago`;
|
|
} else {
|
|
lastConnectionText = ` - ${diffDays}d ago`;
|
|
}
|
|
}
|
|
|
|
embed.addFields({
|
|
name: `👤 ${discordName} - ${discordMention}`,
|
|
value: `🎮 ${link.palworld_username}${lastConnectionText}`
|
|
});
|
|
}
|
|
|
|
embeds.push(embed);
|
|
}
|
|
|
|
await interaction.editReply({ embeds });
|
|
|
|
} catch (error) {
|
|
console.error('Erreur lors de la récupération des liaisons:', error);
|
|
await interaction.editReply({
|
|
content: '❌ Une erreur est survenue lors de la récupération des liaisons.',
|
|
flags: MessageFlags.Ephemeral
|
|
});
|
|
}
|
|
},
|
|
};
|