From e4378fe8480a5e20616251b6ebb7d28a1ffe1e76 Mon Sep 17 00:00:00 2001 From: Leifer Mendez Date: Wed, 16 Mar 2022 10:05:13 +0100 Subject: [PATCH] se agego multi-device .env --- .env.example | 3 ++- app.js | 35 ++++++++++++----------------------- controllers/handle.js | 37 ++++++++++++++++++++++++++++++++++++- 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/.env.example b/.env.example index 2bf1f32..92b91de 100644 --- a/.env.example +++ b/.env.example @@ -8,4 +8,5 @@ LANGUAGE=es SQL_HOST= SQL_USER= SQL_PASS= -SQL_DATABASE= \ No newline at end of file +SQL_DATABASE= +MULTI_DEVICE=false \ No newline at end of file diff --git a/app.js b/app.js index a41d4c5..246dd69 100644 --- a/app.js +++ b/app.js @@ -9,7 +9,7 @@ const qrcode = require('qrcode-terminal'); const { Client, LegacySessionAuth, LocalAuth } = require('whatsapp-web.js'); const mysqlConnection = require('./config/mysql') const { middlewareClient } = require('./middleware/client') -const { generateImage, cleanNumber, checkEnvFile } = require('./controllers/handle') +const { generateImage, cleanNumber, checkEnvFile, createClient } = require('./controllers/handle') const { connectionReady, connectionLost } = require('./controllers/connection') const { saveMedia } = require('./controllers/save') const { getMessages, responseMessages, bothResponse } = require('./controllers/flows') @@ -17,7 +17,7 @@ const { sendMedia, sendMessage, lastTrigger, sendMessageButton, readChat } = req const app = express(); app.use(cors()) app.use(express.json()) - +const MULTI_DEVICE = process.env.MULTI_DEVICE || 'false'; const server = require('http').Server(app) const io = require('socket.io')(server, { cors: { @@ -139,20 +139,9 @@ const listenMessage = () => client.on('message', async msg => { * este paso evita volver a escanear el QRCODE */ const withSession = () => { - // Si exsite cargamos el archivo con las credenciales console.log(`Validando session con Whatsapp...`) sessionData = require(SESSION_FILE_PATH); - client = new Client({ - authStrategy: new LegacySessionAuth({ - session: sessionData // saved session object - }), - restartOnAuthFail: true, - puppeteer: { - args: [ - '--no-sandbox' - ], - } - }); + client = new Client(createClient(sessionData,true)); client.on('ready', () => { connectionReady() @@ -179,14 +168,7 @@ const withOutSession = () => { '________________________', ].join('\n')); - client = new Client({ - authStrategy: new LocalAuth(), - puppeteer: { - headless: true, - args: ['--no-sandbox'] - }, - clientId: 'client-one' - }); + client = new Client(createClient()); client.on('qr', qr => generateImage(qr, () => { qrcode.generate(qr, { small: true }); @@ -208,6 +190,13 @@ const withOutSession = () => { client.on('authenticated', (session) => { sessionData = session; + if(sessionData){ + fs.writeFile(SESSION_FILE_PATH, JSON.stringify(session), function (err) { + if (err) { + console.log(`Ocurrio un error con el archivo: `, err); + } + }); + } }); client.initialize(); @@ -223,7 +212,7 @@ const loadRoutes = (client) => { /** * Revisamos si existe archivo con credenciales! */ -(fs.existsSync(SESSION_FILE_PATH)) ? withSession() : withOutSession(); +(fs.existsSync(SESSION_FILE_PATH) && MULTI_DEVICE === 'false') ? withSession() : withOutSession(); /** * Verificamos si tienes un gesto de db diff --git a/controllers/handle.js b/controllers/handle.js index 2639921..e9584d3 100644 --- a/controllers/handle.js +++ b/controllers/handle.js @@ -1,8 +1,10 @@ +const { Client, LegacySessionAuth, LocalAuth } = require('whatsapp-web.js'); const http = require('http'); // or 'https' for https:// URLs const https = require('https'); // or 'https' for https:// URLs const fs = require('fs'); const qr = require('qr-image') +const MULTI_DEVICE = process.env.MULTI_DEVICE || 'false'; const cleanNumber = (number) => { number = number.replace('@c.us', ''); @@ -57,4 +59,37 @@ const checkEnvFile = () => { } } -module.exports = {cleanNumber, saveExternalFile, generateImage, checkIsUrl, checkEnvFile} \ No newline at end of file +/** + * + * @param {*} session + * @param {*} cb + */ +const createClient = (session = {}, login = false) => { + console.log(`Mode: ${(MULTI_DEVICE === 'false') ? 'No Multi-device' : 'Si Multi-device'} `) + const objectLegacy = (login) ? { + authStrategy: new LegacySessionAuth({ + session + }) + } : {session}; + + if(MULTI_DEVICE == 'false') { + return {...objectLegacy, + restartOnAuthFail: true, + puppeteer: { + args: [ + '--no-sandbox' + ], + } + } + }else{ + return { + puppeteer: { + headless: true, + args: ['--no-sandbox'] + }, + clientId: 'client-one' + } + } +} + +module.exports = {cleanNumber, saveExternalFile, generateImage, checkIsUrl, checkEnvFile, createClient} \ No newline at end of file