This commit is contained in:
Louis Mazin 2025-12-08 21:57:35 +01:00
parent ac461cc3fb
commit 156690a4f0
4 changed files with 37 additions and 28 deletions

View File

@ -39,7 +39,7 @@ module.exports = {
embed.addFields({ embed.addFields({
name: `👤 ${discordName}`, name: `👤 ${discordName}`,
value: `🎮 Palworld: **${link.palworld_username}**\n🆔 Steam ID: \`${link.steam_id}\`\n📅 Lié le: ${new Date(link.linked_at).toLocaleDateString('fr-FR')}`, value: `🎮 Palworld: **${link.palworld_username}**\n🆔 Steam ID: \`${link.steam_id}\`\n🎯 Player ID: \`${link.player_id || 'N/A'}\`\n📅 Lié le: ${new Date(link.linked_at).toLocaleDateString('fr-FR')}`,
inline: false inline: false
}); });
} }

View File

@ -34,17 +34,21 @@ module.exports = {
}); });
const players = response.data.players || {}; const players = response.data.players || {};
let steamId = null; let playerData = null;
// Chercher le joueur par nom // Chercher le joueur par nom
for (const [id, player] of Object.entries(players)) { for (const [id, player] of Object.entries(players)) {
if (player.name === palworldName) { if (player.name === palworldName) {
steamId = id; playerData = {
steamId: player.userId.replace('steam_', ''),
playerId: player.playerId,
name: player.name
};
break; break;
} }
} }
if (!steamId) { if (!playerData) {
return interaction.editReply({ return interaction.editReply({
content: `❌ Impossible de trouver le joueur **${palworldName}** sur le serveur.\n\n` + content: `❌ Impossible de trouver le joueur **${palworldName}** sur le serveur.\n\n` +
`💡 Le joueur doit être connecté sur le serveur Palworld.`, `💡 Le joueur doit être connecté sur le serveur Palworld.`,
@ -57,7 +61,7 @@ module.exports = {
const code = await generateLinkCode(discordUser.id); const code = await generateLinkCode(discordUser.id);
// Effectuer la liaison immédiatement // Effectuer la liaison immédiatement
const result = await verifyLinkCode(code, steamId, palworldName); const result = await verifyLinkCode(code, playerData.steamId, playerData.name, playerData.playerId);
if (result.success) { if (result.success) {
await updateUserLinkWithUsername(discordUser.id, discordUser.tag); await updateUserLinkWithUsername(discordUser.id, discordUser.tag);
@ -68,7 +72,8 @@ module.exports = {
.addFields( .addFields(
{ name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, inline: false }, { name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, inline: false },
{ name: '🎮 Palworld', value: palworldName, inline: true }, { name: '🎮 Palworld', value: palworldName, inline: true },
{ name: '🆔 Steam ID', value: `\`${steamId}\``, inline: true } { name: '🆔 Steam ID', value: `\`${playerData.steamId}\``, inline: true },
{ name: '🎯 Player ID', value: `\`${playerData.playerId}\``, inline: false }
) )
.setTimestamp(); .setTimestamp();
@ -76,8 +81,9 @@ module.exports = {
await discordUser.send( await discordUser.send(
`✅ **Liaison effectuée par un administrateur**\n\n` + `✅ **Liaison effectuée par un administrateur**\n\n` +
`Votre compte Discord a été lié à votre compte Palworld:\n` + `Votre compte Discord a été lié à votre compte Palworld:\n` +
`🎮 Nom Palworld: **${palworldName}**\n` + `🎮 Nom Palworld: **${playerData.name}**\n` +
`🆔 Steam ID: \`${steamId}\`` `🆔 Steam ID: \`${playerData.steamId}\`\n` +
`🎯 Player ID: \`${playerData.playerId}\``
).catch(() => {}); ).catch(() => {});
await interaction.editReply({ embeds: [embed], ephemeral: true }); await interaction.editReply({ embeds: [embed], ephemeral: true });

View File

@ -46,11 +46,15 @@ const getSteamIdFromPlayerName = async (playerName) => {
}); });
const players = response.data.players || {}; const players = response.data.players || {};
console.log(players);
// Chercher le joueur par nom // Chercher le joueur par nom
for (const [steamId, player] of Object.entries(players)) { for (const [steamId, player] of Object.entries(players)) {
if (player.name === playerName) { if (player.name === playerName) {
return steamId; return {
steamId: player.userId.replace('steam_', ''),
playerId: player.playerId,
name: player.name
};
} }
} }
@ -61,16 +65,15 @@ const getSteamIdFromPlayerName = async (playerName) => {
} }
}; };
const handleLinkCommand = async (playerName, steamId, code) => { const handleLinkCommand = async (playerName, playerData, code) => {
try { try {
console.log(`🔗 Tentative de liaison détectée: ${playerName} (${steamId}) avec le code ${code}`); console.log(`🔗 Tentative de liaison détectée: ${playerName} (${playerData.steamId}) avec le code ${code}`);
const result = await verifyLinkCode(code, steamId, playerName); const result = await verifyLinkCode(code, playerData.steamId, playerData.name, playerData.playerId);
if (result.success) { if (result.success) {
console.log(`✅ Liaison réussie pour ${playerName}`); console.log(`✅ Liaison réussie pour ${playerName}`);
// Envoyer un message de confirmation à l'utilisateur Discord
if (client) { if (client) {
const user = await client.users.fetch(result.discordId).catch(() => null); const user = await client.users.fetch(result.discordId).catch(() => null);
if (user) { if (user) {
@ -78,8 +81,9 @@ const handleLinkCommand = async (playerName, steamId, code) => {
await user.send( await user.send(
`✅ **Liaison réussie !**\n\n` + `✅ **Liaison réussie !**\n\n` +
`Votre compte Discord a été lié avec succès à votre compte Palworld:\n` + `Votre compte Discord a été lié avec succès à votre compte Palworld:\n` +
`🎮 Nom Palworld: **${playerName}**\n` + `🎮 Nom Palworld: **${playerData.name}**\n` +
`🆔 Steam ID: \`${steamId}\`` `🆔 Steam ID: \`${playerData.steamId}\`\n` +
`🎯 Player ID: \`${playerData.playerId}\``
).catch(() => {}); ).catch(() => {});
} }
} }
@ -192,16 +196,13 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
const linkData = parseLogMessage(log); const linkData = parseLogMessage(log);
if (linkData) { if (linkData) {
// Récupérer le Steam ID depuis l'API const playerData = await getSteamIdFromPlayerName(linkData.playerName);
const steamId = await getSteamIdFromPlayerName(linkData.playerName);
if (steamId) { if (playerData) {
await handleLinkCommand(linkData.playerName, steamId, linkData.code); await handleLinkCommand(linkData.playerName, playerData, linkData.code);
// Vérifier immédiatement s'il faut fermer la connexion
await checkAndManageWebSocket(); await checkAndManageWebSocket();
} else { } else {
console.log(`❌ Impossible de trouver le Steam ID pour ${linkData.playerName}`); console.log(`❌ Impossible de trouver le Steam ID pour ${linkData.playerName}`);
console.log(`💡 Le joueur doit être connecté sur le serveur`);
} }
} }
} }

View File

@ -53,11 +53,13 @@ const createTables = async () => {
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
discord_id VARCHAR(20) NOT NULL UNIQUE, discord_id VARCHAR(20) NOT NULL UNIQUE,
discord_username VARCHAR(100) NOT NULL, discord_username VARCHAR(100) NOT NULL,
steam_id VARCHAR(20) NOT NULL, steam_id VARCHAR(50) NOT NULL,
player_id VARCHAR(50),
palworld_username VARCHAR(100) NOT NULL, palworld_username VARCHAR(100) NOT NULL,
linked_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, linked_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_discord_id (discord_id), INDEX idx_discord_id (discord_id),
INDEX idx_steam_id (steam_id) INDEX idx_steam_id (steam_id),
INDEX idx_player_id (player_id)
) )
`); `);
@ -77,7 +79,7 @@ const generateLinkCode = async (discordId) => {
return code; return code;
}; };
const verifyLinkCode = async (code, steamId, palworldUsername) => { const verifyLinkCode = async (code, steamId, palworldUsername, playerId = null) => {
const connection = getConnection(); const connection = getConnection();
const [rows] = await connection.execute( const [rows] = await connection.execute(
@ -91,10 +93,10 @@ const verifyLinkCode = async (code, steamId, palworldUsername) => {
const linkData = rows[0]; const linkData = rows[0];
// Créer la liaison // Créer la liaison avec player_id
await connection.execute( await connection.execute(
'INSERT INTO user_links (discord_id, discord_username, steam_id, palworld_username) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE steam_id = ?, palworld_username = ?', 'INSERT INTO user_links (discord_id, discord_username, steam_id, player_id, palworld_username) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE steam_id = ?, player_id = ?, palworld_username = ?',
[linkData.discord_id, 'temp', steamId, palworldUsername, steamId, palworldUsername] [linkData.discord_id, 'temp', steamId, playerId, palworldUsername, steamId, playerId, palworldUsername]
); );
// Marquer le code comme utilisé // Marquer le code comme utilisé