Wa Gateway | Multi device BETA | MPWA MD

Wa Gateway | Multi device BETA | MPWA MD v8.0.0 ( Extended License )

No permission to download

Morehere

Well-known member
Null Master
Trusted Uploader
Jan 13, 2020
965
959
93
Well you are correct there was a lost of manual work but I have automated the process and reduced the manual work to only 2 steps, you can deobfuscate the file in 10 seconds, I will share the steps and code as soon as possible
Sure. All are hoping for this.
 
  • Like
Reactions: average_coder

Morehere

Well-known member
Null Master
Trusted Uploader
Jan 13, 2020
965
959
93
My only concern is, if the script author is present in this forum and I open share the solution, he will patch it in the further updates
Author are everywhere bro.
That's why I use to say all user to use SPOILER feature so that search engine will not find anything that are inside SPOILER.
 
  • Like
Reactions: average_coder

DreamCasters

New member
Sep 10, 2020
6
-4
3
Hello community,

Wa Gateway | Multi device BETA | V4.0.0 MPWA MD​

Script has its own pros and cons but to unlock the true modding potential, one has to decrypt the server files, So I was working on the tool that can deobfuscate the server files of this particular script and I have made some progress and I want to share it with you all, I will share the other files soon

Here is decrypted whatsapp.js file -- Hit like and let me know if it works for you! 😉
JavaScript:
'use strict';
const _0x53cdf0 = _0x5f5b;
(function (_0x3d2668, _0x28b219) {
    const _0x104606 = _0x5f5b,
        _0x1dd4b6 = _0x3d2668();
    while (true) {
        try {
            const _0x2cf8ee = -parseInt(_0x104606(0x145)) / 0x1 + -parseInt(_0x104606(0x132)) / 0x2 + parseInt(_0x104606(0xfe)) / 0x3 + -parseInt(_0x104606(0x121)) / 0x4 * (parseInt(_0x104606(0x102)) / 0x5) + -parseInt(_0x104606(0xff)) / 0x6 + -parseInt(_0x104606(0x139)) / 0x7 + parseInt(_0x104606(0x114)) / 0x8;
            if (_0x2cf8ee === _0x28b219) break;
            else _0x1dd4b6.push(_0x1dd4b6.shift());
        } catch (_0x3ff965) {
            _0x1dd4b6.push(_0x1dd4b6.shift());
        }
    }
}(_0x3d17, 0xe76d4));
const {
    default: makeWASocket,
    makeWALegacySocket,
    downloadContentFromMessage
} = require('@adiwajshing/baileys'), {
    useSingleFileAuthState,
    makeInMemoryStore,
    fetchLatestBaileysVersion,
    AnyMessageContent,
    delay,
    MessageRetryMap,
    useMultiFileAuthState
} = require('@adiwajshing/baileys'), {
    DisconnectReason
} = require('@adiwajshing/baileys'), QRCode = require('qrcode'), lib = require('../../lib'), fs = require('fs');
let sock = [],
    qrcode = [],
    intervalStore = [];
