UNPKG

@kamuridesu/whatframework

Version:

A simple WhatsApp Bot Framework on top of Baileys

94 lines (93 loc) 4.81 kB
import { Message, Group, Author, QuotedMessageParsed, } from "../data/message.js"; const messageTypes = [ "audioMessage", "videoMessage", "conversation", "imageMessage", "stickerMessage", "extendedTextMessage", "reactionMessage" ]; export async function parseMessage(message, bot) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; const key = message.message; if (!key) { return; } const originJid = message.key.remoteJid ? message.key.remoteJid : ""; let body; let mentionedUsers = []; let hasQuotedMessage = false; let quotedMessageType; let unparsedQuotedMessage; let quotedMessage; let isReactionMessage = false; let reactionMessage = undefined; const type = messageTypes.find(type => Object.keys(key).includes(type)); const isMedia = ["imageMessage", "videoMessage"].includes(type); switch (type) { case "conversation": body = (_a = message.message) === null || _a === void 0 ? void 0 : _a.conversation; break; case "imageMessage": body = (_c = (_b = message.message) === null || _b === void 0 ? void 0 : _b.imageMessage) === null || _c === void 0 ? void 0 : _c.caption; break; case "videoMessage": body = (_e = (_d = message.message) === null || _d === void 0 ? void 0 : _d.videoMessage) === null || _e === void 0 ? void 0 : _e.caption; break; case "extendedTextMessage": body = (_g = (_f = message.message) === null || _f === void 0 ? void 0 : _f.extendedTextMessage) === null || _g === void 0 ? void 0 : _g.text; hasQuotedMessage = true; quotedMessageType = messageTypes.find(type => JSON.stringify(message.message).includes(type)); if (quotedMessageType != undefined) { mentionedUsers = (_k = (_j = (_h = message.message) === null || _h === void 0 ? void 0 : _h.extendedTextMessage) === null || _j === void 0 ? void 0 : _j.contextInfo) === null || _k === void 0 ? void 0 : _k.mentionedJid; unparsedQuotedMessage = JSON.parse(JSON.stringify(message).replace('quotedM', 'm')).message.extendedTextMessage.contextInfo; // const unparsedMessage = await bot.loadMessageById(originJid, unparsedQuotedMessage?.stanzaId!); // await parseMessage(unparsedQuotedMessage); // if (unparsedMessage) quotedMessage = (await parseMessage(unparsedMessage, bot)); } break; case "reactionMessage": isReactionMessage = true; reactionMessage = (_l = message.message) === null || _l === void 0 ? void 0 : _l.reactionMessage; break; } body = body ? body : ""; mentionedUsers = mentionedUsers ? mentionedUsers : []; quotedMessageType = quotedMessageType ? quotedMessageType : ""; const { messageSender, senderName, isGroup } = parseMetadata({ originJid, originalMessage: message }, bot); let groupInfo; let author = new Author(messageSender, senderName, originJid, bot.ownerNumber == messageSender.split("@")[0], bot.botNumber + "@s.whatsapp.net" == messageSender, groupInfo); if (isGroup) { (groupInfo = await parseGroup(originJid, bot)); author = author = new Author(author.jid, author.name, author.chatJid, author.isBotOwner, author.isBot, groupInfo); } if (unparsedQuotedMessage) quotedMessage = new QuotedMessageParsed(unparsedQuotedMessage, author.chatJid); return new Message(bot, message, type, body, mentionedUsers, author, groupInfo != undefined, isMedia, hasQuotedMessage, quotedMessageType, quotedMessage, isReactionMessage, reactionMessage, groupInfo); } export function parseMetadata(context, bot) { const messageIsFrom = context.originJid; const senderName = context.originalMessage.pushName ? context.originalMessage.pushName : ""; const isGroup = messageIsFrom.includes('@g.us'); let messageSender = messageIsFrom ? messageIsFrom : ""; if (isGroup) { messageSender = context.originalMessage.key.participant ? context.originalMessage.key.participant : ""; } const senderIsOwner = bot.ownerNumber === (messageSender === null || messageSender === void 0 ? void 0 : messageSender.split('@')[0]); return { messageSender, senderName, messageIsFrom, senderIsOwner, isGroup }; } async function parseGroup(originJid, bot) { return new Group(bot, originJid); } export function convertNumberToMention(text) { var _a, _b; const regex = /@[0-9]{12}/g; if (regex.test(text)) { return (_b = (_a = text.match(regex)) === null || _a === void 0 ? void 0 : _a.map(number => `${number.replace("@", "")}@s.whatsapp.net`)) !== null && _b !== void 0 ? _b : ""; } return ""; }