couteau_suisse/commands/utility/afficher-lies.js
2026-01-28 12:27:07 +01:00

66 lines
2.7 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}>`;
// date de la dernière connexion formatée pour affichage discord
const lastConnectionText = link.lastConnection
? `<t:${Math.floor(new Date(link.lastConnection).getTime() / 1000)}:f>`
: 'Jamais connecté';
embed.addFields({
name: `👤 ${discordName} - 🎮 ${link.palworld_username} - ${lastConnectionText}`,
value: `${discordMention}`
});
}
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
});
}
},
};