mirror of
https://github.com/cheveguerra/botLeiferAurik-Mod_2.0.git
synced 2026-04-18 03:39:16 +00:00
feat: API
This commit is contained in:
2
.env
2
.env
@@ -13,4 +13,4 @@ KEEP_DIALOG_FLOW=false
|
||||
MULTI_DEVICE=true
|
||||
DIALOGFLOW_MEDIA_FOR_SLOT_FILLING=false
|
||||
GDRIVE_FOLDER_ID=
|
||||
PROVIDER=baileys
|
||||
PROVIDER=wwebjs
|
||||
@@ -50,8 +50,8 @@ const checkIsUrl = (path) => {
|
||||
}
|
||||
|
||||
const generateImage = (base64, cb = () => {}) => {
|
||||
let qr_svg = qr.image(base64, { type: 'svg', margin: 4 });
|
||||
qr_svg.pipe(require('fs').createWriteStream('./mediaSend/qr-code.svg'));
|
||||
let qr_svg = qr.image(base64, { type: 'png', margin: 4 });
|
||||
qr_svg.pipe(require('fs').createWriteStream('./public/bot.qr.png'));
|
||||
console.log(`⚡ Recuerda que el QR se actualiza cada minuto ⚡'`);
|
||||
console.log(`⚡ Actualiza F5 el navegador para ver el QR mas reciente⚡`);
|
||||
cb()
|
||||
|
||||
@@ -15,8 +15,8 @@ var qr = require('qr-image');
|
||||
* Hace promesa el write
|
||||
* @param {*} base64
|
||||
*/
|
||||
const baileyGenerateImage = async (base64, name = 'qr.png') => {
|
||||
const PATH_QR = `${process.cwd()}/${name}`;
|
||||
const baileyGenerateImage = async (base64, name = 'bot.qr.png') => {
|
||||
const PATH_QR = `${process.cwd()}/public/${name}`;
|
||||
let qr_svg = qr.image(base64, { type: 'png', margin: 4 });
|
||||
|
||||
const writeFilePromise = () =>
|
||||
@@ -87,14 +87,14 @@ initBailey = async () => {
|
||||
if (qr) {
|
||||
console.log('require_action', {
|
||||
instructions: [
|
||||
`Debes escanear el QR Code para iniciar ${globalVendorArgs.name}.qr.png`,
|
||||
`Debes escanear el QR Code para iniciar bot.qr.png`,
|
||||
`Recuerda que el QR se actualiza cada minuto `,
|
||||
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
||||
],
|
||||
});
|
||||
await baileyGenerateImage(
|
||||
qr,
|
||||
`${globalVendorArgs.name}.qr.png`
|
||||
`bot.qr.png`
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
99
package-lock.json
generated
99
package-lock.json
generated
@@ -17,6 +17,7 @@
|
||||
"dotenv": "^16.0.1",
|
||||
"exceljs": "^4.3.0",
|
||||
"express": "^4.18.1",
|
||||
"express-validator": "^6.15.0",
|
||||
"file-type": "^17.1.6",
|
||||
"google-spreadsheet": "^3.3.0",
|
||||
"googleapis": "^109.0.1",
|
||||
@@ -29,7 +30,7 @@
|
||||
"socket.io": "^4.5.1",
|
||||
"stormdb": "^0.6.0",
|
||||
"util-tiempo": "^1.0.41",
|
||||
"whatsapp-web.js": "github:cheveguerra/whatsapp-web.js#WaWJS2",
|
||||
"whatsapp-web.js": "^1.19.4",
|
||||
"xlsx": "^0.18.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -89,9 +90,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.21.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz",
|
||||
"integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==",
|
||||
"version": "7.21.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz",
|
||||
"integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==",
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
@@ -127,9 +128,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@google-cloud/dialogflow": {
|
||||
"version": "5.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/dialogflow/-/dialogflow-5.5.1.tgz",
|
||||
"integrity": "sha512-JVGohHEviAR7NM5X2Wt9SL5n6f1FJEkNllDInM9QO9FKX0d5aUp7Xi/Lk9U6OuflfoxWAj3hrap9MxUIjyrwVA==",
|
||||
"version": "5.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/dialogflow/-/dialogflow-5.6.0.tgz",
|
||||
"integrity": "sha512-T63lyDjoGEZhKXLTjvjr9nFJ3L73+aHMaEKof3uiEmeqaSOBckFnI1dilzGEHwk7jJGpWXMV+eV5RJ1+kAG5Kg==",
|
||||
"dependencies": {
|
||||
"google-gax": "^3.5.2"
|
||||
},
|
||||
@@ -138,9 +139,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@grpc/grpc-js": {
|
||||
"version": "1.8.9",
|
||||
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.9.tgz",
|
||||
"integrity": "sha512-xzsl2HamhovnZddS/2pMF4Q+FgwINaBvxoFGQ+G54Lo7Xsge36VvfDO/TDkL7FofmrRK/X5weRvwlJh7rKwN4w==",
|
||||
"version": "1.8.11",
|
||||
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.11.tgz",
|
||||
"integrity": "sha512-f/xC+6Z2QKsRJ+VSSFlt4hA5KSRm+PKvMWV8kMPkMgGlFidR6PeIkXrOasIY2roe+WROM6GFQLlgDKfeEZo2YQ==",
|
||||
"dependencies": {
|
||||
"@grpc/proto-loader": "^0.7.0",
|
||||
"@types/node": ">=12.12.47"
|
||||
@@ -661,9 +662,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/glob": {
|
||||
"version": "8.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.1.tgz",
|
||||
"integrity": "sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==",
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz",
|
||||
"integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==",
|
||||
"dependencies": {
|
||||
"@types/minimatch": "^5.1.2",
|
||||
"@types/node": "*"
|
||||
@@ -924,9 +925,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/archiver-utils/node_modules/readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"dependencies": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
@@ -1742,9 +1743,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/duplexer2/node_modules/readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"dependencies": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
@@ -2118,6 +2119,18 @@
|
||||
"node": ">= 0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/express-validator": {
|
||||
"version": "6.15.0",
|
||||
"resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.15.0.tgz",
|
||||
"integrity": "sha512-r05VYoBL3i2pswuehoFSy+uM8NBuVaY7avp5qrYjQBDzagx2Z5A77FZqPT8/gNLF3HopWkIzaTFaC4JysWXLqg==",
|
||||
"dependencies": {
|
||||
"lodash": "^4.17.21",
|
||||
"validator": "^13.9.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
@@ -3499,9 +3512,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jszip/node_modules/readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"dependencies": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
@@ -3573,9 +3586,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/lazystream/node_modules/readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"dependencies": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
@@ -4200,9 +4213,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/node-webpmux": {
|
||||
"version": "3.1.4",
|
||||
"resolved": "https://registry.npmjs.org/node-webpmux/-/node-webpmux-3.1.4.tgz",
|
||||
"integrity": "sha512-EgKZEB+T5AG7rbs2i39W+HBqU6OmOTz1EvioPRq2LYW+fZen/l3EKTC5ekkU7cl4/OflTCFRPXy0kIhi+4FunQ=="
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/node-webpmux/-/node-webpmux-3.1.5.tgz",
|
||||
"integrity": "sha512-yfZBMbISp425P8TGKEh2vrOafRBOatwQqiDYDQrEddBYork6gpKPXHbqSU3bOmoIc2fEJ8p+IXiqa1OP+mZPhg=="
|
||||
},
|
||||
"node_modules/normalize-path": {
|
||||
"version": "3.0.0",
|
||||
@@ -5155,9 +5168,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/readable-stream": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||
"version": "3.6.1",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz",
|
||||
"integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==",
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
@@ -5936,9 +5949,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/systeminformation": {
|
||||
"version": "5.17.9",
|
||||
"resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.17.9.tgz",
|
||||
"integrity": "sha512-inxwRLI/4qpx4o85R54/zdhNagdBGBgs0la7Vl3qBorRVKRDk0nNsDTCGzG4lOITsw1gl7LRWeG4Zsp1pC8nfg==",
|
||||
"version": "5.17.10",
|
||||
"resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.17.10.tgz",
|
||||
"integrity": "sha512-FUm264baeDpruTw4P50BRRmYHD39D3jkOQ0VpNIkp8CdNejQbsp4Me18jacGBc/mWSVxKdQw4wSHmcL7ERxrNg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -6215,9 +6228,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/unzipper/node_modules/readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"dependencies": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
@@ -6291,6 +6304,14 @@
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/validator": {
|
||||
"version": "13.9.0",
|
||||
"resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz",
|
||||
"integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==",
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/vary": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||
@@ -6359,8 +6380,8 @@
|
||||
},
|
||||
"node_modules/whatsapp-web.js": {
|
||||
"version": "1.19.4",
|
||||
"resolved": "git+ssh://git@github.com/cheveguerra/whatsapp-web.js.git#83560a2b5647d3accd039ce1f663f908edcfc960",
|
||||
"license": "Apache-2.0",
|
||||
"resolved": "https://registry.npmjs.org/whatsapp-web.js/-/whatsapp-web.js-1.19.4.tgz",
|
||||
"integrity": "sha512-qwfdauW3rKsI2gzRexFU5y+SumXjuZTidyZXFIXaWfPzMe4ejxAkVoj/u27wyNZDqK3Z8tI/Ac3ZJFG60VgA6w==",
|
||||
"dependencies": {
|
||||
"@pedroslopez/moduleraid": "^5.0.2",
|
||||
"fluent-ffmpeg": "^2.1.2",
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
"dotenv": "^16.0.1",
|
||||
"exceljs": "^4.3.0",
|
||||
"express": "^4.18.1",
|
||||
"express-validator": "^6.15.0",
|
||||
"file-type": "^17.1.6",
|
||||
"google-spreadsheet": "^3.3.0",
|
||||
"googleapis": "^109.0.1",
|
||||
@@ -31,7 +32,7 @@
|
||||
"socket.io": "^4.5.1",
|
||||
"stormdb": "^0.6.0",
|
||||
"util-tiempo": "^1.0.41",
|
||||
"whatsapp-web.js": "github:cheveguerra/whatsapp-web.js#WaWJS2",
|
||||
"whatsapp-web.js": "^1.19.4",
|
||||
"xlsx": "^0.18.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -21,8 +21,8 @@ var qr = require('qr-image');
|
||||
* Hace promesa el write
|
||||
* @param {*} base64
|
||||
*/
|
||||
const baileyGenerateImage = async (base64, name = 'qr.png') => {
|
||||
const PATH_QR = `${process.cwd()}/${name}`;
|
||||
const baileyGenerateImage = async (base64, name = 'bot.qr.png') => {
|
||||
const PATH_QR = `${process.cwd()}/public/${name}`;
|
||||
let qr_svg = qr.image(base64, { type: 'png', margin: 4 });
|
||||
|
||||
const writeFilePromise = () =>
|
||||
@@ -89,7 +89,7 @@ initBot = async () => {
|
||||
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
||||
],
|
||||
});
|
||||
await baileyGenerateImage(qr, `${globalVendorArgs.name}.qr.png`);
|
||||
await baileyGenerateImage(qr, `bot.qr.png`);
|
||||
}
|
||||
});
|
||||
sock.ev.on('creds.update', async () => { await saveCreds() });
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { Client, LocalAuth, Buttons, List } = require('whatsapp-web.js');
|
||||
require('dotenv').config()
|
||||
const express = require('express');
|
||||
const bodyParser = require("body-parser");
|
||||
const cors = require('cors')
|
||||
const qrcode = require('qrcode-terminal');
|
||||
const app = express();
|
||||
@@ -10,8 +11,20 @@ const server = require('http').Server(app)
|
||||
const port = process.env.PORT || 3000
|
||||
const { generateImage, checkEnvFile } = require('../controllers/handle')
|
||||
const { connectionReady } = require('../controllers/connection')
|
||||
const { body, validationResult } = require('express-validator');
|
||||
app.use('/', require('../routes/web'))
|
||||
|
||||
|
||||
const { Server } = require("socket.io");
|
||||
const io = new Server(server);
|
||||
|
||||
// app.use(bodyParser.json({ limit: "50mb" }));
|
||||
// app.use(cors());
|
||||
app.use(express.json());
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
|
||||
let socks
|
||||
|
||||
initBot = async () => {
|
||||
console.log("WaWebJS Init")
|
||||
const client = new Client({
|
||||
@@ -19,12 +32,6 @@ initBot = async () => {
|
||||
puppeteer: { headless: true, args: ['--no-sandbox','--disable-setuid-sandbox'] }
|
||||
});
|
||||
|
||||
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) => {
|
||||
connectionReady()
|
||||
// listenMessage(client)
|
||||
@@ -50,11 +57,133 @@ initBot = async () => {
|
||||
if (process.env.DATABASE === 'mysql') {
|
||||
mysqlConnection.connect()
|
||||
}
|
||||
let waReady = false
|
||||
// Socket IO
|
||||
io.on('connection', async function (socket) {
|
||||
console.log("Connecting ...")
|
||||
socks = socket
|
||||
|
||||
await socket.emit('message', 'Connecting...');
|
||||
|
||||
socket.on('checkConn', async function () { // Si recibe mensaje, regresa "connOk"
|
||||
console.log("checking conn")
|
||||
await socket.emit('connOk', 'Connected');
|
||||
})
|
||||
|
||||
try {
|
||||
client.on('message', () => {
|
||||
console.log(waReady)
|
||||
socket.emit('incomming', 'Message In')
|
||||
waReady = true
|
||||
})
|
||||
client.on('qr', qr => generateImage(qr, async () => {
|
||||
qrcode.generate(qr, { small: true });
|
||||
console.log(`Ver QR http://localhost:${port}/bot.qr.png`)
|
||||
await socket.emit('qr', `http://localhost:${port}/bot.qr.png`);
|
||||
await socket.emit('message', 'QR Code received, scan please!');
|
||||
}))
|
||||
|
||||
client.on('ready', async () => {
|
||||
await socket.emit('ready', 'Whatsapp is ready!');
|
||||
await socket.emit('message', 'Whatsapp is ready!');
|
||||
waReady = true
|
||||
});
|
||||
|
||||
client.on('authenticated', async () => {
|
||||
await socket.emit('authenticated', 'Whatsapp is authenticated!');
|
||||
await socket.emit('message', 'Whatsapp is authenticated!');
|
||||
// console.log('AUTHENTICATED');
|
||||
});
|
||||
|
||||
client.on('auth_failure', async function (session) {
|
||||
await socket.emit('message', 'Auth failure, restarting...');
|
||||
waReady = false
|
||||
});
|
||||
|
||||
client.on('disconnected', async (reason) => {
|
||||
await socket.emit('message', 'Whatsapp is disconnected!');
|
||||
waReady = false
|
||||
// client.destroy();
|
||||
// client.initialize();
|
||||
})
|
||||
}
|
||||
catch (e) {waReady = false }
|
||||
|
||||
});
|
||||
|
||||
server.listen(port, () => {
|
||||
console.log(`El server esta listo en el puerto ${port}`);
|
||||
})
|
||||
|
||||
const phoneNumberFormatter = function (number) {
|
||||
// 1. Menghilangkan karakter selain angka
|
||||
let formatted = number.replace(/\D/g, '');
|
||||
|
||||
// 2. Menghilangkan angka 0 di depan (prefix)
|
||||
// Kemudian diganti dengan 62
|
||||
if (formatted.startsWith('0')) {
|
||||
formatted = '62' + formatted.substr(1);
|
||||
}
|
||||
|
||||
if (!formatted.endsWith('@c.us')) {
|
||||
formatted += '@c.us';
|
||||
}
|
||||
|
||||
return formatted;
|
||||
}
|
||||
|
||||
const checkRegisteredNumber = async function (number) {
|
||||
const isRegistered = await client.isRegisteredUser(number);
|
||||
return isRegistered;
|
||||
}
|
||||
|
||||
// Send message
|
||||
app.post('/send-message', [
|
||||
body('number').notEmpty(),
|
||||
body('message').notEmpty(),
|
||||
], async (req, res) => {
|
||||
|
||||
console.log("xxxxxxxx", req.body)
|
||||
|
||||
socks.emit('incomming', 'Message In')
|
||||
|
||||
const errors = validationResult(req).formatWith(({
|
||||
msg
|
||||
}) => {
|
||||
return msg;
|
||||
});
|
||||
|
||||
if (!errors.isEmpty()) {
|
||||
return res.status(422).json({
|
||||
status: false,
|
||||
message: errors.mapped()
|
||||
});
|
||||
}
|
||||
|
||||
const number = phoneNumberFormatter(req.body.number);
|
||||
const message = req.body.message;
|
||||
const isRegisteredNumber = await checkRegisteredNumber(number);
|
||||
if (!isRegisteredNumber) {
|
||||
return res.status(422).json({
|
||||
status: false,
|
||||
message: 'The number is not registered'
|
||||
});
|
||||
}
|
||||
|
||||
client.sendMessage(number, message).then(response => {
|
||||
res.status(200).json({
|
||||
status: true,
|
||||
response: response
|
||||
});
|
||||
}).catch(err => {
|
||||
res.status(500).json({
|
||||
status: false,
|
||||
response: err
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
checkEnvFile();
|
||||
return client
|
||||
}
|
||||
|
||||
188
public/index.html
Normal file
188
public/index.html
Normal file
@@ -0,0 +1,188 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Whatsapp API by Ngekoding</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<!-- This parts is optional, just for improve the styles -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
#app {
|
||||
max-width: 500px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
#qrcode {
|
||||
/* display: none; */
|
||||
/* Showed when qr code received */
|
||||
width: 100%;
|
||||
margin: 10px 0;
|
||||
border: 1px solid #efefef;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
ul.logs {
|
||||
max-height: 150px;
|
||||
padding: 15px 15px 15px 30px;
|
||||
margin-top: 5px;
|
||||
border-radius: 4px;
|
||||
overflow-y: auto;
|
||||
background: #efefef;
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ul.logs li:first-child {
|
||||
color: green;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="app">
|
||||
<div style="text-align:center;">
|
||||
<h1>Whatsapp API</h1>
|
||||
<br>
|
||||
<div id="qrDiv" style=""display:none;>
|
||||
<img src="bot.qr.png" alt="QR Code" id="qrcode" style="width:300px">
|
||||
<div id="countdown" style="margin-top:-25px"></div>
|
||||
</div>
|
||||
<div id="postman" style="display:flex;justify-content:center;">
|
||||
<table>
|
||||
<tr>
|
||||
<td>Número:</td><td><input type="text" id="number" value="5215554192439"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mensaje:</td><td><input type="text" id="message" value="test1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td><td align="center"><input type="button" id="btnMessage" value="Enviar Mensaje"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<input type="button" id="chkConn" value="ChkConn">
|
||||
<br>
|
||||
<h3>Logs:</h3>
|
||||
<ul class="logs"></ul>
|
||||
</div>
|
||||
|
||||
<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>
|
||||
let downloadTimer;
|
||||
let IntervaloABorrar
|
||||
let waReady = false
|
||||
$(document).ready(function () {
|
||||
if(waReady == false) { $("#btnMessage").attr("disabled", true)}
|
||||
var socket = io();
|
||||
socket.on('message', function (msg) {
|
||||
$('.logs').prepend($('<li>').text(msg));
|
||||
console.log("|"+msg+"|");
|
||||
if(msg == 'Connecting...') { $('#qrDiv').hide(); $('#postman').show(); waReady = false, $("#btnMessage").attr("disabled", true) }
|
||||
if(msg == 'Whatsapp is ready!'){ $("#btnMessage").attr("disabled", false) }
|
||||
});
|
||||
socket.on('qr', function (src) {
|
||||
var extra = Date.now();
|
||||
console.log(extra)
|
||||
$('#qrcode').attr('src', src+'?'+extra);
|
||||
$('#postman').hide();
|
||||
$('#qrDiv').show();
|
||||
waReady = false;
|
||||
$("#btnMessage").attr("disabled", true)
|
||||
startImer()
|
||||
});
|
||||
socket.on('ready', function (data) {
|
||||
$('#qrDiv').hide();
|
||||
$('#postman').show();
|
||||
clearInterval(IntervaloABorrar);
|
||||
});
|
||||
socket.on('authenticated', function (data) {
|
||||
$('#qrDiv').hide();
|
||||
$('#postman').show();
|
||||
});
|
||||
socket.on("connect_error", (err) => {
|
||||
$('.logs').prepend($('<li>').text("¡Error de conexión!"));
|
||||
waReady = false
|
||||
$("#btnMessage").attr("disabled", true)
|
||||
console.log(`connect_error due to ${err.message}`);
|
||||
});
|
||||
socket.on('incomming', function(){
|
||||
if(waReady == false){
|
||||
$('.logs').prepend($('<li>').text('Whatsapp is ready!'));
|
||||
console.log("incomming")
|
||||
$("#btnMessage").attr("disabled", false)
|
||||
waReady = true
|
||||
}
|
||||
})
|
||||
socket.on('connOk', function(){
|
||||
console.log("connOk")
|
||||
if (waReady == false) {
|
||||
$('.logs').prepend($('<li>').text('Whatsapp is ready!'));
|
||||
console.log("incomming")
|
||||
$("#btnMessage").attr("disabled", false)
|
||||
waReady = true
|
||||
}
|
||||
})
|
||||
$("#chkConn").on('click', async function () {
|
||||
console.log("check Conn");
|
||||
socket.emit('checkConn', 'check conn');
|
||||
})
|
||||
function revisaConexion(){
|
||||
var checkConnection = setInterval(function () {
|
||||
if (waReady == false) {
|
||||
socket.emit('checkConn', 'check conn');
|
||||
console.log("chk conn")
|
||||
IntervaloABorrar = checkConnection
|
||||
clearInterval(IntervaloABorrar)
|
||||
console.log("borrado " + IntervaloABorrar)
|
||||
}
|
||||
}, 2000);
|
||||
}
|
||||
revisaConexion();
|
||||
});
|
||||
function startImer(){
|
||||
clearInterval(IntervaloABorrar);
|
||||
var timeleft = 60;
|
||||
console.log(typeof downloadTimer)
|
||||
var downloadTimer = setInterval(function () {
|
||||
if (timeleft <= 0) {
|
||||
IntervaloABorrar = downloadTimer
|
||||
clearInterval(IntervaloABorrar);
|
||||
document.getElementById("countdown").innerHTML = "Finished";
|
||||
// startImer();
|
||||
} else {
|
||||
document.getElementById("countdown").innerHTML = timeleft + " seconds remaining";
|
||||
}
|
||||
console.log(typeof downloadTimer + "|" + downloadTimer)
|
||||
IntervaloABorrar = downloadTimer
|
||||
timeleft -= 1;
|
||||
}, 1000);
|
||||
}
|
||||
$('#btnMessage').on('click', function(){
|
||||
console.log("msg clicked")
|
||||
$.post("http://localhost:3005/send-message/", { "number": $("#number").val(), "message": $("#message").val() })
|
||||
.done(function (data) {
|
||||
console.log(data.status);
|
||||
if(data.status == true){alert("¡Mensaje enviado!")}
|
||||
});
|
||||
}
|
||||
)
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,7 +1,15 @@
|
||||
const express = require('express');
|
||||
const router = express.Router()
|
||||
const { getQr } = require('../controllers/web')
|
||||
var path = require('path');
|
||||
|
||||
router.use('/qr', getQr)
|
||||
// router.use('/qr', getQr)
|
||||
var staticFilesPath0 = path.resolve('./', 'public');
|
||||
var staticFilesPath = path.resolve('./', 'public/index.html');
|
||||
console.log(staticFilesPath)
|
||||
router.use(express.static(staticFilesPath0));
|
||||
router.get('/', (req, res) => {
|
||||
res.sendFile(staticFilesPath)
|
||||
});
|
||||
|
||||
module.exports = router
|
||||
Reference in New Issue
Block a user