|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const { proto, downloadContentFromMessage, getContentType } = require('@whiskeysockets/baileys') |
|
|
const fs = require('fs') |
|
|
|
|
|
const downloadMediaMessage = async(m, filename) => { |
|
|
if (m.type === 'viewOnceMessage') { |
|
|
m.type = m.msg.type |
|
|
} |
|
|
if (m.type === 'imageMessage') { |
|
|
var nameJpg = filename ? filename + '.jpg' : 'undefined.jpg' |
|
|
const stream = await downloadContentFromMessage(m.msg, 'image') |
|
|
let buffer = Buffer.from([]) |
|
|
for await (const chunk of stream) { |
|
|
buffer = Buffer.concat([buffer, chunk]) |
|
|
} |
|
|
fs.writeFileSync(nameJpg, buffer) |
|
|
return fs.readFileSync(nameJpg) |
|
|
} else if (m.type === 'videoMessage') { |
|
|
var nameMp4 = filename ? filename + '.mp4' : 'undefined.mp4' |
|
|
const stream = await downloadContentFromMessage(m.msg, 'video') |
|
|
let buffer = Buffer.from([]) |
|
|
for await (const chunk of stream) { |
|
|
buffer = Buffer.concat([buffer, chunk]) |
|
|
} |
|
|
fs.writeFileSync(nameMp4, buffer) |
|
|
return fs.readFileSync(nameMp4) |
|
|
} else if (m.type === 'audioMessage') { |
|
|
var nameMp3 = filename ? filename + '.mp3' : 'undefined.mp3' |
|
|
const stream = await downloadContentFromMessage(m.msg, 'audio') |
|
|
let buffer = Buffer.from([]) |
|
|
for await (const chunk of stream) { |
|
|
buffer = Buffer.concat([buffer, chunk]) |
|
|
} |
|
|
fs.writeFileSync(nameMp3, buffer) |
|
|
return fs.readFileSync(nameMp3) |
|
|
} else if (m.type === 'stickerMessage') { |
|
|
var nameWebp = filename ? filename + '.webp' : 'undefined.webp' |
|
|
const stream = await downloadContentFromMessage(m.msg, 'sticker') |
|
|
let buffer = Buffer.from([]) |
|
|
for await (const chunk of stream) { |
|
|
buffer = Buffer.concat([buffer, chunk]) |
|
|
} |
|
|
fs.writeFileSync(nameWebp, buffer) |
|
|
return fs.readFileSync(nameWebp) |
|
|
} else if (m.type === 'documentMessage') { |
|
|
var ext = m.msg.fileName.split('.')[1].toLowerCase().replace('jpeg', 'jpg').replace('png', 'jpg').replace('m4a', 'mp3') |
|
|
var nameDoc = filename ? filename + '.' + ext : 'undefined.' + ext |
|
|
const stream = await downloadContentFromMessage(m.msg, 'document') |
|
|
let buffer = Buffer.from([]) |
|
|
for await (const chunk of stream) { |
|
|
buffer = Buffer.concat([buffer, chunk]) |
|
|
} |
|
|
fs.writeFileSync(nameDoc, buffer) |
|
|
return fs.readFileSync(nameDoc) |
|
|
} |
|
|
} |
|
|
|
|
|
const sms = (conn, m) => { |
|
|
if (m.key) { |
|
|
m.id = m.key.id |
|
|
m.chat = m.key.remoteJid |
|
|
m.fromMe = m.key.fromMe |
|
|
m.isGroup = m.chat.endsWith('@g.us') |
|
|
m.sender = m.fromMe ? conn.user.id.split(':')[0]+'@s.whatsapp.net' : m.isGroup ? m.key.participant : m.key.remoteJid |
|
|
} |
|
|
if (m.message) { |
|
|
m.type = getContentType(m.message) |
|
|
m.msg = (m.type === 'viewOnceMessage') ? m.message[m.type].message[getContentType(m.message[m.type].message)] : m.message[m.type] |
|
|
if (m.msg) { |
|
|
if (m.type === 'viewOnceMessage') { |
|
|
m.msg.type = getContentType(m.message[m.type].message) |
|
|
} |
|
|
var quotedMention = m.msg.contextInfo != null ? m.msg.contextInfo.participant : '' |
|
|
var tagMention = m.msg.contextInfo != null ? m.msg.contextInfo.mentionedJid : [] |
|
|
var mention = typeof(tagMention) == 'string' ? [tagMention] : tagMention |
|
|
mention != undefined ? mention.push(quotedMention) : [] |
|
|
m.mentionUser = mention != undefined ? mention.filter(x => x) : [] |
|
|
m.body = (m.type === 'conversation') ? m.msg : (m.type === 'extendedTextMessage') ? m.msg.text : (m.type == 'imageMessage') && m.msg.caption ? m.msg.caption : (m.type == 'videoMessage') && m.msg.caption ? m.msg.caption : (m.type == 'templateButtonReplyMessage') && m.msg.selectedId ? m.msg.selectedId : (m.type == 'buttonsResponseMessage') && m.msg.selectedButtonId ? m.msg.selectedButtonId : '' |
|
|
m.quoted = m.msg.contextInfo != undefined ? m.msg.contextInfo.quotedMessage : null |
|
|
if (m.quoted) { |
|
|
m.quoted.type = getContentType(m.quoted) |
|
|
m.quoted.id = m.msg.contextInfo.stanzaId |
|
|
m.quoted.sender = m.msg.contextInfo.participant |
|
|
m.quoted.fromMe = m.quoted.sender.split('@')[0].includes(conn.user.id.split(':')[0]) |
|
|
m.quoted.msg = (m.quoted.type === 'viewOnceMessage') ? m.quoted[m.quoted.type].message[getContentType(m.quoted[m.quoted.type].message)] : m.quoted[m.quoted.type] |
|
|
if (m.quoted.type === 'viewOnceMessage') { |
|
|
m.quoted.msg.type = getContentType(m.quoted[m.quoted.type].message) |
|
|
} |
|
|
var quoted_quotedMention = m.quoted.msg.contextInfo != null ? m.quoted.msg.contextInfo.participant : '' |
|
|
var quoted_tagMention = m.quoted.msg.contextInfo != null ? m.quoted.msg.contextInfo.mentionedJid : [] |
|
|
var quoted_mention = typeof(quoted_tagMention) == 'string' ? [quoted_tagMention] : quoted_tagMention |
|
|
quoted_mention != undefined ? quoted_mention.push(quoted_quotedMention) : [] |
|
|
m.quoted.mentionUser = quoted_mention != undefined ? quoted_mention.filter(x => x) : [] |
|
|
m.quoted.fakeObj = proto.WebMessageInfo.fromObject({ |
|
|
key: { |
|
|
remoteJid: m.chat, |
|
|
fromMe: m.quoted.fromMe, |
|
|
id: m.quoted.id, |
|
|
participant: m.quoted.sender |
|
|
}, |
|
|
message: m.quoted |
|
|
}) |
|
|
m.quoted.download = (filename) => downloadMediaMessage(m.quoted, filename) |
|
|
m.quoted.delete = () => conn.sendMessage(m.chat, { delete: m.quoted.fakeObj.key }) |
|
|
m.quoted.react = (emoji) => conn.sendMessage(m.chat, { react: { text: emoji, key: m.quoted.fakeObj.key } }) |
|
|
} |
|
|
} |
|
|
m.download = (filename) => downloadMediaMessage(m, filename) |
|
|
} |
|
|
|
|
|
m.reply = (teks, id = m.chat, option = { mentions: [m.sender] }) => conn.sendMessage(id, { text: teks, contextInfo: { mentionedJid: option.mentions } }, { quoted: m }) |
|
|
m.replyS = (stik, id = m.chat, option = { mentions: [m.sender] }) => conn.sendMessage(id, { sticker: stik, contextInfo: { mentionedJid: option.mentions } }, { quoted: m }) |
|
|
m.replyImg = (img, teks, id = m.chat, option = { mentions: [m.sender] }) => conn.sendMessage(id, { image: img, caption: teks, contextInfo: { mentionedJid: option.mentions } }, { quoted: m }) |
|
|
m.replyVid = (vid, teks, id = m.chat, option = { mentions: [m.sender], gif: false }) => conn.sendMessage(id, { video: vid, caption: teks, gifPlayback: option.gif, contextInfo: { mentionedJid: option.mentions } }, { quoted: m }) |
|
|
m.replyAud = (aud, id = m.chat, option = { mentions: [m.sender], ptt: false }) => conn.sendMessage(id, { audio: aud, ptt: option.ptt, mimetype: 'audio/mpeg', contextInfo: { mentionedJid: option.mentions } }, { quoted: m }) |
|
|
m.replyDoc = (doc, id = m.chat, option = { mentions: [m.sender], filename: 'undefined.pdf', mimetype: 'application/pdf' }) => conn.sendMessage(id, { document: doc, mimetype: option.mimetype, fileName: option.filename, contextInfo: { mentionedJid: option.mentions } }, { quoted: m }) |
|
|
m.replyContact = (name, info, number) => { |
|
|
var vcard = 'BEGIN:VCARD\n' + 'VERSION:3.0\n' + 'FN:' + name + '\n' + 'ORG:' + info + ';\n' + 'TEL;type=CELL;type=VOICE;waid=' + number + ':+' + number + '\n' + 'END:VCARD' |
|
|
conn.sendMessage(m.chat, { contacts: { displayName: name, contacts: [{ vcard }] } }, { quoted: m }) |
|
|
} |
|
|
m.react = (emoji) => conn.sendMessage(m.chat, { react: { text: emoji, key: m.key } }) |
|
|
|
|
|
return m |
|
|
} |
|
|
|
|
|
module.exports = { sms,downloadMediaMessage } |
|
|
|