Untitled
unknown
plain_text
2 years ago
4.6 kB
7
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