← back to browse
goat command

latti

Football kick edit

0
views
0
likes
0
installs

Aliases: lathi

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

module.exports = {
  config: {
    name: "latti",
    aliases: ["lathi"],
    version: "1.2",
    author: "eden",
    countDown: 5,
    role: 0,
    shortDescription: "Football kick edit",
    longDescription: "Adds your profile pic and target's profile pic into a football kick meme",
    category: "fun",
    guide: {
      en: "{p}{n} @mention / reply"
    }
  },

  onStart: async function ({ api, event, args }) {
    try {
      let targetID;
      if (Object.keys(event.mentions).length > 0) {
        targetID = Object.keys(event.mentions)[0];
      } else if (event.messageReply) {
        targetID = event.messageReply.senderID;
      } else {
        return api.sendMessage("- কাকে ফুটবল এর মতো কিক মারবি মেনশন দে..!", event.threadID, event.messageID);
      }

      const senderID = event.senderID;

      const senderAvatar = `https://graph.facebook.com/${senderID}/picture?width=512&height=512&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662`;
      const targetAvatar = `https://graph.facebook.com/${targetID}/picture?width=512&height=512&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662`;

      const templatePath = path.join(__dirname, "cache", "dkick_base.png");
      if (!fs.existsSync(templatePath)) {
        const imgUrl = "https://files.catbox.moe/4x39pb.jpg";
        const res = await axios.get(imgUrl, { responseType: "arraybuffer" });
        fs.outputFileSync(templatePath, res.data);
      }

      const baseImg = await loadImage(templatePath);
      const senderImg = await loadImage(senderAvatar);
      const targetImg = await loadImage(targetAvatar);

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

      // Sender face
      const senderY = 130;
      ctx.save();
      ctx.beginPath();
      ctx.arc(120, senderY + 45, 45, 0, Math.PI * 2, true);
      ctx.closePath();
      ctx.clip();
      ctx.drawImage(senderImg, 75, senderY, 90, 90);
      ctx.restore();

      // Target face
      const targetX = 260;
      const targetY = 25;
      const targetSize = 100;

      ctx.save();
      ctx.beginPath();
      ctx.arc(targetX + targetSize / 2, targetY + targetSize / 2, targetSize / 2, 0, Math.PI * 2, true);
      ctx.closePath();
      ctx.clip();
      ctx.drawImage(targetImg, targetX, targetY, targetSize, targetSize);
      ctx.restore();

      const outPath = path.join(__dirname, "cache", `dkick_${event.senderID}.png`);
      fs.writeFileSync(outPath, canvas.toBuffer());

      api.sendMessage(
        { body: "- Bombolaaa 🦵⚽", attachment: fs.createReadStream(outPath) },
        event.threadID,
        () => fs.unlinkSync(outPath),
        event.messageID
      );
    } catch (e) {
      console.error(e);
      return api.sendMessage("❌ Error generating image.", event.threadID, event.messageID);
    }
  }
};

View raw file