const {
    setStatus
} = require('../../database/index'), {
    autoReply
} = require('./autoreply'), {
    formatReceipt
} = require('../helper'), axios = require('axios'), MAIN_LOGGER = require('../../lib/pino'), logger = MAIN_LOGGER.child({}), useStore = !process.argv.includes('--no-store'), msgRetryCounterMap = () => MessageRetryMap = {}, connectToWhatsApp = async (sender, socket = null) => {
    const _0x34ef30 = _0x53cdf0;
    if (typeof qrcode[sender] !== 'undefined') return socket !== null && socket.emit('qrcode', {
        'token': sender,
        'data': qrcode[sender],
        'message': 'Qrcode updated, please scann with your Whatsapp Device'
    }), {
        'status': false,
        'sock': sock[sender],
        'qrcode': qrcode[sender],
        'message': 'Please scan qrcode'
    };
    try {
        let receiver = sock[sender].user.id.split(':');
        receiver = receiver[0x0] + '@s.whatsapp.net';
        const profile_url = await getPpUrl(sender, receiver);
        return socket !== null && socket.emit('connection-open', {
            'token': sender,
            'user': sock[sender].user,
            'ppUrl': profile_url
        }), {
            'status': true,
            'message': 'Already connected'
        };
    } catch (err) {
        socket !== null && socket.emit('message', {
            'token': sender,
            'message': 'Try to connecting ' + sender
        }), console.log('Try to connecting ' + sender);
    }
    const {
        state: auth_state,
        saveCreds: cred_object
    } = await useMultiFileAuthState('./credentials/' + sender), browser = await getChromeLates();
    console.log('using Chrome v' + browser?. ['data']?. ['versions'][0x0]?. ['version'] + ', isLatest: ' + (browser?. ['data']?. ['versions'].length > 0x0 ? !![] : false));
    const {
        version: version_,
        isLatest: isLatest_
    } = await fetchLatestBaileysVersion();
    return console.log('using WA v' + version_.join('.') + ', isLatest: ' + isLatest_), sock[sender] = makeWASocket({
        'version': version_,
        'browser': ['M Pedia', 'Chrome', browser?. ['data']?. ['versions'][0x0]?. ['version']],
        'logger': logger,
        'printQRInTerminal': true,
        'auth': auth_state
    }), sock[sender].ev.on('messages.upsert', auto_message => {
        autoReply(auto_message, sock[sender]);
    }), sock[sender].ev.on('connection.update', async message_data => {
        const _0x1188bf = _0x34ef30,
            {
                connection: connector,
                qr: qr_data,
                lastDisconnect: last_session
            } = message_data;
        if (connector === 'close') {
            if (last_session.error?. ['output']?. ['statusCode'] !== DisconnectReason.loggedOut) {
                if (last_session.error?. ['output']?. ['payload']?. ['message'] === 'Stream Errored (restart required)') {
                    delete qrcode[sender], connectToWhatsApp(sender, socket);
                    if (socket != null) socket.emit('message', {
                        'token': sender,
                        'message': 'Reconnecting'
                    });
                } else {
                    if (last_session.error?. ['output']?. ['payload']?. ['message'] === 'QR refs attempts ended') {
                        delete qrcode[sender];
                        if (socket != null) socket.emit('message', {
                            'token': sender,
                            'message': last_session.error.output.payload.message,
                            'error': last_session.error.output.payload.error
                        });
                    }
                }
            } else last_session.error?. ['output']?. ['statusCode'] === 0x191 && (setStatus(sender, 'close'), console.log('Connection closed. You are logged out.'), socket !== null && socket.emit('message', {
                'token': sender,
                'message': 'Connection closed. You are logged out.'
            }), clearConnection(sender));
        }
        qr_data && QRCode.toDataURL(qr_data, function (sned_qr_data, rec_data) {

            sned_qr_data && console.log(sned_qr_data), qrcode[sender] = rec_data, socket !== null && socket.emit('qrcode', {
                'token': sender,
                'data': rec_data,
                'message': 'Qrcode updated, please scann with your Whatsapp Device'
            });
        });
        if (connector === 'open') {
            setStatus(sender, 'Connected');
            let output_splitted = sock[sender].user.id.split(':');
            output_splitted = output_splitted[0x0] + '@s.whatsapp.net';
            const dp_url = await getPpUrl(sender, output_splitted);
            socket !== null && socket.emit('connection-open', {
                'token': sender,
                'user': sock[sender].user,
                'ppUrl': dp_url
            }), delete qrcode[sender];
        }
    }), sock[sender].ev.on('creds.update', cred_object), {
        'sock': sock[sender],
        'qrcode': qrcode[sender]
    };
};

