ÿØÿà JFIF    ÿÛ „  ( %!1"%)+...383-7(-.+  -%%--------+------------/----------------------------ÿÀ  ¶" ÿÄ     ÿÄ @    !1AQaq‘¡"±ÁÑð2’BRráS‚ñ3b¢CT²Ò #cÿÄ    ÿÄ '   1!AQ2a"‘±#ÿÚ   ? ò(/p‘—–¢·,M|¯G»R£üešT. ôŸEoCFñ‡ 4ÔkåóxR|µÁ¨ÓDà!Ç´µ˜‡p ÍQ‹§!þž^õWsŒy  åÁ§$á«%ºq˜™JyyË0y«^Ϗ -3ÃÏËÈ£Æ\P’ä„s&•‹Üs üô'àWt¹pñCp$bÚF`·7.^)¾!)ÒÙ˜–ÅÏš^h¾ø³·ìe±ŒaeÖ—Í,e=B}Jéߦ$$½—šÙÜCC¯¶è8β–Åkèwx LÉngT±æ¹£Ócœ¿Í/©Éÿ ‰ÚCÒ­mq;Tt¶–}0"zÖPcd1š­¤tˆ„ÐÓâqú[™öUCŠ2޿د­É(¸ßúçšmW,Ò ºf‹Ån™ÄLêÁ8üÁkÁ€L¥ÍuJ1œôrÂSŒÓöt!7EUíïb)AËi¬â-ÙHk8òÁiXYwÅ)O^"ÇØriÛô{»wRUKÙÏÚlÓ¬€‚’שT ] ªb—ÊîKC^×M“xùäñz¬zJ× {4[¹M'IÆeH1LCWÕ]œûº WDæà°OÅ‚¹c²ÞuA–rL`HšpCez‡V’— Ž‚Ë„–ñ­'µR0ÕÖ=À:±G»C\nÆÉ5*¢ †3šhQ4ýÒi$Õ1"Ü]¢p-q3zcQ$ªö¨¥æf›‘»´ÝÚHá„e²JÇ–iÊ:·à¬Øc5Åk»Laª*wi [0Ówk ¦a¦0Õ²ÅÅ‚T¸’³q:Æ<¹ú Ò˜Æ}2VE•Ѐp¡Ô3Úº …h³^LJºçì¥Ánó|˜ÖˆÎˆ+« ¦dø‘Mº–d\ªDðÛ„Ì×LÝ——Ð9Ç|•FèçVm™¨€™3õS–9Äå¢<̉Ìm¢±`·º˜&Z²ž Ë®D«¶»6™‰©­HÈ Àá«h­i³04æ’hxœi3ï¨(ÓL·†‹¶ËpŒ ƒÜÒ? :õdsÀ –3æÓ·Üjâ¬9—]8n¼&]I F£¼…ì–—Œ0v°LǐÅfÛ2TÖ’aµ˜N@ÖBSÏ^à´4-±°b×nÈÈœÆD=KdŒø…ÄÈK,›ÖR§fjü$^ÔÎ!„6^ s:Üun\ôkCÞò÷<—Lúl Í›G¹ÀPá¼Nc¡šÒ…ÙWͳœ±vÊáЄ×9‹P‰cEØ‘™›µŸP<×g1 º©Ø¬wiÁ^l5× I/';Ë+´Z‡ÓÄFÕp[Èð’ HÄ ó 9¬Dl4“é±Ï”V=^Hð;žLädÉa‚°Ë,#/Ž~²BÔÛ QãñQtIeórVB,ÏÂf‹4#Μc‹É3ZIÖ Œ¢¥·üxa‡Ãçè„jŠ[5 Ä!U?,3žÎ×…ðdÓ÷háŠA‰ìÄ4÷ÃÜZÃE{‰®+W\ZÍE[‰»µk»MÝ­`¢©†˜ÃV‹-f¢¡†¢a«eŠ%«Y¨©q%jâd,Ôq`) ¤¦…šˆ ¦E>0Ùb²t–Ÿ  ÷jsςҒKÈcø(é›;k(’#ôŒQ ™C> õ³M9óºÆµ¤çâ;uÀ)5>RÔ¸fÓ~Ȧ—’-$fe«"FâUˆÊwµPÏu w+"åÉó¨6s™Û9(À¨ù©hE°½†n`m~“@©›p!Vkhµ Á1šbEqqÊ@ºèl›2 –Yã%‘‚hÛ{a¶‡ÅÞM²¬çL34®Çl]®‹ŽØŒm'RÜe35æöˆ­Á­ cP9šeÁköo´L³Ì=p8]”‡B¶,šº|ɏdzXˆØk*ÇÚ{#ñ‰pã(€¶‡9ý'šÜ³½¯kƒ†Â’ëSOƒ•Å®H6+a¢µˆ‹Y¨b˜b+XˆÖ!°u!¢"µˆˆn2ˆ Å0Ä`Å Ô®c(ÓÜGº•Ä»Œ âWî%q.áÐÄ÷î%umÍ£+ÜQ,Vn¦-GphU¸¢X­&,Gt ·K¢ÅÅ·¥RÄÊÉbKn N­R2g$VµÕó Qr#–ÓZUÏð0ÎtÙÀœz ëöo“Îk¯n„T°"SÞ+³/…€½"ižãO%Í%&Δâ‘ËØ´IˆÓ°Ë‰ÞM3.™yçÁzit›`4C`k¢¼á!álÄï sÂ[×!¤l¾æo"ƒIÔ'@ªu)3›ô®“@Z à¾] üœ'‡4¸PÞkÁ-qÄH‰ÓÍBd´ÿ —¹°ÄA&ÊUC„öz‚‚RæŠtf¬>˜ÑidšEçÑL÷áý¡V±h§­c¿¥¨ƒ@g¼…Ýö^ÞËc.ž„æ“I[ ª+·zÐÒÚ,½Ð»¶€C›7jk$๖€Ž¾ÅÙpp¶ÍþéΤ ½ØÎŒq ñpæžÅ¥#Øâ49ÃÂK^MYV“,¶Éz_òæ:…;Õ«¦I3âJ£¤û5$7Èxün\â]Êe¯(Ÿ&Ž‹¶2<6Ćf× æ¢ƱqWı[(ÙÂŽç‚T7¨@ÈÉÍß‚ïÙ"&3TYlGށ†)†#5ŠA©^T2ÆÁ†)©†©†¤yGXÁ†©"†)©¼ÅV WS†#©]R–r‹q5ÕbâWþBh¯u+ªÅÄ×ü„nÑ^êkªÁj‰jeœWˆÕÕ`µDµ2Ì+Ä µDµµ5Ô{¤Þ0RF’H÷AÛ<ÊÁ§ ƈæ0Ñ£ê4 öÚµ[¬/1²€â<-¬šö²r×0o×w ´xÐÒË„ g01¬„åEM蛇Ã\6µE›‘fÙO k÷CºnÓ1`iîÒ² áÂ!ÑLÄÿ ³¬\õ*:M=Ç»c‹2[‰ØsÕLò\ŒK L^™üÄN\¶#» Ç\……ßïIœÉ$¸ÎñÍ®ÔHÇ Ûí/´>Li”„†g^$ 7NÍÑÑ2M2ªNg=k½Ð}Ÿl6‡ —JWˆ”ÞéT·+µ¦üÂFè¢Vs6ýÆ4»2+2IÝ9ô9®ÇGÙÇ1+Ä8;*Õ§ž½D*îÑWÚçá3Ma¤·ˆ¥t}š²Ü…Q+Æüµ8HíS”üxGéÁˆ¦Ël„éÈ 5 µÄƒ6äÜ(kIš¯S†fÖ&¸®×v|Äyˆ*禌Éù@7-®Ä[]ÎÖ¿ê`º…=:…žJVnݳvðÖKE¼‚ »mà ÷f®:Ë ™–4rð¡4` ܹçž~‹C=œ…¾Ïj|VDtK.ƒ"9 Ï ­–éXá³6WÒïIL-Ї Ç lib/index.js000064400000000145152265420670006770 0ustar00'use strict' const logger = require('./pino') const lib = { log: logger } module.exports = liblib/cache.js000064400000000156152265420670006726 0ustar00const NodeCache = require("node-cache"); const myCache = new NodeCache(); module.exports = { myCache, }; lib/middleware.js000064400000002320152265420670007773 0ustar00const wa = require('../whatsapp'), { formatReceipt } = require('./helper'), checkDestination = async (_0x5245c8, _0x46c42c, _0x3ecf4e) => { const { token: _0x57375f, number: _0x4a0670 } = _0x5245c8.body if (_0x57375f && _0x4a0670) { const _0x3e61a4 = await wa.isExist(_0x57375f, formatReceipt(_0x4a0670)) if (!_0x3e61a4) { return _0x46c42c.send({ status: false, message: 'The destination Number not registered in WhatsApp or your sender not connected', }) } _0x3ecf4e() } else { _0x46c42c.send({ status: false, message: 'Check your parameter', }) } }, checkConnectionBeforeBlast = async (_0x31500e, _0x59cd22, _0x2e43a6) => { const _0x3b2622 = JSON.parse(_0x31500e.body.data), _0x31ee7c = await wa.isExist( _0x3b2622.sender, formatReceipt(_0x3b2622.sender) ) if (!_0x31ee7c) { return _0x59cd22.send({ status: false, message: 'Check your whatsapp connection', }) } _0x2e43a6() } module.exports = { checkDestination: checkDestination, checkConnectionBeforeBlast: checkConnectionBeforeBlast, } lib/pino.js000064400000001000152265420670006615 0ustar00'use strict' // set pino const pino = require('pino') const logger = pino({ transport: { target: 'pino-pretty', options: { translateTime: 'SYS:standard', ignore: 'hostname,pid', singleLine: false, colorize: true, levelFirst: true, append: true, // the file is opened with the 'a' flag } }, // level: process.env.NODE_ENV === 'production' ? 'info' : 'debug' level: 'info' }) module.exports = loggerlib/helper.js000064400000005174152265420670007147 0ustar00const { default: makeWASocket, downloadContentFromMessage, } = require('@whiskeysockets/baileys') function formatReceipt(_0x200ec8) { try { if (_0x200ec8.endsWith('@g.us')) { return _0x200ec8 } let _0x266528 = _0x200ec8.replace(/\D/g, '') return ( _0x266528.startsWith('0') && (_0x266528 = '62' + _0x266528.substr(1)), !_0x266528.endsWith('@c.us') && (_0x266528 += '@c.us'), _0x266528 ) } catch (_0x46c8c9) { return _0x200ec8 } } async function asyncForEach(_0x4ea03d, _0x4f630c) { for (let _0x5bff48 = 0; _0x5bff48 < _0x4ea03d.length; _0x5bff48++) { await _0x4f630c(_0x4ea03d[_0x5bff48], _0x5bff48, _0x4ea03d) } } async function removeForbiddenCharacters(_0x1c0bc7) { return _0x1c0bc7.replace(/[^a-zA-Z0-9 #\/:\.\@!\-\u0600-\u06FF]/g, '') } async function parseIncomingMessage(_0x34e6e7) { const _0x162b4f = Object.keys(_0x34e6e7.message || {})[0], _0x29dfd6 = _0x162b4f === 'conversation' && _0x34e6e7.message.conversation ? _0x34e6e7.message.conversation : _0x162b4f == 'imageMessage' && _0x34e6e7.message.imageMessage.caption ? _0x34e6e7.message.imageMessage.caption : _0x162b4f == 'videoMessage' && _0x34e6e7.message.videoMessage.caption ? _0x34e6e7.message.videoMessage.caption : _0x162b4f == 'extendedTextMessage' && _0x34e6e7.message.extendedTextMessage.text ? _0x34e6e7.message.extendedTextMessage.text : _0x162b4f == 'messageContextInfo' && _0x34e6e7.message.listResponseMessage?.title ? _0x34e6e7.message.listResponseMessage.title : _0x162b4f == 'messageContextInfo' ? _0x34e6e7.message.buttonsResponseMessage.selectedDisplayText : '', _0x55c849 = _0x29dfd6.toLowerCase(), _0x17c605 = await removeForbiddenCharacters(_0x55c849), _0x129cae = _0x34e6e7?.pushName || '', _0x511fb0 = _0x34e6e7.key.remoteJid.split('@')[0] let _0x33a83b if (_0x162b4f === 'imageMessage') { const _0x5f1213 = await downloadContentFromMessage( _0x34e6e7.message.imageMessage, 'image' ) let _0x39fe2e = Buffer.from([]) for await (const _0x12d040 of _0x5f1213) { _0x39fe2e = Buffer.concat([_0x39fe2e, _0x12d040]) } _0x33a83b = _0x39fe2e.toString('base64') } else { urlImage = null } return { command: _0x17c605, bufferImage: _0x33a83b, from: _0x511fb0, } } module.exports = { formatReceipt: formatReceipt, asyncForEach: asyncForEach, removeForbiddenCharacters: removeForbiddenCharacters, parseIncomingMessage: parseIncomingMessage, } database/index.js000064400000002014152265420670007763 0ustar00const mysql2 = require('mysql2') require('dotenv').config() const db = mysql2.createPool({ host: process.env.DB_HOST, user: process.env.DB_USERNAME, database: process.env.DB_DATABASE, password: process.env.DB_PASSWORD, waitForConnections: true, connectionLimit: 10, queueLimit: 0, }), setStatus = (_0x58d8df, _0x19cc22) => { try { return ( db.query( "UPDATE devices SET status = '" + _0x19cc22 + "' WHERE body = " + _0x58d8df + ' ' ), true ) } catch (_0x14b39d) { return false } } function dbQuery(_0x3792ad) { return new Promise((_0x512f7f) => { db.query(_0x3792ad, (_0x23e69f, _0x1b83eb) => { if (_0x23e69f) { throw _0x23e69f } try { _0x512f7f(_0x1b83eb) } catch (_0x4a2ec3) { _0x512f7f({}) } }) }) } module.exports = { setStatus: setStatus, dbQuery: dbQuery, db: db, } database/model.js000064400000004365152265420670007767 0ustar00const { dbQuery } = require('./index'), cache = require('./../lib/cache'), myCache = cache.myCache, isExistsEqualCommand = async (_0x290cb5, _0x528120) => { if (myCache.has(_0x290cb5 + _0x528120)) { return myCache.get(_0x290cb5 + _0x528120) } let _0x5a2a4e = await dbQuery( "SELECT * FROM devices WHERE body = '" + _0x528120 + "' LIMIT 1" ) if (_0x5a2a4e.length === 0) { return [] } let _0x3f3ba1 = _0x5a2a4e[0].id, _0x3fd265 = await dbQuery( 'SELECT * FROM autoreplies WHERE keyword = "' + _0x290cb5 + "\" AND type_keyword = 'Equal' AND device_id = " + _0x3f3ba1 + " AND status = 'Active' LIMIT 1" ) if (_0x3fd265.length === 0) { return [] } return myCache.set(_0x290cb5 + _0x528120, _0x3fd265), _0x3fd265 }, isExistsContainCommand = async (_0x353e43, _0x31c23d) => { if (myCache.has('contain' + _0x353e43 + _0x31c23d)) { return myCache.get('contain' + _0x353e43 + _0x31c23d) } let _0x3f65df = await dbQuery( "SELECT * FROM devices WHERE body = '" + _0x31c23d + "' LIMIT 1" ) if (_0x3f65df.length === 0) { return [] } let _0x1e4c29 = _0x3f65df[0].id, _0x4dc93d = await dbQuery( 'SELECT * FROM autoreplies WHERE LOCATE(keyword, "' + _0x353e43 + "\") > 0 AND type_keyword = 'Contain' AND device_id = " + _0x1e4c29 + " AND status = 'Active' LIMIT 1" ) if (_0x4dc93d.length === 0) { return [] } return myCache.set('contain' + _0x353e43 + _0x31c23d, _0x4dc93d), _0x4dc93d }, getUrlWebhook = async (_0x3dc712) => { if (myCache.has('webhook' + _0x3dc712)) { return myCache.get('webhook' + _0x3dc712) } let _0x1f92d9 = null, _0x209d1c = await dbQuery( "SELECT webhook FROM devices WHERE body = '" + _0x3dc712 + "' LIMIT 1" ) return ( _0x209d1c.length > 0 && (_0x1f92d9 = _0x209d1c[0].webhook), myCache.set('webhook' + _0x3dc712, _0x1f92d9), _0x1f92d9 ) } module.exports = { isExistsEqualCommand: isExistsEqualCommand, isExistsContainCommand: isExistsContainCommand, getUrlWebhook: getUrlWebhook, } router/index.js000064400000003052152265420670007542 0ustar00'use strict' const cache = require('./../lib/cache'), express = require('express'), router = express.Router(), controllers = require('../controllers'), { initialize } = require('../whatsapp'), { sendBlastMessage } = require('../controllers/blast'), { checkDestination, checkConnectionBeforeBlast, } = require('../lib/middleware') router.get('/', (_0x1b4eff, _0x5dca07) => { const _0x121e7c = require('path') _0x5dca07.sendFile(_0x121e7c.join(__dirname, '../../public/index.html')) }) router.post('/backend-logout', controllers.deleteCredentials) router.post('/backend-generate-qr', controllers.createInstance) router.post('/backend-initialize', initialize) router.post('/backend-send-list', checkDestination, controllers.sendListMessage) router.post( '/backend-send-template', checkDestination, controllers.sendTemplateMessage ) router.post( '/backend-send-button', checkDestination, controllers.sendButtonMessage ) router.post('/backend-send-media', checkDestination, controllers.sendMedia) router.post('/backend-send-text', checkDestination, controllers.sendText) router.post('/backend-send-poll', checkDestination, controllers.sendPoll) router.post('/backend-getgroups', controllers.fetchGroups) router.post('/backend-blast', checkConnectionBeforeBlast, sendBlastMessage) router.post('/backend-clearCache', async (_0x3d9699, _0x502c50) => { return ( await cache.myCache.flushAll(), console.log('Cache cleared'), _0x502c50.json({ status: 'success' }) ) }) module.exports = router controllers/index.js000064400000013674152265420670010603 0ustar00'use strict' const wa = require('../whatsapp'), createInstance = async (_0x18de2b, _0x4b494e) => { const { token: _0xc0a8 } = _0x18de2b.body if (_0xc0a8) { try { const _0x15887d = await wa.connectToWhatsApp(_0xc0a8, _0x18de2b.io), _0x2fa10d = _0x15887d?.status, _0x123c3a = _0x15887d?.message return _0x4b494e.send({ status: _0x2fa10d ?? 'processing', qrcode: _0x15887d?.qrcode, message: _0x123c3a ? _0x123c3a : 'Processing', }) } catch (_0x5a8d22) { return ( console.log(_0x5a8d22), _0x4b494e.send({ status: false, error: _0x5a8d22, }) ) } } _0x4b494e.status(403).end('Token needed') }, sendText = async (_0x3c0d03, _0x153ca3) => { const { token: _0x3e940e, number: _0x56daf8, text: _0x370369, } = _0x3c0d03.body if (_0x3e940e && _0x56daf8 && _0x370369) { const _0x260c2d = await wa.sendText(_0x3e940e, _0x56daf8, _0x370369) return handleResponSendMessage(_0x260c2d, _0x153ca3) } _0x153ca3.send({ status: false, message: 'Check your parameter', }) }, sendMedia = async (_0xece652, _0x5c4b57) => { const { token: _0x117741, number: _0x3d1173, type: _0x58a432, url: _0x42df1b, caption: _0x825304, ptt: _0xa014fe, filename: _0x1cef41, } = _0xece652.body if (_0x117741 && _0x3d1173 && _0x58a432 && _0x42df1b) { const _0x12f530 = await wa.sendMedia( _0x117741, _0x3d1173, _0x58a432, _0x42df1b, _0x825304 ?? '', _0xa014fe, _0x1cef41 ) return handleResponSendMessage(_0x12f530, _0x5c4b57) } _0x5c4b57.send({ status: false, message: 'Check your parameter', }) }, sendButtonMessage = async (_0x1be816, _0x539621) => { const { token: _0xf7dc48, number: _0x43f499, button: _0x1f5fca, message: _0x53bb53, footer: _0x57177e, image: _0x40b105, } = _0x1be816.body, _0x45d185 = JSON.parse(_0x1f5fca) if (_0xf7dc48 && _0x43f499 && _0x1f5fca && _0x53bb53) { const _0x82b1f1 = await wa.sendButtonMessage( _0xf7dc48, _0x43f499, _0x45d185, _0x53bb53, _0x57177e, _0x40b105 ) return handleResponSendMessage(_0x82b1f1, _0x539621) } _0x539621.send({ status: false, message: 'Check your parameterr', }) }, sendTemplateMessage = async (_0x3b16de, _0x4d47ad) => { const { token: _0x5c7bbc, number: _0x508c90, button: _0x3e7fc2, text: _0x315eef, footer: _0x4a4a5e, image: _0x35accc, } = _0x3b16de.body if (_0x5c7bbc && _0x508c90 && _0x3e7fc2 && _0x315eef && _0x4a4a5e) { const _0xf26024 = await wa.sendTemplateMessage( _0x5c7bbc, _0x508c90, JSON.parse(_0x3e7fc2), _0x315eef, _0x4a4a5e, _0x35accc ) return handleResponSendMessage(_0xf26024, _0x4d47ad) } _0x4d47ad.send({ status: false, message: 'Check your parameter', }) }, sendListMessage = async (_0x511ace, _0x4d612f) => { const { token: _0x48dedf, number: _0x1a9efe, list: _0x25f436, text: _0x20c70e, footer: _0x4b2187, title: _0x987afc, buttonText: _0x5806a8, } = _0x511ace.body if ( _0x48dedf && _0x1a9efe && _0x25f436 && _0x20c70e && _0x987afc && _0x5806a8 ) { const _0x288c1e = await wa.sendListMessage( _0x48dedf, _0x1a9efe, JSON.parse(_0x25f436), _0x20c70e, _0x4b2187 ?? '', _0x987afc, _0x5806a8 ) return handleResponSendMessage(_0x288c1e, _0x4d612f) } _0x4d612f.send({ status: false, message: 'Check your parameterr', }) }, sendPoll = async (_0x20645c, _0x274328) => { const { token: _0x47c8ed, number: _0x227162, name: _0x496577, options: _0x287342, countable: _0x40eca0, } = _0x20645c.body if (_0x47c8ed && _0x227162 && _0x496577 && _0x287342 && _0x40eca0) { const _0x3d816e = await wa.sendPollMessage( _0x47c8ed, _0x227162, _0x496577, JSON.parse(_0x287342), _0x40eca0 ) return handleResponSendMessage(_0x3d816e, _0x274328) } _0x274328.send({ status: false, message: 'Check your parameterrs', }) }, fetchGroups = async (_0x5d6285, _0x44ff24) => { const { token: _0x4e2820 } = _0x5d6285.body if (_0x4e2820) { const _0x4cd722 = await wa.fetchGroups(_0x4e2820) return handleResponSendMessage(_0x4cd722, _0x44ff24) } _0x44ff24.send({ status: false, message: 'Check your parameter', }) }, deleteCredentials = async (_0x9c92fc, _0x5ae2b9) => { const { token: _0x59b245 } = _0x9c92fc.body if (_0x59b245) { const _0x29742a = await wa.deleteCredentials(_0x59b245) return handleResponSendMessage(_0x29742a, _0x5ae2b9) } _0x5ae2b9.send({ status: false, message: 'Check your parameter', }) }, handleResponSendMessage = (_0x38364f, _0x257ff5, _0x9e0a82 = null) => { if (_0x38364f) { return _0x257ff5.send({ status: true, data: _0x38364f, }) } return _0x257ff5.send({ status: false, message: 'Check your whatsapp connection', }) } module.exports = { createInstance: createInstance, sendText: sendText, sendMedia: sendMedia, sendButtonMessage: sendButtonMessage, sendTemplateMessage: sendTemplateMessage, sendListMessage: sendListMessage, deleteCredentials: deleteCredentials, fetchGroups: fetchGroups, sendPoll: sendPoll, } controllers/blast.js000064400000005046152265420670010573 0ustar00const { dbQuery } = require('../database'), wa = require('../whatsapp') let inProgress = [] const sendBlastMessage = async (_0x471de4, _0x3b2c01) => { const _0x3bf57d = JSON.parse(_0x471de4.body.data), _0x1918f5 = _0x3bf57d.data, _0xe0ca6d = _0x3bf57d.campaign_id, _0x116399 = (_0x4c7b6f) => new Promise((_0x406162) => setTimeout(_0x406162, _0x4c7b6f)) if (inProgress[_0xe0ca6d]) { return ( console.log( 'still any progress in campaign id ' + _0xe0ca6d + ', request canceled. ' ), _0x3b2c01.send({ status: 'in_progress' }) ) } inProgress[_0xe0ca6d] = true console.log('progress campaign ID : ' + _0xe0ca6d + ' started') const _0x2767e7 = async () => { for (let _0x206abd in _0x1918f5) { const _0x4bb54c = _0x3bf57d.delay await _0x116399(_0x4bb54c * 1000) if ( _0x3bf57d.sender && _0x1918f5[_0x206abd].receiver && _0x1918f5[_0x206abd].message ) { const _0x4d76f7 = await dbQuery( "SELECT status FROM blasts WHERE receiver = '" + _0x1918f5[_0x206abd].receiver + "' AND campaign_id = '" + _0xe0ca6d + "'" ) if (_0x4d76f7.length > 0) { if (_0x4d76f7[0].status === 'pending') { const _0x16a2d7 = wa.sendMessage( _0x3bf57d.sender, _0x1918f5[_0x206abd].receiver, _0x1918f5[_0x206abd].message ) _0x16a2d7.then(async (_0xa2546f) => { _0xa2546f ? await dbQuery( "UPDATE blasts SET status = 'success' WHERE receiver = '" + _0x1918f5[_0x206abd].receiver + "' AND campaign_id = '" + _0xe0ca6d + "'" ) : await dbQuery( "UPDATE blasts SET status = 'failed' WHERE receiver = '" + _0x1918f5[_0x206abd].receiver + "' AND campaign_id = '" + _0xe0ca6d + "'" ) }) } else { console.log('no pending, not send!') } } } else { console.log('wrong data, progress canceled!') } } return true } _0x2767e7().then(() => { delete inProgress[_0xe0ca6d] }) _0x3b2c01.send({ status: 'in_progress' }) } module.exports = { sendBlastMessage: sendBlastMessage } controllers/store.js000064400000003162152265420670010617 0ustar00'use strict' const fs = require('fs'), chats = (_0x5ba3ab, _0x14d4e1) => { const { token: _0x1fc1c1, type: _0x183b08, jid: _0x7e6329 } = _0x5ba3ab.body if (_0x1fc1c1 && _0x183b08) { try { const _0x26834e = fs.readFileSync( 'credentials/' + _0x1fc1c1 + '/multistore.js', { encoding: 'utf8' } ) let _0x317b17 = JSON.parse(_0x26834e) if (_0x183b08 === 'chats') { _0x317b17 = _0x317b17.chats } else { if (_0x183b08 === 'contacts') { _0x317b17 = _0x317b17.contacts } else { if (_0x183b08 === 'messages') { _0x7e6329 ? (_0x317b17 = _0x317b17.messages[_0x7e6329]) : (_0x317b17 = _0x317b17.messages) } else { return _0x14d4e1.send({ status: false, message: 'Unknown type', }) } } } if (typeof _0x317b17 === 'undefined') { return _0x14d4e1.send({ status: false, message: 'Data Not Found', }) } return _0x14d4e1.send( _0x317b17.length > 0 ? _0x317b17.reverse() : _0x317b17 ) } catch (_0x56f938) { return ( process.env.NODE_ENV !== 'production' ? console.log(_0x56f938) : null, _0x14d4e1.send({ status: false, error: _0x56f938, }) ) } } _0x14d4e1.send({ status: false, error: 'wrong parameters', }) } module.exports = { chats: chats } controllers/incomingMessage.js000064400000007361152265420670012600 0ustar00const { dbQuery } = require('../database/index'), { parseIncomingMessage, formatReceipt } = require('../lib/helper') require('dotenv').config() const axios = require('axios'), { isExistsEqualCommand, isExistsContainCommand, getUrlWebhook, } = require('../database/model'), IncomingMessage = async (_0x292a07, _0x30729a) => { try { let _0x49a1b1 = false if (!_0x292a07.messages) { return } _0x292a07 = _0x292a07.messages[0] const _0x1d8ba1 = _0x292a07?.pushName || '' if (_0x292a07.key.fromMe === true) { return } if (_0x292a07.key.remoteJid === 'status@broadcast') { return } const _0x263711 = _0x292a07.key.participant && formatReceipt(_0x292a07.key.participant), { command: _0x571368, bufferImage: _0x29ba23, from: _0xce35de, } = await parseIncomingMessage(_0x292a07) let _0x327fda, _0x54cc71 const _0x59a730 = _0x30729a.user.id.split(':')[0], _0x99901a = await isExistsEqualCommand(_0x571368, _0x59a730) _0x99901a.length > 0 ? (_0x54cc71 = _0x99901a) : (_0x54cc71 = await isExistsContainCommand(_0x571368, _0x59a730)) if (_0x54cc71.length === 0) { console.log(_0x292a07) const _0x5dcb02 = await getUrlWebhook(_0x59a730) if (_0x5dcb02 == null) { return } const _0x1c9769 = await sendWebhook({ command: _0x571368, bufferImage: _0x29ba23, from: _0xce35de, url: _0x5dcb02, participant: _0x263711, }) if (_0x1c9769 === false) { return } if (_0x1c9769 === undefined) { return } if (typeof _0x1c9769 != 'object') { return } _0x49a1b1 = _0x1c9769?.quoted ? true : false _0x327fda = JSON.stringify(_0x1c9769) } else { replyorno = _0x54cc71[0].reply_when == 'All' ? true : _0x54cc71[0].reply_when == 'Group' && _0x292a07.key.remoteJid.includes('@g.us') ? true : _0x54cc71[0].reply_when == 'Personal' && !_0x292a07.key.remoteJid.includes('@g.us') ? true : false if (replyorno === false) { return } _0x49a1b1 = _0x54cc71[0].is_quoted ? true : false _0x327fda = process.env.TYPE_SERVER === 'hosting' ? _0x54cc71[0].reply : JSON.stringify(_0x54cc71[0].reply) } return ( (_0x327fda = _0x327fda.replace(/{name}/g, _0x1d8ba1)), await _0x30729a .sendMessage(_0x292a07.key.remoteJid, JSON.parse(JSON.parse(_0x327fda)), { quoted: _0x49a1b1 ? _0x292a07 : null, }) .catch((_0x502d77) => { console.log(_0x502d77) }), true ) } catch (_0x305b63) { console.log(_0x305b63) } } async function sendWebhook({ command: _0x5f3017, bufferImage: _0x14d9d0, from: _0x5accf5, url: _0x3b5329, participant: _0x4183a9, }) { try { const _0x3c8118 = { message: _0x5f3017, bufferImage: _0x14d9d0 == undefined ? null : _0x14d9d0, from: _0x5accf5, participant: _0x4183a9, }, _0x145623 = { 'Content-Type': 'application/json; charset=utf-8' }, _0x10cce9 = await axios .post(_0x3b5329, _0x3c8118, _0x145623) .catch(() => { return false }) return _0x10cce9.data } catch (_0x4bc63f) { return console.log('error send webhook', _0x4bc63f), false } } module.exports = { IncomingMessage: IncomingMessage } whatsapp.js000064400000046436152265420670006757 0ustar00'use strict' const _ = require('lodash'), { Boom } = require('@hapi/boom'), { default: makeWASocket } = require('@whiskeysockets/baileys'), { fetchLatestBaileysVersion, useMultiFileAuthState, makeCacheableSignalKeyStore, } = require('@whiskeysockets/baileys'), { DisconnectReason } = require('@whiskeysockets/baileys'), QRCode = require('qrcode'), fs = require('fs') let sock = [], qrcode = [], intervalStore = [] const { setStatus } = require('./database/index'), { IncomingMessage } = require('./controllers/incomingMessage'), { formatReceipt } = require('./lib/helper'), axios = require('axios'), MAIN_LOGGER = require('./lib/pino'), logger = MAIN_LOGGER.child({}), connectToWhatsApp = async (_0x35a24c, _0x4909b2 = null) => { if (typeof qrcode[_0x35a24c] !== 'undefined') { return ( _0x4909b2 !== null && _0x4909b2.emit('qrcode', { token: _0x35a24c, data: qrcode[_0x35a24c], message: 'please scan with your Whatsapp Account', }), { status: false, sock: sock[_0x35a24c], qrcode: qrcode[_0x35a24c], message: 'Please scann qrcode', } ) } try { let _0x693274 = sock[_0x35a24c].user.id.split(':') _0x693274 = _0x693274[0] + '@s.whatsapp.net' const _0x358c0e = await getPpUrl(_0x35a24c, _0x693274) return ( _0x4909b2 !== null && (_0x4909b2.emit('connection-open', { token: _0x35a24c, user: sock[_0x35a24c].user, ppUrl: _0x358c0e, }), console.log(sock[_0x35a24c].user)), { status: true, message: 'Already connected', } ) } catch (_0x1429f0) { _0x4909b2 !== null && _0x4909b2.emit('message', { token: _0x35a24c, message: 'Connecting.. (1)', }) } const { version: _0x8d12a9, isLatest: _0x5f5b84 } = await fetchLatestBaileysVersion() console.log( 'You re using whatsapp gateway M Pedia v5.0.0 - Contact admin if any trouble : 082298859671' ) console.log('using WA v' + _0x8d12a9.join('.') + ', isLatest: ' + _0x5f5b84) const { state: _0x510a2c, saveCreds: _0x2e07b7 } = await useMultiFileAuthState('./credentials/' + _0x35a24c) return ( (sock[_0x35a24c] = makeWASocket({ version: _0x8d12a9, browser: ['M Pedia', 'Chrome', '103.0.5060.114'], logger: logger, printQRInTerminal: true, auth: { creds: _0x510a2c.creds, keys: makeCacheableSignalKeyStore(_0x510a2c.keys, logger), }, generateHighQualityLinkPreview: true, })), sock[_0x35a24c].ev.process(async (_0x4aa033) => { if (_0x4aa033['connection.update']) { const _0x2658e2 = _0x4aa033['connection.update'], { connection: _0x301cf7, lastDisconnect: _0x117c76, qr: _0x35d4d1, } = _0x2658e2 if (_0x301cf7 === 'close') { console.log('close') if ( (_0x117c76?.error instanceof Boom)?.output?.statusCode !== DisconnectReason.loggedOut ) { delete qrcode[_0x35a24c] if (_0x4909b2 != null) { _0x4909b2.emit('message', { token: _0x35a24c, message: 'Connecting..', }) } if ( _0x117c76.error?.output?.payload?.message === 'QR refs attempts ended' ) { delete qrcode[_0x35a24c] sock[_0x35a24c].ws.close() if (_0x4909b2 != null) { _0x4909b2.emit('message', { token: _0x35a24c, message: 'Request QR ended. reload scan to request QR again', }) } return } _0x117c76?.error.output.payload.message != 'Stream Errored (conflict)' && connectToWhatsApp(_0x35a24c, _0x4909b2) } else { setStatus(_0x35a24c, 'Disconnect') console.log('Connection closed. You are logged out.') _0x4909b2 !== null && _0x4909b2.emit('message', { token: _0x35a24c, message: 'Connection closed. You are logged out.', }) clearConnection(_0x35a24c) } } _0x35d4d1 && QRCode.toDataURL(_0x35d4d1, function (_0x3992ee, _0x3ce2d5) { _0x3992ee && console.log(_0x3992ee) qrcode[_0x35a24c] = _0x3ce2d5 _0x4909b2 !== null && _0x4909b2.emit('qrcode', { token: _0x35a24c, data: _0x3ce2d5, message: 'Please scan with your Whatsapp Account', }) }) if (_0x301cf7 === 'open') { setStatus(_0x35a24c, 'Connected') let _0x4e27b6 = sock[_0x35a24c].user.id.split(':') _0x4e27b6 = _0x4e27b6[0] + '@s.whatsapp.net' const _0x27278d = await getPpUrl(_0x35a24c, _0x4e27b6) _0x4909b2 !== null && _0x4909b2.emit('connection-open', { token: _0x35a24c, user: sock[_0x35a24c].user, ppUrl: _0x27278d, }) delete qrcode[_0x35a24c] } } if (_0x4aa033['messages.upsert']) { const _0x798c46 = _0x4aa033['messages.upsert'] IncomingMessage(_0x798c46, sock[_0x35a24c]) } if (_0x4aa033['creds.update']) { const _0x32883d = _0x4aa033['creds.update'] _0x2e07b7(_0x32883d) } }), { sock: sock[_0x35a24c], qrcode: qrcode[_0x35a24c], } ) } async function connectWaBeforeSend(_0x270afa) { let _0x13a58c = undefined, _0x219149 _0x219149 = await connectToWhatsApp(_0x270afa) await _0x219149.sock.ev.on('connection.update', (_0x13c2dd) => { const { connection: _0x4aa8b8, qr: _0x5896a7 } = _0x13c2dd _0x4aa8b8 === 'open' && (_0x13a58c = true) _0x5896a7 && (_0x13a58c = false) }) let _0x4e3bed = 0 while (typeof _0x13a58c === 'undefined') { _0x4e3bed++ if (_0x4e3bed > 4) { break } await new Promise((_0x4a5ec6) => setTimeout(_0x4a5ec6, 1000)) } return _0x13a58c } const sendText = async (_0x42e512, _0x1da1d7, _0x1db154) => { try { const _0xe22e3e = await sock[_0x42e512].sendMessage( formatReceipt(_0x1da1d7), { text: _0x1db154 } ) return console.log(_0xe22e3e), _0xe22e3e } catch (_0x5d9851) { return console.log(_0x5d9851), false } }, sendMessage = async (_0x3d99a9, _0x5584b8, _0x5beeaa) => { try { const _0x49895d = await sock[_0x3d99a9].sendMessage( formatReceipt(_0x5584b8), JSON.parse(_0x5beeaa) ) return _0x49895d } catch (_0x17301b) { return console.log(_0x17301b), false } } async function sendMedia( _0x123788, _0x24f183, _0x3e692d, _0x2cd328, _0x233a1e, _0x24bb99, _0x53e10c ) { const _0x56da0d = formatReceipt(_0x24f183) try { if (_0x3e692d == 'image') { var _0x1effd7 = await sock[_0x123788].sendMessage(_0x56da0d, { image: _0x2cd328 ? { url: _0x2cd328 } : fs.readFileSync('src/public/temp/' + fileName), caption: _0x233a1e ? _0x233a1e : null, }) } else { if (_0x3e692d == 'video') { var _0x1effd7 = await sock[_0x123788].sendMessage(_0x56da0d, { video: _0x2cd328 ? { url: _0x2cd328 } : fs.readFileSync('src/public/temp/' + _0x53e10c), caption: _0x233a1e ? _0x233a1e : null, }) } else { if (_0x3e692d == 'audio') { var _0x1effd7 = await sock[_0x123788].sendMessage(_0x56da0d, { audio: _0x2cd328 ? { url: _0x2cd328 } : fs.readFileSync('src/public/temp/' + _0x53e10c), ptt: _0x24bb99 == 0 ? false : true, mimetype: 'audio/mpeg', }) } else { if (_0x3e692d == 'pdf') { var _0x1effd7 = await sock[_0x123788].sendMessage( _0x56da0d, { document: { url: _0x2cd328 }, mimetype: 'application/pdf', fileName: _0x53e10c + '.pdf', }, { url: _0x2cd328 } ) } else { if (_0x3e692d == 'xls') { var _0x1effd7 = await sock[_0x123788].sendMessage( _0x56da0d, { document: { url: _0x2cd328 }, mimetype: 'application/excel', fileName: _0x53e10c + '.xls', }, { url: _0x2cd328 } ) } else { if (_0x3e692d == 'xlsx') { var _0x1effd7 = await sock[_0x123788].sendMessage( _0x56da0d, { document: { url: _0x2cd328 }, mimetype: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', fileName: _0x53e10c + '.xlsx', }, { url: _0x2cd328 } ) } else { if (_0x3e692d == 'doc') { var _0x1effd7 = await sock[_0x123788].sendMessage( _0x56da0d, { document: { url: _0x2cd328 }, mimetype: 'application/msword', fileName: _0x53e10c + '.doc', }, { url: _0x2cd328 } ) } else { if (_0x3e692d == 'docx') { var _0x1effd7 = await sock[_0x123788].sendMessage( _0x56da0d, { document: { url: _0x2cd328 }, mimetype: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', fileName: _0x53e10c + '.docx', }, { url: _0x2cd328 } ) } else { if (_0x3e692d == 'zip') { var _0x1effd7 = await sock[_0x123788].sendMessage( _0x56da0d, { document: { url: _0x2cd328 }, mimetype: 'application/zip', fileName: _0x53e10c + '.zip', }, { url: _0x2cd328 } ) } else { if (_0x3e692d == 'mp3') { var _0x1effd7 = await sock[_0x123788].sendMessage( _0x56da0d, { document: { url: _0x2cd328 }, mimetype: 'application/mp3', }, { url: _0x2cd328 } ) } else { return ( console.log('Please add your won role of mimetype'), { error: true, message: 'Please add your won role of mimetype', } ) } } } } } } } } } } return _0x1effd7 } catch (_0x579151) { return false } } async function sendButtonMessage( _0x374387, _0x2a5ae2, _0x4ef396, _0x5179b2, _0x51d3e8, _0x4ed0ef ) { let _0x10ade2 = 'url' try { const _0x13a5a8 = _0x4ef396.map((_0x5d501f, _0x190b4d) => { return { buttonId: _0x190b4d, buttonText: { displayText: _0x5d501f.displayText }, type: 1, } }) if (_0x4ed0ef) { var _0x2a5869 = { image: _0x10ade2 == 'url' ? { url: _0x4ed0ef } : fs.readFileSync('src/public/temp/' + _0x4ed0ef), caption: _0x5179b2, footer: _0x51d3e8, buttons: _0x13a5a8, headerType: 4, viewOnce: true, } } else { var _0x2a5869 = { text: _0x5179b2, footer: _0x51d3e8, buttons: _0x13a5a8, headerType: 1, viewOnce: true, } } const _0x927440 = await sock[_0x374387].sendMessage( formatReceipt(_0x2a5ae2), _0x2a5869 ) return _0x927440 } catch (_0x210e46) { return console.log(_0x210e46), false } } async function sendTemplateMessage( _0x1342ba, _0x2094e0, _0x497d54, _0x178109, _0x3c90ab, _0x4d88f2 ) { try { if (_0x4d88f2) { var _0xe80e05 = { caption: _0x178109, footer: _0x3c90ab, viewOnce: true, templateButtons: _0x497d54, image: { url: _0x4d88f2 }, viewOnce: true, } } else { var _0xe80e05 = { text: _0x178109, footer: _0x3c90ab, viewOnce: true, templateButtons: _0x497d54, } } const _0x2b69af = await sock[_0x1342ba].sendMessage( formatReceipt(_0x2094e0), _0xe80e05 ) return _0x2b69af } catch (_0x2e9d45) { return console.log(_0x2e9d45), false } } async function sendListMessage( _0x16a83e, _0x9d367f, _0x301e22, _0x7d4969, _0x27ecb9, _0x5f3cc7, _0x4fa5ed ) { try { const _0x30a85f = { text: _0x7d4969, footer: _0x27ecb9, title: _0x5f3cc7, buttonText: _0x4fa5ed, sections: [_0x301e22], viewOnce: true, }, _0x2563fb = await sock[_0x16a83e].sendMessage( formatReceipt(_0x9d367f), _0x30a85f, { ephemeralExpiration: 604800 } ) return _0x2563fb } catch (_0xe90cdf) { return console.log(_0xe90cdf), false } } async function sendPollMessage( _0x439bf9, _0x50bb1a, _0x39310c, _0x5d3163, _0x435761 ) { try { const _0x5df4a5 = await sock[_0x439bf9].sendMessage( formatReceipt(_0x50bb1a), { poll: { name: _0x39310c, values: _0x5d3163, selectableCount: _0x435761, }, } ) return _0x5df4a5 } catch (_0x164014) { return console.log(_0x164014), false } } async function fetchGroups(_0x43c51f) { try { let _0x4bcf7e = await sock[_0x43c51f].groupFetchAllParticipating(), _0x3eff32 = Object.entries(_0x4bcf7e) .slice(0) .map((_0x57db4d) => _0x57db4d[1]) return _0x3eff32 } catch (_0x4ddb93) { return false } } async function isExist(_0x499f83, _0x38a281) { if (typeof sock[_0x499f83] === 'undefined') { const _0x177fb4 = await connectWaBeforeSend(_0x499f83) if (!_0x177fb4) { return false } } try { if (_0x38a281.includes('@g.us')) { return true } else { const [_0x38b693] = await sock[_0x499f83].onWhatsApp(_0x38a281) return _0x38b693 } } catch (_0x18fffc) { return false } } async function getPpUrl(_0x680376, _0x5def92, _0x366f3a) { let _0x55504e try { return ( (_0x55504e = await sock[_0x680376].profilePictureUrl(_0x5def92)), _0x55504e ) } catch (_0x29e924) { return 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/WhatsApp.svg/1200px-WhatsApp.svg.png' } } async function deleteCredentials(_0x2546b3, _0xd00fe0 = null) { _0xd00fe0 !== null && _0xd00fe0.emit('message', { token: _0x2546b3, message: 'Logout Progres..', }) try { if (typeof sock[_0x2546b3] === 'undefined') { const _0x92e56f = await connectWaBeforeSend(_0x2546b3) _0x92e56f && (sock[_0x2546b3].logout(), delete sock[_0x2546b3]) } else { sock[_0x2546b3].logout() delete sock[_0x2546b3] } return ( delete qrcode[_0x2546b3], clearInterval(intervalStore[_0x2546b3]), setStatus(_0x2546b3, 'Disconnect'), _0xd00fe0 != null && (_0xd00fe0.emit('Unauthorized', _0x2546b3), _0xd00fe0.emit('message', { token: _0x2546b3, message: 'Connection closed. You are logged out.', })), fs.existsSync('./credentials/' + _0x2546b3) && fs.rmSync( './credentials/' + _0x2546b3, { recursive: true, force: true, }, (_0x397ae9) => { if (_0x397ae9) { console.log(_0x397ae9) } } ), { status: true, message: 'Deleting session and credential', } ) } catch (_0x3e9c14) { return ( console.log(_0x3e9c14), { status: true, message: 'Nothing deleted', } ) } } async function getChromeLates() { const _0x25e2b9 = await axios.get( 'https://versionhistory.googleapis.com/v1/chrome/platforms/linux/channels/stable/versions' ) return _0x25e2b9 } function clearConnection(_0xccc404) { clearInterval(intervalStore[_0xccc404]) delete sock[_0xccc404] delete qrcode[_0xccc404] setStatus(_0xccc404, 'Disconnect') fs.existsSync('./credentials/' + _0xccc404) && (fs.rmSync( './credentials/' + _0xccc404, { recursive: true, force: true, }, (_0x11ec2d) => { if (_0x11ec2d) { console.log(_0x11ec2d) } } ), console.log('credentials/' + _0xccc404 + ' is deleted')) } async function initialize(_0x2cc5da, _0x5ca167) { const { token: _0x38bd6a } = _0x2cc5da.body if (_0x38bd6a) { const _0x5bdf25 = require('fs'), _0x371d79 = './credentials/' + _0x38bd6a if (_0x5bdf25.existsSync(_0x371d79)) { sock[_0x38bd6a] = undefined const _0x5df5f0 = await connectWaBeforeSend(_0x38bd6a) return _0x5df5f0 ? _0x5ca167.status(200).json({ status: true, message: 'Connection restored', }) : _0x5ca167.status(200).json({ status: false, message: 'Connection failed', }) } return _0x5ca167.send({ status: false, message: _0x38bd6a + ' Connection failed,please scan first', }) } return _0x5ca167.send({ status: false, message: 'Wrong Parameterss', }) } module.exports = { connectToWhatsApp: connectToWhatsApp, sendText: sendText, sendMedia: sendMedia, sendButtonMessage: sendButtonMessage, sendTemplateMessage: sendTemplateMessage, sendListMessage: sendListMessage, sendPollMessage: sendPollMessage, isExist: isExist, getPpUrl: getPpUrl, fetchGroups: fetchGroups, deleteCredentials: deleteCredentials, sendMessage: sendMessage, initialize: initialize, connectWaBeforeSend: connectWaBeforeSend, }