← back to browse
goat command

rtm

Show system & bot stats

0
views
0
likes
0
installs
raw source
const os = require("os");
const pidusage = require("pidusage");
const { execSync } = require("child_process");

module.exports = {
    config: {
        name: "rtm",
        version: "1.6",
        author: "๐—”๐—ฟ๐—ถ๐˜†๐—ฎ๐—ป ๐—ฏ๐—ฏ'๐˜‡", 
        countDown: 10,
        role: 0,
        shortDescription: {
            en: "Show system & bot stats",
            bn: "เฆธเฆฟเฆธเงเฆŸเง‡เฆฎ เฆเฆฌเฆ‚ เฆฌเฆŸเง‡เฆฐ เฆธเงเฆŸเงเฆฏเฆพเฆŸเฆพเฆธ เฆฆเง‡เฆ–เงเฆจ"
        },
        longDescription: {
            en: "Display CPU, RAM, disk usage, uptime, users, groups etc.",
            bn: "CPU, RAM, Disk, Uptime, User, Group เฆ‡เฆคเงเฆฏเฆพเฆฆเฆฟ เฆฆเง‡เฆ–เฆพเฆฌเง‡"
        },
        category: "system"
    },

    onStart: async function ({ message, api, event, threadsData, usersData, commands }) {
        let sent;
        try {
            sent = await message.reply(">๐ŸŽ€ ๐‹๐จ๐š๐๐ข๐ง๐ ..\nโ–ˆโ–’");
            const bar = ["โ–ˆโ–ˆโ–’โ–’โ–’โ–’", "โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–’โ–’โ–’โ–’", "โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ"];
            for (let i = 0; i < bar.length; i++) {
                await new Promise(r => setTimeout(r, 500));
                await api.editMessage(`โœจ ๐‹๐จ๐š๐๐ข๐ง๐ ...\n${bar[i]}`, sent.messageID);
            }

            // CPU & Memory usage
            const stats = await pidusage(process.pid);
            const cpuUsage = stats.cpu.toFixed(2);
            const usedMem = stats.memory / 1024 / 1024;
            const totalMem = os.totalmem() / 1024 / 1024;
            const freeMem = os.freemem() / 1024 / 1024;

            // Disk usage
            let diskTotal = 0, diskUsed = 0, diskFree = 0;
            try {
                const df = execSync("df -k --total").toString().split("\n");
                const totalLine = df[df.length - 2].trim().split(/\s+/);
                diskTotal = (parseInt(totalLine[1]) / 1024 / 1024).toFixed(2);
                diskUsed = (parseInt(totalLine[2]) / 1024 / 1024).toFixed(2);
                diskFree = (parseInt(totalLine[3]) / 1024 / 1024).toFixed(2);
            } catch {
                diskTotal = totalMem.toFixed(2);
                diskUsed = usedMem.toFixed(2);
                diskFree = freeMem.toFixed(2);
            }

            // Uptime
            const botUptime = formatTime(process.uptime() * 1000);
            const sysUptime = formatTime(os.uptime() * 1000);

            // System info
            const cpuModel = os.cpus()[0].model;
            const nodeVersion = process.version;
            const osVersion = os.version ? os.version() : os.type() + " " + os.release();
            const platform = os.platform();
            const hostname = os.hostname();

            // Bot info
            const totalUsers = (await usersData.getAll()).length;
            const totalGroups = (await threadsData.getAll()).length;
            const totalCommands = commands?.size || 0;
            const botName = "๐—”๐—ฟ๐—ถ๐˜†๐—ฎ๐—ป ๐—ฏ๐—ฏ'๐˜‡ ๐—•๐—ผ๐˜"; // <-- tor bot er nam
            const ping = ((Date.now() - event.timestamp) / 1000).toFixed(2);

            // Version check
            let botVersion = "unknown";
            try {
                botVersion = require(process.cwd() + "/package.json").version || "unknown";
            } catch { }

            const info = `
>๐ŸŽ€ ๐”๐’๐„๐‘๐’ & ๐†๐‘๐Ž๐”๐๐’
โ€ข Total Users : ${totalUsers}
โ€ข Total Groups : ${totalGroups}
โ€ข Commands : ${totalCommands}

๐‘๐€๐Œ ๐ˆ๐๐…๐Ž
โ€ข Total RAM : ${totalMem.toFixed(2)} MB
โ€ข Free RAM : ${freeMem.toFixed(2)} MB
โ€ข Used RAM : ${usedMem.toFixed(2)} MB

๐ƒ๐ˆ๐’๐Š ๐”๐’๐€๐†๐„
โ€ข Total Disk : ${diskTotal} GB
โ€ข Used Disk : ${diskUsed} GB
โ€ข Free Disk : ${diskFree} GB

๐๐Ž๐“ ๐’๐“๐€๐“๐”๐’
โ€ข Bot Uptime : ${botUptime}
โ€ข Server Uptime : ${sysUptime}
โ€ข Ping : ${ping}s
โ€ข Bot Name : ${botName}
โ€ข Bot Version : ${botVersion}
โ€ข Hostname : ${hostname}
โ€ข Author : ๐—”๐—ฟ๐—ถ๐˜†๐—ฎ๐—ป ๐—ฏ๐—ฏ'๐˜‡

๐‚๐๐” & ๐’๐˜๐’๐“๐„๐Œ
โ€ข CPU Model : ${cpuModel}
โ€ข CPU Usage : ${cpuUsage}%
โ€ข Platform : ${platform}
โ€ข OS Version : ${osVersion}
โ€ข Node.js : ${nodeVersion}
`.trim();

            await new Promise(r => setTimeout(r, 600));
            await api.editMessage(info, sent.messageID);

        } catch (err) {
            if (sent?.messageID) {
                api.editMessage("๐…๐š๐ข๐ฅ๐ž๐: " + err.message, sent.messageID);
            } else {
                message.reply("๐…๐š๐ข๐ฅ๐ž๐: " + err.message);
            }
        }
    }
};

function formatTime(ms) {
    const d = Math.floor(ms / (1000 * 60 * 60 * 24));
    const h = Math.floor(ms / (1000 * 60 * 60)) % 24;
    const m = Math.floor(ms / (1000 * 60)) % 60;
    const s = Math.floor(ms / 1000) % 60;
    return `${d}d ${h}h ${m}m ${s}s`;
}

View raw file