async function connectWaBeforeSend(data) {
    let result = undefined,
        client;
    client = await connectToWhatsApp(data), await client.sock.ev.on('connection.update', request => {
        const {
            connection: connector,
            qr: qr_code
        } = request;
        connector === 'open' && (result = true), qr_code && (result = false);
    });
    let count = 0;
    while (typeof result === 'undefined') {
        count++;
        if (count > 4) break;
        await new Promise(reconnect => setTimeout(reconnect, 0x3e8));
    }
    return result;
}
const sendText = async (sender, receiver, message) => {
    try {
        const result = await sock[sender].sendMessage(formatReceipt(receiver), {
            'text': message
        });
        return result;
    } catch (error) {
        return console.log(error), false;
    }
}, sendMessage = async (sender, receiver, message) => {
    const _0x4a1cbd = _0x53cdf0;
    try {
        const _0x523010 = JSON.parse(message);
        let is_alive = false;
        receiver.length > 0xe ? (receiver = receiver + '@g.us', is_alive = true) : is_alive = await isExist(sender, formatReceipt(receiver));
        if (is_alive) {
            const result = await sock[sender].sendMessage(formatReceipt(receiver), JSON.parse(message));
            return result;
        }
        return false;
    } catch (error) {
        return console.log(error), false;
    }
};

