mirror of
https://github.com/cheveguerra/botLeiferAurik-Mod_2.0.git
synced 2026-04-19 04:09:29 +00:00
Inicial
This commit is contained in:
133
provider/baileys.js
Normal file
133
provider/baileys.js
Normal file
@@ -0,0 +1,133 @@
|
||||
const { default: makeWASocket, useMultiFileAuthState, Browsers, DisconnectReason } = require ('@adiwajshing/baileys')
|
||||
var pino = require('pino');
|
||||
const { createWriteStream } = require('fs')
|
||||
var combineImage = require('combine-image');
|
||||
const { path, join } = require('path');
|
||||
const rimraf = require('rimraf')
|
||||
// function listenMessage(client){
|
||||
// client.on('messages.upsert', async msg => {
|
||||
// console.log('MSG=', msg)
|
||||
// console.log('REPLY TO=', msg.messages[0])
|
||||
// // await sock.sendMessage(m.messages[0].key.remoteJid, { text: 'hola como estas' })
|
||||
// })
|
||||
// }
|
||||
|
||||
// const { default: makeWASocket, useMultiFileAuthState, Browsers, DisconnectReason } = baileysReq
|
||||
const globalVendorArgs = { name: `bot` }
|
||||
var qr = require('qr-image');
|
||||
|
||||
/**
|
||||
* Hace promesa el write
|
||||
* @param {*} base64
|
||||
*/
|
||||
const baileyGenerateImage = async (base64, name = 'qr.png') => {
|
||||
const PATH_QR = `${process.cwd()}/${name}`;
|
||||
let qr_svg = qr.image(base64, { type: 'png', margin: 4 });
|
||||
|
||||
const writeFilePromise = () =>
|
||||
new Promise((resolve, reject) => {
|
||||
const file = qr_svg.pipe(createWriteStream(PATH_QR));
|
||||
file.on('finish', () => resolve(true));
|
||||
file.on('error', reject);
|
||||
});
|
||||
|
||||
await writeFilePromise();
|
||||
|
||||
const cleanImage = await combineImage([PATH_QR], {
|
||||
margin: 15,
|
||||
color: 0xffffffff,
|
||||
});
|
||||
cleanImage.write(PATH_QR);
|
||||
};
|
||||
/**
|
||||
* Iniciar todo Bailey
|
||||
*/
|
||||
initBot = async () => {
|
||||
console.log("Baileys Init")
|
||||
const NAME_DIR_SESSION = `baileys_sessions`;
|
||||
const { state, saveCreds } = await useMultiFileAuthState(
|
||||
NAME_DIR_SESSION
|
||||
);
|
||||
saveCredsGlobal = saveCreds;
|
||||
const sock = makeWASocket({
|
||||
// can provide additional config here
|
||||
printQRInTerminal: true,
|
||||
auth: state,
|
||||
browser: Browsers.macOS('Desktop'),
|
||||
syncFullHistory: false,
|
||||
logger: pino({ level: 'error' }),
|
||||
})
|
||||
try {
|
||||
sock.ev.on('connection.update', async (update) => {
|
||||
const { connection, lastDisconnect, qr } = update;
|
||||
const statusCode = lastDisconnect?.error?.output?.statusCode;
|
||||
if(connection === 'close') {
|
||||
if (statusCode !== DisconnectReason.loggedOut) {
|
||||
initBot();
|
||||
}
|
||||
if (statusCode === DisconnectReason.loggedOut) {
|
||||
const PATH_BASE = join(process.cwd(), NAME_DIR_SESSION);
|
||||
rimraf(PATH_BASE, (err) => {
|
||||
if (err) return
|
||||
});
|
||||
initBot();
|
||||
}
|
||||
}
|
||||
/** Conexion abierta correctamente */
|
||||
if (connection === 'open') {
|
||||
console.log('ready', true);
|
||||
// initBusEvents(sock);
|
||||
}
|
||||
/** QR Code */
|
||||
if (qr) {
|
||||
console.log('require_action', {
|
||||
instructions: [
|
||||
`Debes escanear el QR Code para iniciar ${globalVendorArgs.name}.qr.png`,
|
||||
`Recuerda que el QR se actualiza cada minuto `,
|
||||
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
||||
],
|
||||
});
|
||||
await baileyGenerateImage(qr, `${globalVendorArgs.name}.qr.png`);
|
||||
}
|
||||
});
|
||||
sock.ev.on('creds.update', async () => { await saveCreds() });
|
||||
}
|
||||
catch (e) {
|
||||
logger.log(e);
|
||||
console.log('auth_failure', [
|
||||
`Algo inesperado ha ocurrido NO entres en pánico`,
|
||||
`Reinicia el BOT`,
|
||||
`Tambien puedes mirar un log que se ha creado baileys.log`,
|
||||
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
||||
`(Puedes abrir un ISSUE) https://github.com/codigoencasa/bot-whatsapp/issues/new/choose`,
|
||||
]);
|
||||
}
|
||||
// listenMessage(sock.ev)
|
||||
return sock
|
||||
}
|
||||
// run in main file
|
||||
// initBot()
|
||||
|
||||
/**
|
||||
* Regresa las variables from, body, name y hasMedia de el objeto del mensaje.
|
||||
* @param {*} msg
|
||||
* @returns from, body, name, hasMedia
|
||||
*/
|
||||
function traeVariables(msg){
|
||||
const { remoteJid } = msg.messages[0].key
|
||||
const { pushName } = msg.messages[0]
|
||||
// console.log("THE_MSG = ", client.theMsg.messages[0])
|
||||
// console.log("*** CONVERSATION=", client.theMsg.messages[0].message?.conversation)
|
||||
// console.log("*** SELECTEDDISPLAYTEXT=", client.theMsg.messages[0].message?.buttonsResponseMessage?.selectedDisplayText)
|
||||
// console.log("*** TITLE=", client.theMsg.messages[0].message?.listResponseMessage?.title)
|
||||
let theBody = msg.messages[0].message?.conversation || msg.messages[0].message?.buttonsResponseMessage?.selectedDisplayText || msg.messages[0].message?.listResponseMessage?.title
|
||||
let from = remoteJid
|
||||
let body = theBody
|
||||
let name = pushName
|
||||
let hasMedia = false
|
||||
// console.log("fromBody=", from, body)
|
||||
return {"from":from, "body":body, "name":name, "hasMedia":hasMedia}
|
||||
}
|
||||
|
||||
|
||||
module.exports = { initBot, baileyGenerateImage, makeWASocket, traeVariables }
|
||||
65
provider/download.js
Normal file
65
provider/download.js
Normal file
@@ -0,0 +1,65 @@
|
||||
const mimeDep = require('mime-types')
|
||||
const { tmpdir } = require('os')
|
||||
const http = require('http')
|
||||
const https = require('https')
|
||||
const { rename, createWriteStream } = require('fs')
|
||||
|
||||
/**
|
||||
* Extrar el mimetype from buffer
|
||||
* @param {string} response
|
||||
* @returns
|
||||
*/
|
||||
const fileTypeFromFile = async (response) => {
|
||||
const type = response.headers['content-type'] ?? null
|
||||
const ext = mimeDep.extension(type)
|
||||
return {
|
||||
type,
|
||||
ext,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Descargar archivo binay en tmp
|
||||
* @param {*} url
|
||||
* @returns
|
||||
*/
|
||||
const generalDownload = async (url) => {
|
||||
const handleDownload = () => {
|
||||
const checkProtocol = url.includes('https:')
|
||||
const handleHttp = checkProtocol ? https : http
|
||||
const name = `tmp-${Date.now()}-dat`
|
||||
const fullPath = `${tmpdir()}/${name}`
|
||||
const file = createWriteStream(fullPath)
|
||||
|
||||
return new Promise((res, rej) => {
|
||||
handleHttp.get(url, function (response) {
|
||||
response.pipe(file)
|
||||
file.on('finish', async function () {
|
||||
file.close()
|
||||
res({ response, fullPath })
|
||||
})
|
||||
file.on('error', function () {
|
||||
file.close()
|
||||
rej(null)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const handleFile = (pathInput, ext) =>
|
||||
new Promise((resolve, reject) => {
|
||||
const fullPath = `${pathInput}.${ext}`
|
||||
rename(pathInput, fullPath, (err) => {
|
||||
if (err) reject(null)
|
||||
resolve(fullPath)
|
||||
})
|
||||
})
|
||||
|
||||
const httpResponse = await handleDownload()
|
||||
const { ext } = await fileTypeFromFile(httpResponse.response)
|
||||
const getPath = await handleFile(httpResponse.fullPath, ext)
|
||||
|
||||
return getPath
|
||||
}
|
||||
|
||||
module.exports = { generalDownload }
|
||||
74
provider/wwebjs.js
Normal file
74
provider/wwebjs.js
Normal file
@@ -0,0 +1,74 @@
|
||||
const { Client, LocalAuth, Buttons, List } = require('whatsapp-web.js');
|
||||
require('dotenv').config()
|
||||
const express = require('express');
|
||||
const cors = require('cors')
|
||||
const qrcode = require('qrcode-terminal');
|
||||
const app = express();
|
||||
app.use(cors())
|
||||
app.use(express.json())
|
||||
const server = require('http').Server(app)
|
||||
const port = process.env.PORT || 3000
|
||||
const { generateImage, checkEnvFile } = require('../controllers/handle')
|
||||
const { connectionReady } = require('../controllers/connection')
|
||||
app.use('/', require('../routes/web'))
|
||||
|
||||
initBot = async () => {
|
||||
console.log("WaWebJS Init")
|
||||
client = new Client({
|
||||
authStrategy: new LocalAuth(),
|
||||
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)
|
||||
// listenMessageFromBot()
|
||||
// socketEvents.sendStatus(client)
|
||||
});
|
||||
|
||||
client.on('auth_failure', (e) => {
|
||||
// console.log(e)
|
||||
// connectionLost()
|
||||
});
|
||||
|
||||
client.on('authenticated', () => {
|
||||
console.log('AUTHENTICATED');
|
||||
});
|
||||
|
||||
client.initialize();
|
||||
|
||||
/**
|
||||
* Verificamos si tienes un gesto de db
|
||||
*/
|
||||
|
||||
if (process.env.DATABASE === 'mysql') {
|
||||
mysqlConnection.connect()
|
||||
}
|
||||
|
||||
server.listen(port, () => {
|
||||
console.log(`El server esta listo en el puerto ${port}`);
|
||||
})
|
||||
|
||||
checkEnvFile();
|
||||
return client
|
||||
}
|
||||
|
||||
/**
|
||||
* Regresa las variables from, body, name y hasMedia de el objeto del mensaje.
|
||||
* @param {*} msg
|
||||
* @returns from, body, name, hasMedia
|
||||
*/
|
||||
function traeVariables(msg){
|
||||
const { from, body, hasMedia } = msg;
|
||||
let name = msg?._data?.notifyName
|
||||
// console.log("fromBody=", msg?._data)
|
||||
return {"from":from, "body":body, "name":name, "hasMedia":hasMedia}
|
||||
}
|
||||
|
||||
module.exports = { initBot, traeVariables }
|
||||
Reference in New Issue
Block a user