const { Client, GatewayIntentBits, EmbedBuilder } = require('discord.js'); const axios = require('axios'); const randomColor = require('randomcolor'); const config = require('./config.json'); const client = new Client({ intents: [GatewayIntentBits.Guilds] }); client.once('ready', async () => { console.log(`Logged in as ${client.user.tag}!`); const channel = await client.channels.fetch(config.channelId); if (!channel) { console.error("Channel not found"); process.exit(1); } let message; try { const messages = await channel.messages.fetch({ limit: 1 }); message = messages.first(); } catch (error) { console.error("Failed to fetch messages:", error); } if (!message) { const embed = new EmbedBuilder().setDescription("Initializing server monitor..."); message = await channel.send({ embeds: [embed] }); } setInterval(async () => { try { const response = await axios.get(config.apiUrl, { timeout: 10000 }); const { game, players, max_players, version, map, name } = response.data; const embed = new EmbedBuilder() .setColor(randomColor({ luminosity: 'bright', hue: 'rainbow' })) .setTitle('Server Status') .addFields( { name: 'Server Name', value: name, inline: true }, { name: 'Game', value: game, inline: true }, { name: 'Version', value: version, inline: true }, { name: 'Map', value: map, inline: true }, { name: 'Players', value: `${players}/${max_players}`, inline: true } ) .setFooter({ text: `Last updated: ${new Date().toLocaleTimeString()}` }); await message.edit({ embeds: [embed] }); } catch (error) { console.error("Failed to fetch server data:", error); const embed = new EmbedBuilder() .setColor(randomColor({ luminosity: 'bright', hue: 'rainbow' })) .setTitle('Server Status') .setDescription("Failed to fetch server data.") .setFooter({ text: `Last updated: ${new Date().toLocaleTimeString()}` }); await message.edit({ embeds: [embed] }); } }, config.updateInterval); }); client.login(config.token);