mirror of
https://github.com/cheveguerra/botLeiferAurik-Mod_2.0.git
synced 2026-04-19 20:29:23 +00:00
feat: Imagenes
This commit is contained in:
2448
package-lock.json
generated
2448
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,7 @@
|
|||||||
"dotenv": "^16.0.1",
|
"dotenv": "^16.0.1",
|
||||||
"exceljs": "^4.3.0",
|
"exceljs": "^4.3.0",
|
||||||
"express": "^4.18.1",
|
"express": "^4.18.1",
|
||||||
|
"express-fileupload": "^1.4.0",
|
||||||
"express-validator": "^6.15.0",
|
"express-validator": "^6.15.0",
|
||||||
"file-type": "^17.1.6",
|
"file-type": "^17.1.6",
|
||||||
"google-spreadsheet": "^3.3.0",
|
"google-spreadsheet": "^3.3.0",
|
||||||
@@ -26,9 +27,11 @@
|
|||||||
"mime-db": "^1.52.0",
|
"mime-db": "^1.52.0",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
|
"open": "^8.4.2",
|
||||||
"pb-util": "^1.0.3",
|
"pb-util": "^1.0.3",
|
||||||
"qr-image": "^3.2.0",
|
"qr-image": "^3.2.0",
|
||||||
"qrcode-terminal": "^0.12.0",
|
"qrcode-terminal": "^0.12.0",
|
||||||
|
"react-dev-utils": "^12.0.1",
|
||||||
"socket.io": "^4.5.1",
|
"socket.io": "^4.5.1",
|
||||||
"stormdb": "^0.6.0",
|
"stormdb": "^0.6.0",
|
||||||
"util-tiempo": "^1.0.41",
|
"util-tiempo": "^1.0.41",
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
const { Client, LocalAuth, Buttons, List } = require('whatsapp-web.js');
|
const { MessageMedia, Client, LocalAuth, Buttons, List } = require('whatsapp-web.js');
|
||||||
const { sendMedia, sendMessage, sendMessageButton, sendMessageList, readChat } = require(`../controllers/send`);
|
const { sendMedia, sendMessage, sendMessageButton, sendMessageList, readChat } = require(`../controllers/send`);
|
||||||
|
const mime = require('mime-types')
|
||||||
require('dotenv').config()
|
require('dotenv').config()
|
||||||
|
const fs = require('fs');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const bodyParser = require("body-parser");
|
const bodyParser = require("body-parser");
|
||||||
const cors = require('cors')
|
const cors = require('cors')
|
||||||
@@ -8,11 +10,14 @@ const qrcode = require('qrcode-terminal');
|
|||||||
const app = express();
|
const app = express();
|
||||||
app.use(cors())
|
app.use(cors())
|
||||||
app.use(express.json())
|
app.use(express.json())
|
||||||
|
// Use the express-fileupload middleware
|
||||||
const server = require('http').Server(app)
|
const server = require('http').Server(app)
|
||||||
const port = process.env.PORT || 3000
|
const port = process.env.PORT || 3000
|
||||||
const { generateImage, checkEnvFile } = require('../controllers/handle')
|
const { generateImage, checkEnvFile } = require('../controllers/handle')
|
||||||
const { connectionReady } = require('../controllers/connection')
|
const { connectionReady } = require('../controllers/connection')
|
||||||
const { body, validationResult } = require('express-validator');
|
const { body, validationResult } = require('express-validator');
|
||||||
|
const fileUpload = require('express-fileupload');
|
||||||
|
app.use(fileUpload());
|
||||||
app.use('/', require('../routes/web'))
|
app.use('/', require('../routes/web'))
|
||||||
|
|
||||||
|
|
||||||
@@ -31,7 +36,7 @@ initBot = async () => {
|
|||||||
console.log("Iniciamos WaWebJS")
|
console.log("Iniciamos WaWebJS")
|
||||||
client = new Client({
|
client = new Client({
|
||||||
authStrategy: new LocalAuth(),
|
authStrategy: new LocalAuth(),
|
||||||
puppeteer: { headless: true, args: ['--no-sandbox','--disable-setuid-sandbox'] }
|
pup: { headless: true, args: ['--no-sandbox','--disable-setuid-sandbox'] }
|
||||||
});
|
});
|
||||||
client.on('ready', (a) => {
|
client.on('ready', (a) => {
|
||||||
connectionReady()
|
connectionReady()
|
||||||
@@ -86,7 +91,7 @@ initBot = async () => {
|
|||||||
client.on('ready', async () => {
|
client.on('ready', async () => {
|
||||||
socketioStatus = "wa_ready"
|
socketioStatus = "wa_ready"
|
||||||
await socket.emit('ready', 'Whatsapp esta listo!');
|
await socket.emit('ready', 'Whatsapp esta listo!');
|
||||||
await socket.emit('message', 'Whatsapp esta listo!');
|
await socket.emit('message', 'Whatsapp está listo!');
|
||||||
waReady = true
|
waReady = true
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -112,9 +117,9 @@ initBot = async () => {
|
|||||||
}
|
}
|
||||||
catch (e) {waReady = false }
|
catch (e) {waReady = false }
|
||||||
|
|
||||||
});
|
});
|
||||||
server.listen(port, () => {
|
server.listen(port, () => {
|
||||||
console.log(`El servidor web esta listo en el puerto ${port} - http://localhost:${port}`);
|
console.log(`El servidor web esta listo en el puerto ${port} - http://localhost:${port}`);
|
||||||
})
|
})
|
||||||
const phoneNumberFormatter = function (number) {
|
const phoneNumberFormatter = function (number) {
|
||||||
// 1. Eliminar caracteres que no sean números
|
// 1. Eliminar caracteres que no sean números
|
||||||
@@ -217,6 +222,63 @@ initBot = async () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
// Send image
|
||||||
|
app.post('/send-image', async (req, res) => {
|
||||||
|
console.log("REQUEST=", req.body)
|
||||||
|
socks.emit('incomming', 'Image In')
|
||||||
|
const number = phoneNumberFormatter(req.body.number);
|
||||||
|
// const filename = req.body.image || null;
|
||||||
|
const caption = req.body.caption || null;
|
||||||
|
const { image } = req.files;
|
||||||
|
// If no image submitted, exit
|
||||||
|
if (!image) return res.sendStatus(400);
|
||||||
|
// Move the uploaded image to our upload folder
|
||||||
|
image.mv(__dirname + '/../mediaSend/' + image.name);
|
||||||
|
res.sendStatus(200);
|
||||||
|
const isRegisteredNumber = await checkRegisteredNumber(number);
|
||||||
|
if (!isRegisteredNumber) {
|
||||||
|
return res.status(422).json({
|
||||||
|
status: false,
|
||||||
|
message: 'The number is not registered'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// sendMedia(client, number, image.name, caption)
|
||||||
|
// `${__dirname}/../mediaSend`;
|
||||||
|
const file = `${__dirname}/../mediaSend/${image.name}`;
|
||||||
|
console.log("FILE="+file);
|
||||||
|
if (fs.existsSync(file)) {
|
||||||
|
console.log("ARCHIVO EXISTE");
|
||||||
|
const media = MessageMedia.fromFilePath(file);
|
||||||
|
}
|
||||||
|
const base64 = fs.readFileSync(file, { encoding: 'base64' })
|
||||||
|
const mimeType = mime.lookup(file)
|
||||||
|
const media = new MessageMedia(mimeType, base64)
|
||||||
|
client.sendMessage(number, media, { caption }).then(response => {
|
||||||
|
socks.emit('imgOk', 'image sent')
|
||||||
|
console.log("Imagen OK")
|
||||||
|
// res.status(200).json({
|
||||||
|
// status: true,
|
||||||
|
// response: response
|
||||||
|
// });
|
||||||
|
|
||||||
|
}).catch(err => {
|
||||||
|
socks.emit('imgKo', 'image NOT sent')
|
||||||
|
console.log("Imagen NOT OK")
|
||||||
|
// res.status(500).json({
|
||||||
|
// status: false,
|
||||||
|
// response: err
|
||||||
|
// });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// app.post('/upload', async (req, res) => {
|
||||||
|
// // Get the file that was set to our field named "image"
|
||||||
|
// const { image } = req.files;
|
||||||
|
// // If no image submitted, exit
|
||||||
|
// if (!image) return res.sendStatus(400);
|
||||||
|
// // Move the uploaded image to our upload folder
|
||||||
|
// image.mv(__dirname + '/../mediaSend/' + image.name);
|
||||||
|
// res.sendStatus(200);
|
||||||
|
// });
|
||||||
|
|
||||||
checkEnvFile();
|
checkEnvFile();
|
||||||
return client
|
return client
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<select id="tipoMensaje">
|
<select id="tipoMensaje">
|
||||||
<option>Mensaje</option>
|
<option>Mensaje</option>
|
||||||
<!-- <option>Imagen</option> -->
|
<option>Imagen</option>
|
||||||
<option>Botones</option>
|
<option>Botones</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@@ -120,26 +120,28 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div id="postImg">
|
<div id="postImg">
|
||||||
<table>
|
<table>
|
||||||
|
<form action="/send-image" method="POST" id="imgForm" enctype="multipart/form-data">
|
||||||
<tr>
|
<tr>
|
||||||
<td>Número:</td>
|
<td>Número:</td>
|
||||||
<td><input type="text" id="number" value="5215554192439"></td>
|
<td><input type="text" id="imgnumber" value="5215554192439" style="width:160px;"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Imagen:</td>
|
<td>Imagen:</td>
|
||||||
<td><input type="text" id="image" value="test1"></td>
|
<td><input type="file" id="imgimage" name="imgimage" style="width:160px;" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Texto:</td>
|
<td>Texto:</td>
|
||||||
<td><input type="text" id="caption" placeholder="El texto aquí"></td>
|
<td><input type="text" id="imgcaption" placeholder="El texto aquí" style="width:160px;"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td align="center"><input type="button" id="btnImg" value="Enviar Mensaje"></td>
|
<td align="center"><input type="button" id="btnImg" value="Enviar Mensaje"></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</form>
|
||||||
</table>
|
</table>
|
||||||
</div> -->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <input type="button" id="chkConn" value="QR"> -->
|
<!-- <input type="button" id="chkConn" value="QR"> -->
|
||||||
@@ -148,6 +150,14 @@
|
|||||||
<ul class="logs"></ul>
|
<ul class="logs"></ul>
|
||||||
</div>
|
</div>
|
||||||
<div id="div_wa_msg" style="display: none;"></div>
|
<div id="div_wa_msg" style="display: none;"></div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- <form action="/send-image" method="POST" enctype="multipart/form-data">
|
||||||
|
<input type="text" name="number" value="5215554192439"><br>
|
||||||
|
<input type="text" name="caption" placeholder="El texto de la imagen"><br>
|
||||||
|
<input type="file" name="image" />
|
||||||
|
<button type="submit">Upload</button>
|
||||||
|
</form> -->
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" crossorigin="anonymous"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" crossorigin="anonymous"></script>
|
||||||
<script src="/socket.io/socket.io.js" crossorigin="anonymous"></script>
|
<script src="/socket.io/socket.io.js" crossorigin="anonymous"></script>
|
||||||
<script>
|
<script>
|
||||||
@@ -175,13 +185,16 @@
|
|||||||
$("#div_wa_msg").fadeOut("slow")
|
$("#div_wa_msg").fadeOut("slow")
|
||||||
}, 1500);
|
}, 1500);
|
||||||
})
|
})
|
||||||
|
socket.on('imgOk', function (msg) {
|
||||||
|
alert("¡Imagen mandada con exito!")
|
||||||
|
})
|
||||||
socket.on('message', function (msg) {
|
socket.on('message', function (msg) {
|
||||||
$('.logs').prepend($('<li>').text(msg));
|
$('.logs').prepend($('<li>').text(msg));
|
||||||
console.log("|" + msg + "|");
|
console.log("|" + msg + "|");
|
||||||
console.log("MENSAJES = " + $(".logs li").length)
|
console.log("MENSAJES = " + $(".logs li").length)
|
||||||
if($(".logs li").length >= 15){ $('.logs li').last().remove(); }
|
if($(".logs li").length >= 15){ $('.logs li').last().remove(); }
|
||||||
if (msg == 'Conectando...' && IOSTATUS == "wa_ready") { $('#divQRPage').hide(); $('#postman').show(); waReady = false, $("#btnMessage").attr("disabled", true); $("#btnBtn").attr("disabled", true); }
|
if (msg == 'Conectando...' && IOSTATUS == "wa_ready") { $('#divQRPage').hide(); $('#postman').show(); waReady = false, $("#btnMessage").attr("disabled", true); $("#btnBtn").attr("disabled", true); }
|
||||||
if (msg == 'Whatsapp esta listo!') { $("#btnMessage").attr("disabled", false); $("#btnBtn").attr("disabled", false); }
|
// if (msg == 'Whatsapp esta listo!') { $("#btnMessage").attr("disabled", false); $("#btnBtn").attr("disabled", false); }
|
||||||
})
|
})
|
||||||
socket.on('qr', function (src) {
|
socket.on('qr', function (src) {
|
||||||
var extra = Date.now();
|
var extra = Date.now();
|
||||||
@@ -196,8 +209,10 @@
|
|||||||
startImer()
|
startImer()
|
||||||
})
|
})
|
||||||
socket.on('ready', function (data) {
|
socket.on('ready', function (data) {
|
||||||
$("#divQRPage").hide()
|
$("#divQRPage").hide();
|
||||||
$('#postman').show();
|
$('#postman').show();
|
||||||
|
$("#btnMessage").attr("disabled", false);
|
||||||
|
$("#btnBtn").attr("disabled", false);
|
||||||
clearInterval(IntervaloABorrar);
|
clearInterval(IntervaloABorrar);
|
||||||
})
|
})
|
||||||
socket.on('authenticated', function (data) {
|
socket.on('authenticated', function (data) {
|
||||||
@@ -302,6 +317,31 @@
|
|||||||
}
|
}
|
||||||
else{alert("Es necesario llenar por lo menos el número, mensaje y boton1.")}
|
else{alert("Es necesario llenar por lo menos el número, mensaje y boton1.")}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$("#btnImg").click(function () {
|
||||||
|
var fd = new FormData();
|
||||||
|
console.log("IMAGEN=" + $('#imgimage')[0]?.files[0])
|
||||||
|
var files = $('#imgimage')[0].files[0];
|
||||||
|
fd.append('image', files);
|
||||||
|
fd.append('number', $("#imgnumber").val())
|
||||||
|
fd.append('caption', $("#imgcaption").val())
|
||||||
|
$.ajax({
|
||||||
|
url: 'http://localhost:3005/send-image/',
|
||||||
|
type: 'POST',
|
||||||
|
data: fd,
|
||||||
|
contentType: false,
|
||||||
|
processData: false,
|
||||||
|
success: function (response) {
|
||||||
|
if (response != 0) {
|
||||||
|
// alert('file uploaded');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
alert('file not uploaded');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
$("#tipoMensaje").change(function () {
|
$("#tipoMensaje").change(function () {
|
||||||
let sel = $("select option:selected").val()
|
let sel = $("select option:selected").val()
|
||||||
console.log(sel)
|
console.log(sel)
|
||||||
|
|||||||
Reference in New Issue
Block a user