goat
command
gushi
๐ฅ Punch someone
0
views
0
likes
0
installs
Aliases: punch
raw source
const fs = require("fs-extra");
const path = require("path");
const { createCanvas, loadImage } = require("canvas");
module.exports = {
config: {
name: "gushi",
aliases: ["punch"],
version: "2.0",
author: "Converted by ariyan",
countDown: 5,
role: 0,
shortDescription: "๐ฅ Punch someone",
longDescription: "Tag or reply to someone to generate a punch image",
category: "fun",
guide: "{pn} @tag or reply"
},
onStart: async function ({ event, message, usersData }) {
const { senderID, mentions, messageReply } = event;
const puncherID = senderID;
let targetID = Object.keys(mentions || {})[0];
if (!targetID && messageReply?.senderID) {
targetID = messageReply.senderID;
}
if (!targetID) {
return message.reply("๐ฅ | Please tag someone or reply to their message.");
}
try {
// Get names
const puncherName = await usersData.getName(puncherID).catch(() => "Someone");
const targetName = await usersData.getName(targetID).catch(() => "Someone");
// Get avatars
const puncherAvatarUrl = await usersData.getAvatarUrl(puncherID);
const targetAvatarUrl = await usersData.getAvatarUrl(targetID);
// Load images
const [puncherAvatar, targetAvatar, baseImage] = await Promise.all([
loadImage(puncherAvatarUrl),
loadImage(targetAvatarUrl),
loadImage("https://raw.githubusercontent.com/X-nil143/XGbal/refs/heads/main/Messenger_creation_25995716493353919.jpeg")
]);
// Create canvas
const canvas = createCanvas(baseImage.width, baseImage.height);
const ctx = canvas.getContext("2d");
ctx.drawImage(baseImage, 0, 0, baseImage.width, baseImage.height);
// Function to draw circle avatar
function 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();
}
// Avatar positions
drawCircleAvatar(puncherAvatar, 1000, 50, 338);
drawCircleAvatar(targetAvatar, 80, 572, 338);
// Save temp file
const tmpDir = path.join(__dirname, "tmp");
await fs.ensureDir(tmpDir);
const filePath = path.join(tmpDir, `punch_${puncherID}_${targetID}.png`);
await fs.writeFile(filePath, canvas.toBuffer("image/png"));
await message.reply({
body: `๐ฅ ${puncherName} just punched ${targetName}! ๐`,
attachment: fs.createReadStream(filePath)
});
// Auto delete
setTimeout(() => {
if (fs.existsSync(filePath)) fs.unlinkSync(filePath);
}, 5000);
} catch (err) {
console.error("Punch command error:", err);
return message.reply("โ | Couldn't generate punch image. Try again later.");
}
}
};