Я создал команду лидеров, чтобы получить 20 лучших пользователей с наибольшим количеством очков.
Однако в настоящее время он отображает все это на одной вставке. В будущем, если бы я хотел получить топ-50, в iirc было бы невозможно, чтобы у вас было только 25 полей.
Я хочу создать страницу для каждых 10 пользователей.
Часть этого не имеет смысла, так как я просто пытаюсь получить некоторые идеи о том, как это сделать.
const Discord = require('discord.js');
const sqlite = require('sqlite3').verbose();
const db = new sqlite.Database('./mbot.db', (err) => {
if (err) console.log(err.message);
});
module.exports = {
name: 'leaderboard',
description: 'Get up to 20 users with the most points',
async execute(message, args, client) {
const embeds = [];
for (let i = -1; i < 5; i++) {
embeds.push(new Discord.RichEmbed());
}
for (let i = 0; i < 20; i++) {
if (i < 10) {
embeds[0].addField('usersthings');
} else if (i < 20) {
embeds[1].addField('usersandthings');
}
}
message.channel.send(embeds[0]);
const leaders = await leaderboard(message, client);
return message.channel.send(leaders);
},
};
function leaderboard(message, client) {
return new Promise((resolve) => {
db.all('SELECT points points, id id FROM users ORDER BY points DESC', async (err, rows) => {
if (err) return console.log(err);
const embed = new Discord.RichEmbed().setTitle('Points Leaderboard');
if (!rows.length) return message.channel.send('No users found!');
const each = new Promise(async (resolve) => {
const users = [];
rows.forEach((val, i, arr) => {
users.push({
id: arr[i].id,
points: arr[i].points,
});
});
return resolve(users);
});
let multiplier = 1;
await each.then(async users => {
const pages = Math.floor((users.length + 1) / 10) + 1;
console.log(pages);
for (let i = 0; i < (10 * multiplier); i++) {
if (users[i]) {
const user = await client.fetchUser(users[i].id);
embed.addField(`${i + 1}. ${user.username}`, users[i].points, true);
}
}
});
return resolve(embed);
});
});
}