Repository navigation
Expand file tree
/
Copy pathstats.js
More file actions
142 lines (123 loc) · 4.43 KB
/
Copy pathstats.js
File metadata and controls
142 lines (123 loc) · 4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
const mysql = require('mysql2/promise');
const axios = require('axios');
const fs = require('fs');
const connection = mysql.createPool({
host: 'localhost',
user: 'username',
password: 'password',
database: 'databse'
});
const permissionPriority = {
'default': 0,
'mercenary': 1,
'ghost': 2,
'staff': 3,
'mod': 4,
'admin': 5
};
async function getAllPlayers() {
try {
const query = `
SELECT SUBSTRING_INDEX(name, '::', -1) AS uuid, CAST(SUBSTRING_INDEX(name, '::', 1) AS CHAR) AS variable, CAST(value AS UNSIGNED) AS value
FROM openwar
WHERE name LIKE 'levels::%';
`;
const [rows] = await connection.query(query);
return rows;
} catch (error) {
console.error('Erreur lors de la récupération des joueurs :', error.message);
return [];
}
}
async function getUsernameFromUUID(uuid) {
try {
const url = `https://sessionserver.mojang.com/session/minecraft/profile/${uuid}`;
const response = await axios.get(url);
return response.data.name;
} catch (error) {
console.error(`Erreur lors de la récupération du nom d'utilisateur pour l'UUID ${uuid} : ${error.message}`);
return null;
}
}
async function fetchStatsForPlayer(uuid, username) {
const variables = ['levels', 'kills', 'deaths', 'perte', 'gain'];
const stats = {};
for (const variable of variables) {
try {
let result;
if (variable === 'perte' || variable === 'gain') {
[result] = await connection.query(`SELECT value FROM openwar WHERE name = ?`, [`${variable}::${username}`]);
} else {
[result] = await connection.query(`SELECT value FROM openwar WHERE name = ?`, [`${variable}::${uuid}`]);
}
stats[variable] = result.length > 0 ? parseInt(result[0].value.toString('hex'), 16) : 0;
} catch (error) {
console.error(`Erreur lors de la récupération des ${variable} pour ${variable === 'perte' || variable === 'gain' ? 'le pseudo' : 'l\'UUID'} ${variable === 'perte' || variable === 'gain' ? username : uuid} : ${error.message}`);
stats[variable] = 0;
}
}
return stats;
}
async function getPermissionForPlayer(uuid) {
try {
const query = `
SELECT permission
FROM luckperms_user_permissions
WHERE uuid = ?;
`;
const [rows] = await connection.query(query, [uuid]);
if (rows.length === 0) {
return 'default';
}
// permissions
rows.sort((a, b) => permissionPriority[b.permission.split('.')[1]] - permissionPriority[a.permission.split('.')[1]]);
return rows[0].permission.split('.')[1];
} catch (error) {
console.error(`Erreur lors de la récupération des permissions pour l'UUID ${uuid} : ${error.message}`);
return 'default';
}
}
async function main() {
const allPlayers = await getAllPlayers();
const playerData = [];
for (const player of allPlayers) {
const { uuid, value: levels } = player;
const username = await getUsernameFromUUID(uuid);
const stats = await fetchStatsForPlayer(uuid, username);
const permission = await getPermissionForPlayer(uuid);
playerData.push({
name: username,
uuid: uuid,
level: stats.levels,
kills: stats.kills,
deaths: stats.deaths,
casinoPerte: stats.perte,
casinoGain: stats.gain,
permission: permission
});
}
// filtre
playerData.sort((a, b) => b.level - a.level);
const top10Players = playerData.slice(0, 10);
const secondPlayer = top10Players.splice(1, 1)[0];
top10Players.unshift(secondPlayer);
const temp = top10Players[0];
top10Players[0] = top10Players[2];
top10Players[2] = temp;
const finalPlayerData = top10Players.map((player, index) => {
if (index < 3) {
return {
...player,
skinURL: `https://mc-heads.net/body/${player.uuid}/right`
};
} else {
return {
...player,
headURL: `https://minotar.net/avatar/${player.uuid}`
};
}
});
fs.writeFileSync('src/public/json/playerData.json', JSON.stringify(finalPlayerData, null, 2));
console.log('data created');
}
module.exports = { main };