Update Julio 2022

Se añade localAuth para mantener la session despues de escanear el codigo y se hace un code fix al api rest

Co-Authored-By: Leifer Mendez <15802366+leifermendez@users.noreply.github.com>
This commit is contained in:
aurik3
2022-07-19 18:15:12 -05:00
parent d45ea85e7d
commit 1114f25a71
7 changed files with 5607 additions and 417 deletions

View File

@@ -21,6 +21,7 @@ getReply = (option_key = '', callback) => connection.query(
replyMessage:response?.replyMessage || '',
trigger:response?.trigger || '',
media:response?.media || ''
}
callback(value)
});

76
app.js
View File

@@ -6,7 +6,7 @@ const fs = require('fs');
const express = require('express');
const cors = require('cors')
const qrcode = require('qrcode-terminal');
const { Client } = require('whatsapp-web.js');
const { Client,LocalAuth } = require('whatsapp-web.js');
const mysqlConnection = require('./config/mysql')
const { middlewareClient } = require('./middleware/client')
const { generateImage, cleanNumber, checkEnvFile, createClient, isValidNumber } = require('./controllers/handle')
@@ -21,10 +21,7 @@ const MULTI_DEVICE = process.env.MULTI_DEVICE || 'true';
const server = require('http').Server(app)
const port = process.env.PORT || 3000
const SESSION_FILE_PATH = './session.json';
var client;
var sessionData;
app.use('/', require('./routes/web'))
/**
@@ -127,77 +124,38 @@ const listenMessage = () => client.on('message', async msg => {
}
});
/**
* Revisamos si tenemos credenciales guardadas para inciar sessio
* este paso evita volver a escanear el QRCODE
*/
const withSession = () => {
console.log(`Validando session con Whatsapp...`)
sessionData = require(SESSION_FILE_PATH);
client = new Client(createClient(sessionData,true));
client.on('ready', () => {
connectionReady()
listenMessage()
client = new Client({
authStrategy: new LocalAuth(),
puppeteer: { headless: true }
});
client.on('auth_failure', () => connectionLost())
client.initialize();
}
/**
* Generamos un QRCODE para iniciar sesion
*/
const withOutSession = () => {
console.log('No tenemos session guardada');
console.log([
'🙌 El core de whatsapp se esta actualizando',
'🙌 para proximamente dar paso al multi-device',
'🙌 falta poco si quieres estar al pendiente unete',
'🙌 http://t.me/leifermendez',
'🙌 Si estas usando el modo multi-device se generan 2 QR Code escanealos',
'🙌 Ten paciencia se esta generando el QR CODE',
'________________________',
].join('\n'));
client = new Client(createClient());
client.on('qr', qr => generateImage(qr, () => {
client.on('qr', qr => generateImage(qr, () => {
qrcode.generate(qr, { small: true });
console.log(`Ver QR http://localhost:${port}/qr`)
socketEvents.sendQR(qr)
}))
}))
client.on('ready', (a) => {
client.on('ready', (a) => {
connectionReady()
listenMessage()
// socketEvents.sendStatus(client)
});
});
client.on('auth_failure', (e) => {
client.on('auth_failure', (e) => {
// console.log(e)
// connectionLost()
});
});
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.on('authenticated', () => {
console.log('AUTHENTICATED');
});
client.initialize();
}
/**
* Revisamos si existe archivo con credenciales!
*/
(fs.existsSync(SESSION_FILE_PATH) && MULTI_DEVICE === 'false') ? withSession() : withOutSession();
/**
* Verificamos si tienes un gesto de db

View File

@@ -1,9 +1,9 @@
const mysql = require('mysql');
const connection = mysql.createConnection({
host : process.env.SQL_HOST || 'localhost',
user : process.env.SQL_USER || 'me',
user : process.env.SQL_USER || 'root',
password : process.env.SQL_PASS || '',
database : process.env.SQL_DATABASE || 'my_db'
database : process.env.SQL_DATABASE || 'pruebas'
});
const connect = () => connection.connect(function(err) {

View File

@@ -64,32 +64,14 @@ const checkEnvFile = () => {
* @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'
}
}
const createClient = () => {
client = new Client({
authStrategy: new LocalAuth(
{dataPath: './sessions/',
clientId: 'bot'}),
puppeteer: { headless: false }
});
}
const isValidNumber = (rawNumber) => {

View File

@@ -2,6 +2,7 @@ const fs = require('fs')
const { sendMessage } = require('../controllers/send')
const sendMessagePost = (req, res) => {
console.log('asdasdasdasdasd')
const { message, number } = req.body
const client = req.clientWs || null;
sendMessage(client, number, message)

5906
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
const express = require('express')
const router = express.Router();
const { sendMessagePost } = require('../controllers/web')
const { sendMessagePost } = require('../controllers/web')|
router.post('/send', sendMessagePost)