@kamuridesu/whatframework
Version:
A simple WhatsApp Bot Framework on top of Baileys
94 lines (93 loc) • 4.81 kB
JavaScript
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 "";
}