Untitled
unknown
plain_text
a year ago
4.6 kB
6
Indexable
const { Client, Intents, EmbedBuilder } = require('discord.js'); const client = new Client({ intents: ['Guilds', 'GuildMessages'] }); const axios = require('axios'); require('dotenv').config(); async function getGuildMembers() { try { const response = await axios.get('https://stats.pika-network.net/api/clans/THEBOIS'); const guildData = response.data; if (!guildData || !guildData.members || !Array.isArray(guildData.members)) { console.error('Invalid guild data format'); return []; } const memberUsernames = guildData.members.map(member => member.user.username); return memberUsernames; } catch (error) { console.error('Error fetching guild members:', error.message); return []; } } async function getPlayerStats(playerIGN, interval = 'weekly', mode = 'ALL_MODES') { try { const response = await axios.get(`https://stats.pika-network.net/api/profile/${playerIGN}/leaderboard?type=bedwars&interval=${interval}&mode=${mode}`); return response.data; } catch (error) { console.error(`Error fetching stats for ${playerIGN}:`, error.message); return null; } } async function main(interval = 'weekly', mode = 'ALL_MODES') { const memberUsernames = await getGuildMembers(); if (memberUsernames.length === 0) { console.error('No guild members found.'); return { memberStats: [], failedMembers: [] }; } const memberStats = []; const failedMembers = []; for (const username of memberUsernames) { try { // Introduce a delay between API requests to avoid rate-limiting await new Promise(resolve => setTimeout(resolve, 500)); const stats = await getPlayerStats(username, interval, mode); if (stats) { const memberStat = { username, wins: 0 }; if (stats['Wins'] && stats['Wins'].entries && stats['Wins'].entries.length > 0) { const entry = stats['Wins'].entries.find(entry => entry.id === username); if (entry) { memberStat['wins'] = entry.value || 0; } } memberStats.push(memberStat); } else { console.log(`Unable to retrieve stats for ${username}. Their API may be turned off.`); failedMembers.push(username); } } catch (error) { console.error(`Error fetching stats for ${username}:`, error.message); failedMembers.push(username); } } // Sort memberStats by wins in descending order memberStats.sort((a, b) => b.wins - a.wins); return { memberStats, failedMembers }; } client.once('ready', () => { console.log('Bot is ready!'); }); client.on('interactionCreate', async interaction => { if (!interaction.isCommand()) return; if (interaction.commandName === 'gstats') { const interval = interaction.options.getString('interval') || 'weekly'; const mode = interaction.options.getString('mode') || 'ALL_MODES'; await interaction.deferReply(); // Acknowledge the command try { const { memberStats, failedMembers } = await main(interval, mode); const embedBuilder = new EmbedBuilder() .setTitle('Guild Bedwars Stats') .setDescription(`Interval: ${interval}, Mode: ${mode}`) .setColor('#0099ff'); memberStats.forEach((memberStat, index) => { embedBuilder.addFields({ name: `#${index + 1}. ${memberStat.username}`, value: `${memberStat.wins} wins`, inline: false }); }); if (failedMembers.length > 0) { embedBuilder.addFields({ name: 'Failed Members', value: failedMembers.join('\n'), inline: false }); } await interaction.editReply({ embeds: [embedBuilder.toJSON()] }); // Send the embed console.log('Guild stats sent successfully.'); } catch (error) { console.error('Error retrieving guild stats:', error.message); await interaction.editReply('An error occurred while retrieving guild stats.'); } } }); client.login(process.env.TOKEN);
Editor is loading...
Leave a Comment