UNPKG

whatsauto.js

Version:

Easy WhatsApp Automation with Session

92 lines (91 loc) 4.19 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateStickerID = exports.makeWebpBuffer = void 0; const fs_1 = __importDefault(require("fs")); const crypto_1 = require("crypto"); const file_type_1 = require("file-type"); const node_webpmux_1 = require("node-webpmux"); const os_1 = require("os"); const fs_extra_1 = require("fs-extra"); const path_1 = require("path"); const fluent_ffmpeg_1 = __importDefault(require("fluent-ffmpeg")); const makeWebpBuffer = (options) => __awaiter(void 0, void 0, void 0, function* () { const getRandomName = () => `${Math.random().toString(36).slice(2)}.webp`; let buffer = null; let { media, pack = "", author = "" } = options; if (!media) return buffer; const tempDir = (0, path_1.join)((0, os_1.tmpdir)(), `webp_${Math.random().toString(36).slice(2)}`); yield (0, fs_extra_1.ensureDir)(tempDir); const inputName = (0, path_1.join)(tempDir, typeof media == "string" ? media : getRandomName()); const webpName = (0, path_1.join)(tempDir, getRandomName()); const data = JSON.stringify({ "sticker-pack-id": (0, exports.generateStickerID)(), "sticker-pack-name": pack, "sticker-pack-publisher": author, emojis: ["🐾"], }); const exif = Buffer.concat([ Buffer.from([ 0x49, 0x49, 0x2a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x57, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, ]), Buffer.from(data, "utf-8"), ]); exif.writeUIntLE(new TextEncoder().encode(data).length, 14, 4); const getStickerBuffer = (buffer) => __awaiter(void 0, void 0, void 0, function* () { const img = new node_webpmux_1.Image(); yield img.load(buffer); img.exif = exif; return yield img.save(null); }); if (Buffer.isBuffer(media)) { fs_1.default.writeFileSync(inputName, media); } else if (typeof media == "string") { media = fs_1.default.readFileSync(media); } else { return buffer; } const { mime } = yield (0, file_type_1.fromBuffer)(media); if (mime.includes("webp")) { return yield getStickerBuffer(media); } return new Promise((resolve) => { (0, fluent_ffmpeg_1.default)(inputName) .input(inputName) .on("error", () => __awaiter(void 0, void 0, void 0, function* () { yield (0, fs_extra_1.remove)(tempDir); resolve(buffer); })) .on("end", () => __awaiter(void 0, void 0, void 0, function* () { buffer = yield getStickerBuffer(fs_1.default.readFileSync(webpName)); yield (0, fs_extra_1.remove)(tempDir); resolve(buffer); })) .addOutputOptions([ `-vcodec`, `libwebp`, `-lavfi`, `scale='min(512,iw)':'min(512,ih)':force_original_aspect_ratio=decrease,fps=15, pad=512:512:-1:-1:color=white@0.0, split [a][b]; [a] palettegen=reserve_transparent=on:transparency_color=ffffff [p]; [b][p] paletteuse`, ]) .toFormat("webp") .save(webpName); }); }); exports.makeWebpBuffer = makeWebpBuffer; const generateStickerID = () => `whatsauto.js|${(0, crypto_1.randomBytes)(16).toString("hex")}`; exports.generateStickerID = generateStickerID;