← back to browse
goat command

bonk

Bonk someone

0
views
0
likes
0
installs

Aliases: b

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

module.exports = {
  config: {
    name: "bonk",
    aliases: ["b"],
    author: "Meheraz | rewrite by Muzan",
    shortDescription: "Bonk someone",
    longDescription: "Make a BONK meme using two avatars",
    category: "fun",
  },

  circleCrop: async function (buffer, size) {
    const img = await loadImage(buffer);
    const canvas = createCanvas(size, size);
    const ctx = canvas.getContext("2d");

    ctx.beginPath();
    ctx.arc(size / 2, size / 2, size / 2, 0, Math.PI * 2);
    ctx.closePath();
    ctx.clip();

    ctx.drawImage(img, 0, 0, size, size);
    return canvas;
  },

  makeImage: async function (one, two) {
    const bgURL = "https://i.postimg.cc/KYJ0VnK0/image0.png";
    const bg = await loadImage(bgURL);

    const width = 640;
    const height = 480;

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

    ctx.drawImage(bg, 0, 0, width, height);

    const fetchPfp = async (id) => {
      const url = `https://graph.facebook.com/${id}/picture?width=720&height=720&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662`;
      return (await axios.get(url, { responseType: "arraybuffer" })).data;
    };

    const avtOne = await fetchPfp(one);
    const avtTwo = await fetchPfp(two);

    const circle1 = await this.circleCrop(avtOne, 110); // PFP 1 -> size 110
    const circle2 = await this.circleCrop(avtTwo, 90);  // PFP 2 -> size 90

    // Swap positions
    ctx.drawImage(circle1, 60, 150); // Sender goes to hitting position
    ctx.drawImage(circle2, 500, 220);  // Target goes to bonked position

    const outPath = path.join(__dirname, `bonk_${one}_${two}.png`);
    fs.writeFileSync(outPath, canvas.toBuffer("image/png"));
    return outPath;
  },

  onStart: async function ({ api, event, args }) {
    try {
      const { threadID, messageID, senderID, mentions, messageReply } = event;

      let targetID;
      if (messageReply?.senderID) targetID = messageReply.senderID;
      else if (Object.keys(mentions).length) targetID = Object.keys(mentions)[0];
      else if (args[0] && /^\d+$/.test(args[0])) targetID = args[0];
      else return api.sendMessage("⚠ Reply / Mention / UID use koro.", threadID, messageID);

      const one = senderID;
      const two = targetID;

      // --- পরিবর্তন এখান থেকে শুরু ---
      // টার্গেট আইডির নাম বের করা হচ্ছে
      let targetName = "User";
      try {
          const userInfo = await api.getUserInfo(targetID);
          targetName = userInfo[targetID].name;
      } catch (e) {
          // যদি নাম না পাওয়া যায়, তাহলে ম্যানশন চেক করবে
          if (Object.keys(mentions).length > 0) {
              targetName = mentions[targetID].replace("@", "");
          }
      }
      // --- পরিবর্তন শেষ ---

      const file = await this.makeImage(one, two);

      api.sendMessage(
        {
          body: `${targetName} bonk nigga 🪓`, // এখানে নাম এবং টেক্সট সেট করা হয়েছে
          attachment: fs.createReadStream(file),
        },
        threadID,
        () => fs.unlinkSync(file),
        messageID
      );
    } catch (err) {
      api.sendMessage("❌ Error: " + err.message, event.threadID, event.messageID);
    }
  },
};

View raw file