xargana-srv/discord/commands/info/sysinfo.js
2025-04-16 22:49:44 +03:00

92 lines
2.9 KiB
JavaScript

const SystemCommandBase = require('../../classes/SystemCommandBase');
const os = require('os');
class SystemInfo extends SystemCommandBase {
constructor(client) {
super(client);
this.name = 'sysinfo';
this.description = 'Get system information from the VPS';
}
async execute(interaction) {
try {
await interaction.deferReply();
// Get basic system info using Node.js
const uptime = Math.floor(os.uptime());
const days = Math.floor(uptime / 86400);
const hours = Math.floor((uptime % 86400) / 3600);
const minutes = Math.floor((uptime % 3600) / 60);
const seconds = uptime % 60;
const uptimeString = `${days}d ${hours}h ${minutes}m ${seconds}s`;
const memTotal = Math.round(os.totalmem() / (1024 * 1024 * 1024) * 100) / 100;
const memFree = Math.round(os.freemem() / (1024 * 1024 * 1024) * 100) / 100;
const memUsed = Math.round((memTotal - memFree) * 100) / 100;
const memPercent = Math.round((memUsed / memTotal) * 100);
// Get more detailed info using system commands
const { stdout: diskInfo } = await this.execCommand('df -h / | tail -n 1');
const diskParts = diskInfo.trim().split(/\s+/);
const diskTotal = diskParts[1] || 'N/A';
const diskUsed = diskParts[2] || 'N/A';
const diskFree = diskParts[3] || 'N/A';
const diskPercent = diskParts[4] || 'N/A';
const { stdout: loadAvg } = await this.execCommand('cat /proc/loadavg');
const loadParts = loadAvg.trim().split(' ');
const load1m = loadParts[0] || 'N/A';
const load5m = loadParts[1] || 'N/A';
const load15m = loadParts[2] || 'N/A';
const infoEmbed = {
title: "VPS System Information",
color: 0x3498db,
fields: [
{
name: "Hostname",
value: os.hostname(),
inline: true
},
{
name: "Platform",
value: `${os.type()} ${os.release()}`,
inline: true
},
{
name: "Uptime",
value: uptimeString,
inline: true
},
{
name: "Memory",
value: `${memUsed}GB / ${memTotal}GB (${memPercent}%)`,
inline: true
},
{
name: "Disk",
value: `${diskUsed} / ${diskTotal} (${diskPercent})`,
inline: true
},
{
name: "Load Average",
value: `${load1m} | ${load5m} | ${load15m}`,
inline: true
}
],
timestamp: new Date(),
footer: {
text: "VPS Control Bot"
}
};
await interaction.editReply({ embeds: [infoEmbed] });
} catch (error) {
console.error(error);
await interaction.editReply("Failed to get system information.");
}
}
}
module.exports = SystemInfo;