Added Leaderboard to Quotes

This commit is contained in:
DeSqBlocki
2024-09-07 15:24:56 +02:00
parent d7c3bdb5f7
commit 3fc1ac1d54
20 changed files with 804 additions and 93 deletions
@@ -0,0 +1,70 @@
const { EmbedBuilder, ButtonBuilder, ButtonStyle, ActionRowBuilder } = require('discord.js');
const { mClient } = require('../..'); // Adjust the path as needed
function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
module.exports = {
name: 'quotes_leaderboard_right',
description: 'Navigate right through the quotes leaderboard',
async execute(interaction) {
await interaction.deferReply()
const db = mClient.db(process.env.M_DB)
const quotesColl = db.collection('quotes')
const maxValue = await quotesColl.countDocuments({ $and: [{ guildID: interaction.guild.id }, { count: { $gt: 0 } }] })
let skip = interaction.message.embeds[0].data.fields[0].value.split('.')
skip = Number(skip[0]) +4
if (skip >= (maxValue - (maxValue % 5))) {
skip = maxValue - (maxValue % 5)
}
const quotesData = await quotesColl.find({ count: { $gt: 0 } }).sort({ count: -1, messageID: -1 }).skip(skip).limit(5).toArray()
const fields = []
const guild = await interaction.client.guilds.fetch(interaction.guild.id)
quotesData.forEach(async (data, index) => {
let channel = await guild.channels.fetch(data.channelID)
let message = await channel.messages.fetch(data.messageID)
await delay(500)
fields.push({
name: `\u200b`,
value: `${skip + index + 1}. [#${data.messageID}](https://discord.com/channels/${data.guildID}/${data.channelID}/${data.messageID})\r\n**by** <@${data.by}> • ⭐ ${data.count}\r\n${message.content}`
})
})
await delay(5000)
console.log(fields)
const embed = new EmbedBuilder()
.setTitle('- Quotes Leaderboard -')
.setThumbnail('https://cdn.discordapp.com/attachments/1152723542836772914/1152940755539722240/pngwing.com.png')
.setFields(fields)
.setColor('#5865F2') // Discord's blurple color
.setFooter({ text: 'Use ◄ ► to navigate' });
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setLabel('◄')
.setStyle(ButtonStyle.Primary)
.setCustomId('quotes_leaderboard_left')
.setDisabled(skip - 6 < 0)
)
.addComponents(
new ButtonBuilder()
.setLabel('X')
.setStyle(ButtonStyle.Danger)
.setCustomId('abort')
)
.addComponents(
new ButtonBuilder()
.setLabel('►')
.setStyle(ButtonStyle.Primary)
.setCustomId('quotes_leaderboard_right')
.setDisabled(skip + 4 > maxValue)
)
await interaction.editReply({
embeds: [embed],
components: [row]
})
}
};