← back to browse
goat command

bro2

๐Ÿ’Ž Generate a Minecraft-themed Bleach bro image

0
views
0
likes
0
installs

Aliases: minebro, bleachbro

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

module.exports = {
  config: {
    name: "bro2",
    aliases: ["minebro", "bleachbro"],
    version: "1.0",
    author: "TOSHIRO EDIT",
    countDown: 5,
    role: 0,
    description: "๐Ÿ’Ž Generate a Minecraft-themed Bleach bro image",
    category: "fun",
    guide: {
      en: "{pn} @tag or reply โ€” Generate the image"
    }
  },

  langs: {
    en: {
      noTag: "Please tag a user or reply to a message ๐Ÿ’Ž",
      fail: "โŒ | Failed to generate the image."
    }
  },

  onStart: async function ({ event, message, usersData, getLang }) {
    const senderID = event.senderID;
    let targetID = Object.keys(event.mentions || {})[0];

    if (!targetID && event.messageReply?.senderID) {
      targetID = event.messageReply.senderID;
    }

    if (!targetID) return message.reply(getLang("noTag"));

    try {
      const [senderName, targetName] = await Promise.all([
        usersData.getName(senderID).catch(() => "Bro1"),
        usersData.getName(targetID).catch(() => "Bro2")
      ]);

      const [senderAvatarUrl, targetAvatarUrl] = await Promise.all([
        usersData.getAvatarUrl(senderID),
        usersData.getAvatarUrl(targetID)
      ]);

      // Your requested raw GitHub link
      const bgURL = "https://raw.githubusercontent.com/Toshiro6t9/Bzsb/refs/heads/main/6f1cb6b55548f87bce35366f6e1363b1.jpg";

      const [senderAvatar, targetAvatar, baseImage] = await Promise.all([
        loadImage(senderAvatarUrl),
        loadImage(targetAvatarUrl),
        loadImage(bgURL)
      ]);

      const canvas = createCanvas(baseImage.width, baseImage.height);
      const ctx = canvas.getContext("2d");

      // Draw Background
      ctx.drawImage(baseImage, 0, 0, canvas.width, canvas.height);

      // Function to draw circular avatars
      const drawCircleAvatar = (avatar, x, y, size) => {
        ctx.save();
        ctx.beginPath();
        ctx.arc(x + size / 2, y + size / 2, size / 2, 0, Math.PI * 2);
        ctx.closePath();
        ctx.clip();
        ctx.drawImage(avatar, x, y, size, size);
        ctx.restore();
      };

      /**
       * COORDINATE GUIDE:
       * 1st Avatar (Left character - Bam): Positioned near Ichigo's head
       * 2nd Avatar (Right character - Dan): Positioned near Urahara's head
       */
      drawCircleAvatar(senderAvatar, 488, 299, 110); // Ichigo (Left)
      drawCircleAvatar(targetAvatar, 170, 285, 110); // Urahara (Right)

      // Temp file handling
      const tmpDir = path.join(__dirname, "tmp");
      await fs.ensureDir(tmpDir);
      const imgPath = path.join(tmpDir, `bro2_${Date.now()}.png`);

      await fs.writeFile(imgPath, canvas.toBuffer("image/png"));

      await message.reply({
        body: `๐Ÿ’Ž ${senderName} and ${targetName} are mining through life together!`,
        attachment: fs.createReadStream(imgPath)
      });

      // Auto delete
      setTimeout(() => {
        if (fs.existsSync(imgPath)) fs.unlinkSync(imgPath);
      }, 10000);

    } catch (err) {
      console.error("Bro2 command error:", err);
      return message.reply(getLang("fail"));
    }
  }
};

View raw file