Fixed leadboard slicing wrong end of list, allowing points lookup by username.
This commit is contained in:
parent
1843a5b5b3
commit
76210411f8
22
src/app.js
22
src/app.js
|
@ -72,10 +72,14 @@ async function setPoints(defaultKey, user, value, { mode = 'add', key } = {}) {
|
||||||
await fs.writeFile(`./points-${instance}.json`, JSON.stringify(points, null, 4));
|
await fs.writeFile(`./points-${instance}.json`, JSON.stringify(points, null, 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPoints(game, { user, room, command }) {
|
function getPoints(game, username, { user, room, command }) {
|
||||||
const userPoints = (points[command] || points[game.key])?.[`${user.id}:${user.username}`];
|
const gamePoints = points[command] || points[game.key];
|
||||||
|
|
||||||
game.sendMessage(`You have scored **${userPoints || 0}** points in ${game.name}, @${user.username}`, room.id);
|
const userPoints = username
|
||||||
|
? Object.entries(gamePoints || {}).find(([identifier]) => identifier.split(':')[1] === username)?.[1]
|
||||||
|
: gamePoints?.[`${user?.id}:${user?.username}`];
|
||||||
|
|
||||||
|
game.sendMessage(`${username ? `**${username}** has` : 'You have'} scored **${userPoints || 0}** points in ${game.name}, @${user.username}`, room.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLeaderboard(game, { user, room, command }) {
|
function getLeaderboard(game, { user, room, command }) {
|
||||||
|
@ -93,7 +97,7 @@ function getLeaderboard(game, { user, room, command }) {
|
||||||
const username = userKey.split(':')[1];
|
const username = userKey.split(':')[1];
|
||||||
return `**${username === user.username ? '@' : ''}${username}** at **${score}** points`;
|
return `**${username === user.username ? '@' : ''}${username}** at **${score}** points`;
|
||||||
})
|
})
|
||||||
.slice(-10)
|
.slice(0, 10)
|
||||||
.join(', ');
|
.join(', ');
|
||||||
|
|
||||||
game.sendMessage(`The top ${Math.min(Object.keys(leaderboard).length, 10)} *${game.name}* players are: ${curatedLeaderboard}`, room.id);
|
game.sendMessage(`The top ${Math.min(Object.keys(leaderboard).length, 10)} *${game.name}* players are: ${curatedLeaderboard}`, room.id);
|
||||||
|
@ -140,20 +144,20 @@ function onMessage(message, bot, games) {
|
||||||
const user = bot.users[message.userId] || message.user;
|
const user = bot.users[message.userId] || message.user;
|
||||||
const room = bot.rooms[message.roomId];
|
const room = bot.rooms[message.roomId];
|
||||||
|
|
||||||
|
if (command) {
|
||||||
|
const args = body.split(/\s+/).slice(1);
|
||||||
|
const game = games[command];
|
||||||
|
|
||||||
if (['leaderboard', 'lead', 'leader', 'leaders', 'scoreboard', 'best'].includes(subcommand) && games[command]) {
|
if (['leaderboard', 'lead', 'leader', 'leaders', 'scoreboard', 'best'].includes(subcommand) && games[command]) {
|
||||||
getLeaderboard(games[command], { user, room, command });
|
getLeaderboard(games[command], { user, room, command });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (['points', 'score'].includes(subcommand) && games[command]) {
|
if (['points', 'score'].includes(subcommand) && games[command]) {
|
||||||
getPoints(games[command], { user, room, command });
|
getPoints(games[command], args[0], { user, room, command });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command) {
|
|
||||||
const args = body.split(/\s+/).slice(1);
|
|
||||||
const game = games[command];
|
|
||||||
|
|
||||||
if (game && game.onCommand) {
|
if (game && game.onCommand) {
|
||||||
if (user) {
|
if (user) {
|
||||||
user.points = points[game.key]?.[`${user.id}:${user.username}`] || 0;
|
user.points = points[game.key]?.[`${user.id}:${user.username}`] || 0;
|
||||||
|
|
Loading…
Reference in New Issue