mirror of
https://github.com/cheveguerra/botLeiferAurik-Mod_2.0.git
synced 2026-04-20 04:39:26 +00:00
feat: API
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user