← back to browse
goat command

uptime

Check bot uptime with ping and image

0
views
0
likes
0
installs

Aliases: up, upt

raw source
const { createCanvas, loadImage } = require("canvas");
const fs = require("fs");
const path = require("path");

module.exports = {
  config: {
    name: "uptime",
    aliases: ["up", "upt"],
    version: "2.0",
    author: "Rocky",
    role: 0,
    usePrefix: true,
    shortDescription: {
      en: "Check bot uptime with ping and image"
    },
    longDescription: {
      en: "Display how long the bot is running along with ping time and a custom image"
    },
    category: "system",
    guide: {
      en: "{pn} → check bot uptime with ping"
    }
  },

  onStart() {
    console.log("✅ Uptime command loaded.");
  },

  onChat: async function ({ event, message, args, commandName }) {
    const prefix = global.GoatBot.config.prefix || "/";
    const body = event.body?.trim() || "";
    if (!body.startsWith(prefix + commandName) && !this.config.aliases.some(a => body.startsWith(prefix + a))) return;

    const imagePath = path.join(__dirname, "uptime_image.png");

    try {
      const pingMsg = await message.reply("⚡ Checking ping...");
      const start = Date.now();
      await new Promise(res => setTimeout(res, 100));
      const ping = Date.now() - start;

      const uptime = Math.floor(process.uptime()); // in seconds
      const days = Math.floor(uptime / (3600 * 24));
      const hours = Math.floor((uptime % (3600 * 24)) / 3600);
      const minutes = Math.floor((uptime % 3600) / 60);
      const seconds = uptime % 60;
      const upTimeStr = `${days}d ${hours}h ${minutes}m ${seconds}s`;

      const canvas = createCanvas(1000, 500);
      const ctx = canvas.getContext("2d");

      const bgUrl = "https://i.imgur.com/b4rDlP9.png";
      const background = await loadImage(bgUrl);
      ctx.drawImage(background, 0, 0, canvas.width, canvas.height);

      ctx.fillStyle = "#ffffff";
      ctx.font = "bold 45px Arial";
      ctx.textAlign = "left";
      ctx.textBaseline = "middle";
      ctx.shadowColor = "rgba(0,0,0,0.7)";
      ctx.shadowOffsetX = 2;
      ctx.shadowOffsetY = 2;
      ctx.shadowBlur = 4;

      ctx.fillText("🤖 BOT UPTIME", 60, 100);
      ctx.fillText(`⏳ ${upTimeStr}`, 60, 200);
      ctx.fillText(`⚡ Ping: ${ping}ms`, 60, 280);
      ctx.fillText(`👤 Owner: JABED:`, 60, 360);

      const buffer = canvas.toBuffer("image/png");
      fs.writeFileSync(imagePath, buffer);

      await message.unsend(pingMsg.messageID);

      await message.reply({
        body: `
━━━━━━━━━━━━━━
𝐁𝐎𝐓 𝐒𝐓𝐀𝐓𝐔𝐒 ✅
╭─╼━━━━━━━━╾─╮
│ 💤 Uptime : ${upTimeStr}
│ ⚡ Ping   : ${ping}ms
│ 👑 Owner  : JABED
╰─━━━━━━━━━╾─╯
━━━━━━━━━━━━━━
        `,
        attachment: fs.createReadStream(imagePath)
      });

    } catch (err) {
      console.error("❌ Error in uptime command:", err);
      await message.reply(
        "⚠️ Failed to generate uptime."
      );
    } finally {
      
      if (fs.existsSync(imagePath)) fs.unlinkSync(imagePath);
    }
  }
};

View raw file