physgunserver-monitor/index.js

63 lines
2.4 KiB
JavaScript

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: 'Server IP', value: "193.243.190.11", 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);