← back to browse
goat command

alien

Alien canvas meme generator

0
views
0
likes
0
installs

Aliases: spacealien

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

module.exports = {
  config: {
    name: "alien",
    aliases: ["spacealien"],
    version: "1.1",
    author: "Anik Islam Sadik",
    cooldowns: 5,
    role: 0,
    shortDescription: { en: "Alien canvas meme generator" },
    longDescription: { en: "Place user profile picture on alien image using reply, mention, or UID." },
    category: "FUN AND SOCIAL",
    guide: { en: "{p}{n} [@mention / reply / UID]" }
  },

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

    const X_POSITION = 170;
    const Y_POSITION = 125;
    const AVATAR_SIZE = 80;

    let targetID;
    if (messageReply) {
      targetID = messageReply.senderID;
    } else if (mentions && Object.keys(mentions).length > 0) {
      targetID = Object.keys(mentions)[0];
    } else if (args[0] && !isNaN(args[0])) {
      targetID = args[0];
    } else {
      targetID = senderID;
    }

    const bgUrl = "https://i.imgur.com/aCJnVlu.jpeg";
    const avatarUrl = `https://graph.facebook.com/${targetID}/picture?height=500&width=500&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662`;

    const cacheDir = path.join(__dirname, "cache");
    if (!fs.existsSync(cacheDir)) fs.mkdirSync(cacheDir, { recursive: true });
    const outputPath = path.join(cacheDir, `alien_${targetID}.png`);

    const headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
    };

    try {
      api.setMessageReaction("⏳", messageID, () => {}, true);

      const userInfo = await api.getUserInfo(targetID);
      const userName = userInfo[targetID]?.name || "Friend";

      const fetchImg = async (url) => {
        const res = await axios.get(url, { responseType: "arraybuffer", headers });
        return loadImage(Buffer.from(res.data));
      };

      const [bgImg, avatarImg] = await Promise.all([
        fetchImg(bgUrl),
        fetchImg(avatarUrl).catch(() => loadImage("https://i.ibb.co/4pDNDR1/avatar.png"))
      ]);

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

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

      ctx.save();
      ctx.beginPath();
      ctx.arc(
        X_POSITION + AVATAR_SIZE / 2,
        Y_POSITION + AVATAR_SIZE / 2,
        AVATAR_SIZE / 2,
        0,
        Math.PI * 2,
        true
      );
      ctx.closePath();
      ctx.clip();

      ctx.drawImage(avatarImg, X_POSITION, Y_POSITION, AVATAR_SIZE, AVATAR_SIZE);
      ctx.restore();

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

      api.setMessageReaction("✅", messageID, () => {}, true);

      const randomMsg = `সবাই সাবধান! ${userName} আসলে মানুষ নয়,এলিয়েন গ্রহ থেকে পাঠানো গুপ্তচর!!👾🪐`;

      return api.sendMessage(
        { 
          body: randomMsg,
          attachment: fs.createReadStream(outputPath) 
        },
        threadID,
        () => {
          if (fs.existsSync(outputPath)) fs.unlinkSync(outputPath);
        },
        messageID
      );

    } catch (error) {
      console.error("Error in alien command:", error);
      api.setMessageReaction("❌", messageID, () => {}, true);
      return message.reply("Failed to generate image.");
    }
  }
};

View raw file