function _0x3d17() {
    const _0x198639 = ['xls', '../../database/index', 'application/pdf', ' connection was estabilished', 'child', 'log', 'Stream Errored (restart required)', 'readFileSync', 'creds.update', 'bizWapi', 'get', '@adiwajshing/baileys', 'length', '3284448TUdtXz', 'axios', 'open', 'logout', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'versions', '../helper', '6870878MSMRKt', 'connection.update', 'rmSync', 'Reconnecting', ' is deleted', 'Nothing deleted', 'application/msword', 'Already connected', 'video', '--no-store', 'docx', 'connection-open', '272287hRnbEV', 'argv', '@s.whatsapp.net', 'messages.upsert', 'url', 'src/public/temp/', 'slice', 'sendMessage', 'error', 'existsSync', 'qrcode', 'send', 'Qrcode updated, please scann with your Whatsapp Device', 'Try to connecting ', 'displayText', 'user', 'Deleting session and credential', 'close', 'Disconnect', 'payload', 'groupFetchAllParticipating', 'Please scann qrcode', '1439961qHlakO', '4759482zkFHia', './credentials/', 'message', '449035ZYiFlH', 'Chrome', 'map', 'includes', 'version', 'join', 'toDataURL', 'exports', 'Connection closed. You are logged out.', 'output', 'data', 'application/mp3', ', isLatest: ', 'xlsx', 'using Chrome v', 'undefined', 'using WA v', 'QR refs attempts ended', '45471744TqkmcE', '@g.us', 'application/excel', 'entries', 'split', 'Logout Progres..', 'Please add your won role of mimetype', ' Connection failed,please scan first', '../../lib', '../../lib/pino', 'emit', 'body', 'image', '68xnViIa', 'profilePictureUrl', 'statusCode', './autoreply'];
    _0x3d17 = function () {
        return _0x198639;
    };
    return _0x3d17();
}
async function sendMedia(sender, receiver, type, url, option, caption) {
    const getListType = _0x53cdf0,
        formatted_receiver = formatReceipt(receiver);
    try {
        if (type == 'image') var message = await sock[sender].sendMessage(formatted_receiver, {
            'image': url ? {
                'url': url
            } : fs.readFileSync('src/public/temp/' + option),
            'caption': caption ? caption : null
        });
        else {
            if (type == 'video') var message = await sock[sender].sendMessage(formatted_receiver, {
                'video': url ? {
                    'url': url
                } : fs.readFileSync('src/public/temp/' + option),
                'caption': caption ? caption : null
            });
            else {
                if (type == 'audio') var message = await sock[sender].sendMessage(formatted_receiver, {
                    'audio': url ? {
                        'url': url
                    } : fs.readFileSync('src/public/temp/' + option),
                    'caption': caption ? caption : null
                });
                else {
                    if (type == 'pdf') var message = await sock[sender].sendMessage(formatted_receiver, {
                        'document': {
                            'url': url
                        },
                        'mimetype': 'application/pdf'
                    }, {
                        'url': url
                    });
                    else {
                        if (type == 'xls') var message = await sock[sender].sendMessage(formatted_receiver, {
                            'document': {
                                'url': url
                            },
                            'mimetype': 'application/excel'
                        }, {
                            'url': url
                        });
                        else {
                            if (type == 'xls') var message = await sock[sender].sendMessage(formatted_receiver, {
                                'document': {
                                    'url': url
                                },
                                'mimetype': 'application/excel'
                            }, {
                                'url': url
                            });
                            else {
                                if (type == 'xlsx') var message = await sock[sender].sendMessage(formatted_receiver, {
                                    'document': {
                                        'url': url
                                    },
                                    'mimetype': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
                                }, {
                                    'url': url
                                });
                                else {
                                    if (type == 'doc') var message = await sock[sender].sendMessage(formatted_receiver, {
                                        'document': {
                                            'url': url
                                        },
                                        'mimetype': 'application/msword'
                                    }, {
                                        'url': url
                                    });
                                    else {
                                        if (type == 'docx') var message = await sock[sender].sendMessage(formatted_receiver, {
                                            'document': {
                                                'url': url
                                            },
                                            'mimetype': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
                                        }, {
                                            'url': url
                                        });
                                        else {
                                            if (type == 'zip') var message = await sock[sender].sendMessage(formatted_receiver, {
                                                'document': {
                                                    'url': url
                                                },
                                                'mimetype': 'application/zip'
                                            }, {
                                                'url': url
                                            });
                                            else {
                                                if (type == 'mp3') var message = await sock[sender].sendMessage(formatted_receiver, {
                                                    'document': {
                                                        'url': url
                                                    },
                                                    'mimetype': 'application/mp3'
                                                }, {
                                                    'url': url
                                                });
                                                else return console.log('Please add your won role of mimetype'), false;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return message;
    } catch (error) {
        return console.log(error), false;
    }
}

function _0x5f5b(_0x425622, _0x2aa1fb) {
    const _0x3d17aa = _0x3d17();
    return _0x5f5b = function (_0x5f5b5d, _0x2f1675) {
        _0x5f5b5d = _0x5f5b5d - 0xf2;
        let _0x43bf93 = _0x3d17aa[_0x5f5b5d];
        return _0x43bf93;
    }, _0x5f5b(_0x425622, _0x2aa1fb);
}

async function sendButtonMessage(sender, receiver, type, caption, footer, url) {
    const _0x2a7fed = _0x53cdf0;


    try {
        const button = type.map((displayText, Id) => {
            return console.log(displayText), {
                'buttonId': Id,
                'buttonText': {
                    'displayText': displayText.displayText
                },
                'type': 1
            };
        });
        if (url) var message = {
            'image': {
                'url': url
            },
            'caption': caption,
            'footer': footer,
            'buttons': button,
            'headerType': 4
        };
        else var message = {
            'text': caption,
            'footer': footer,
            'buttons': button,
            'headerType': 1
        };
        console.log('message: ', message)
        const result = await sock[sender].sendMessage(formatReceipt(receiver), message);
        return result;
    } catch (error) {
        return console.log(error), false;
    }
}
async function sendTemplateMessage(sender, receiver, button_obj, caption, footer, downloadFilePath) {
    try {
        console.log(button_obj);
        if (downloadFilePath) var message = {
            'caption': caption,
            'footer': footer,
            'templateButtons': button_obj,
            'image': {
                'url': downloadFilePath
            }
        };
        else var message = {
            'text': caption,
            'footer': footer,
            'templateButtons': button_obj
        };
        const result = await sock[sender].sendMessage(formatReceipt(receiver), message);
        return result;
    } catch (error) {
        return console.log(error), false;
    }
}
async function sendListMessage(sender, receiver, list, text, footer, title, button) {
    try {
        const message = {
                'text': text,
                'footer': footer,
                'title': title,
                'buttonText': button,
                'sections': [list]
            },
            result = await sock[sender].sendMessage(formatReceipt(receiver), message);
        return result;
    } catch (error) {
        return console.log(error), false;
    }
}
async function fetchGroups(sender) {
    const _0x23b434 = _0x53cdf0;
    try {
        let result = await sock[sender].groupFetchAllParticipating(),
            contacts = Object.entries(result).slice(0x0).map(_0x538ede => _0x538ede[0x1]);
        return contacts;
    } catch (err) {
        return false;
    }
}
async function isExist(sender, receiver) {
    const _0x55681a = _0x53cdf0;
    if (typeof sock[sender] === 'undefined') {
        const connector = await connectWaBeforeSend(sender);
        if (!connector) return false;
    }
    try {
        if (receiver.includes('@g.us')) return true;
        else {
            const [result] = await sock[sender].onWhatsApp(receiver);
            return result;
        }
    } catch (err) {
        return false;
    }
}
async function getPpUrl(phone_sender, whatsapp_id, dp_url) {
    const _0x26c4fb = _0x53cdf0;
    let result;
    try {
        return dp_url ? result = await sock[phone_sender].profilePictureUrl(whatsapp_id, 'image') : result = await sock[phone_sender].profilePictureUrl(whatsapp_id), result;
    } catch (err) {
        return 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/WhatsApp.svg/1200px-WhatsApp.svg.png';
    }
}
async function deleteCredentials(sender, new_socket = null) {
    const _0x4cb3fa = _0x53cdf0;
    new_socket !== null && new_socket.emit('message', {
        'token': sender,
        'message': 'Logout Progres..'
    });
    try {
        if (typeof sock[sender] === 'undefined') {
            const _0x11f88b = await connectWaBeforeSend(sender);
            _0x11f88b && (sock[sender].logout(), delete sock[sender]);
        } else sock[sender].logout(), delete sock[sender];
        return delete qrcode[sender], clearInterval(intervalStore[sender]), setStatus(sender, 'Disconnect'), new_socket != null && (new_socket.emit('Unauthorized', sender), new_socket.emit('message', {
            'token': sender,
            'message': 'Connection closed. You are logged out.'
        })), fs.existsSync('./credentials/' + sender) && fs.rmSync('./credentials/' + sender, {
            'recursive': true,
            'force': true
        }, success => {
            if (success) console.log(success);
        }), {
            'status': true,
            'message': 'Deleting session and credential'
        };
    } catch (error) {
        return console.log(error), {
            'status': true,
            'message': 'Nothing deleted'
        };
    }
}
async function getChromeLates() {
    const _0x2b49a9 = _0x53cdf0,
        result = await axios.get('https://versionhistory.googleapis.com/v1/chrome/platforms/linux/channels/stable/versions');
    return result;
}

function clearConnection(sender) {
    const _0x5c878a = _0x53cdf0;
    clearInterval(intervalStore[sender]), delete sock[sender], delete qrcode[sender], setStatus(sender, 'close'), fs.existsSync('./credentials/' + sender) && (fs.rmSync('./credentials/' + sender, {
        'recursive': true,
        'force': true
    }, _0x41de93 => {
        const _0x487767 = _0x5c878a;
        if (_0x41de93) console.log(_0x41de93);
    }), console.log('credentials/' + sender + ' is deleted'));
}
async function initialize(token, response) {
    const _0x198e90 = _0x53cdf0,
        {
            token: sender
        } = token.body;

    if (sender) {
        const fs = require('fs'),
            path = './credentials/' + sender;
        if (fs.existsSync(path)) {
            if (typeof sock[sender] === 'undefined') {
                const connect = await connectWaBeforeSend(sender);
                return connect ? response.send({
                    'status': true,
                    'message': sender + ' connection was estabilished'
                }) : response.send({
                    'status': false,
                    'message': sender + ' Connection failed,please scan first'
                });
            }
            return response.send({
                'status': true,
                'message': sender + ' connection was estabilished'
            });
        }
        return response.send({
            'status': false,
            'message': sender + ' Connection failed,please scan first'
        });
    }
    return response.send({
        'status': false,
        'message': 'Wrong Parameterss'
    });
}
module[_0x53cdf0(0x109)] = {
    'connectToWhatsApp': connectToWhatsApp,
    'sendText': sendText,
    'sendMedia': sendMedia,
    'sendButtonMessage': sendButtonMessage,
    'sendTemplateMessage': sendTemplateMessage,
    'sendListMessage': sendListMessage,
    'isExist': isExist,
    'getPpUrl': getPpUrl,
    'fetchGroups': fetchGroups,
    'deleteCredentials': deleteCredentials,
    'sendMessage': sendMessage,
    'initialize': initialize,
    'connectWaBeforeSend': connectWaBeforeSend
};
Note- (If you are not a modder or have no knowledge of basic developing, have some patience, a tutorial will be made available for you soon)
That's what i need thanks for awesome work !
 
  • Like
Reactions: blackaligator

ayonaikkereta

Member
Aug 22, 2022
40
10
8
has anyone found a solution for scheduled messages and message templates, buttons, lists?

for scheduled messages I've done a cronjob and the test is running but the scheduled message can't work


Pakar IT Jogja
 
Last edited:

birbull51

Member
Jul 30, 2022
31
7
8
Everything is working fine for me finally after a long time spend. Now only one thing is pending is "How to PDF/MP4 campaign?"
 

bug7sec

Active member
Babiato Lover
Dec 18, 2020
113
151
43
localhost
anyone help how to solve Button msg & Lists msg if click not respond in group?
i write manual work, if click button not work/button not respond
 

birbull51

Member
Jul 30, 2022
31
7
8
Nothing special i am using the same script but I am unable to find a option to send PDF or MP4 file in bulk campaign. While there is an option to send Media in test message but not found the option to send Media files like PDF or Mp4 in Campaign
 

Argentino

Active member
May 1, 2020
127
66
28
Nothing special i am using the same script but I am unable to find a option to send PDF or MP4 file in bulk campaign. While there is an option to send Media in test message but not found the option to send Media files like PDF or Mp4 in Campaign
Do the buttons work for you? autoreply? cronjob?
 

bug7sec

Active member
Babiato Lover
Dec 18, 2020
113
151
43
localhost
//send a template message on webhook! if u need

Code:
function try3(){
     $templateButtons = [
         ['index' => 1, 'urlButton' => ['displayText' => '⭐ Star Baileys on GitHub!', 'url' => 'https://github.com/adiwajshing/Baileys']],
         ['index' => 2, 'callButton' => ['displayText' => 'Call me!', 'phoneNumber' => '+1 (234) 5678-901']],
         ['index' => 3, 'quickReplyButton' => ['displayText' => 'This is a reply, just like normal buttons!', 'id' => 'id-like-buttons-message']],
     ];
     $templateMessage = [
         'text' => 'Hi it's a template message',
         'footer' => '```©IT-Wil3```',
         'templateButtons' => $templateButtons
     ];
     return $templateMessage;
 }
 

Raydar

Member
Jan 21, 2021
50
13
8
Please guys, how can i make my whatsApp server always online.. cos i notice after an 1hour my instance goes offline, making autoreply not work until i have to open my site and reload the page for it to come online. i want my whatsapp to always be online 24hours 7 days.
 

About us

  • Our community has been around for many years and pride ourselves on offering unbiased, critical discussion among people of all different backgrounds. We are working every day to make sure our community is one of the best.

Quick Navigation

User Menu