UNPKG

@kamuridesu/whatframework

Version:

A simple WhatsApp Bot Framework on top of Baileys

66 lines (65 loc) 2.92 kB
import { Sticker, StickerTypes } from "wa-sticker-formatter"; import * as fs from "fs"; import { saveTempFile } from "../src/funcs/networking.js"; import { downloadMediaMessage } from "@whiskeysockets/baileys"; import { Language } from "./lang/language.js"; import { parseMessage } from "../src/funcs/parser.js"; import pkgff from "fluent-ffmpeg"; const ffmpeg = pkgff; async function createSticker(context, bot, author, packname) { const language = new Language(bot).get(); const isStickerMedia = (["imageMessage", "videoMessage"].includes(context.type) || ["imageMessage", "videoMessage"].includes(context.quotedMessageType)); if (isStickerMedia) { const messageMedia = context.hasQuotedMessage ? JSON.parse(JSON.stringify(context.originalMessage).replace('quotedM', 'm')).message.extendedTextMessage.contextInfo : context.originalMessage; const mediaBuffer = await downloadMediaMessage(messageMedia, "buffer", {}); let tempFile = await saveTempFile(mediaBuffer); if (context.type == "videoMessage" || context.quotedMessageType == "videoMessage") { return await scaleAnimatedMedia(tempFile, bot, context, packname, author); } else { return createStickerFromMedia(tempFile, bot, context, packname, author); } } return bot.replyText(context, language.missingStickerMedia); } async function scaleAnimatedMedia(tempFile, bot, context, author, packname) { const randomFilename = `${tempFile}_${Math.random() * 1000}`; let msg = undefined; ffmpeg(`${tempFile}`) .input(tempFile) .on('start', (cmd) => { console.info(cmd); }) .on('error', async (err) => { console.error(err); // fs.unlinkSync(tempFile); }) .on('end', async () => { msg = await createStickerFromMedia(randomFilename, bot, context, packname, author); fs.unlinkSync(tempFile); }) .addOutputOptions(["-vcodec", "libwebp", "-vf", "scale='min(160,iw)':min'(160,ih)':force_original_aspect_ratio=decrease,fps=10, pad=160:160:-1:-1:color=white@0.0, split [a][b]; [a] palettegen=reserve_transparent=on:transparency_color=ffffff [p]; [b][p] paletteuse" ]) .toFormat("webp") .save(randomFilename); return msg; } async function createStickerFromMedia(tempFile, bot, context, packname, author) { var _a; const sticker = new Sticker(tempFile, { pack: packname, author: author, type: StickerTypes.DEFAULT, quality: 100, background: "#00FFFFFF" }); const message = await ((_a = bot.connection) === null || _a === void 0 ? void 0 : _a.sendMessage(context.author.chatJid, await sticker.toMessage())); fs.unlinkSync(tempFile); if (message) return await parseMessage(message, bot); return undefined; } export { createSticker, createStickerFromMedia };