| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | import express from 'express'; |
| | import fs from 'fs'; |
| | import wweb from 'whatsapp-web.js'; |
| | import {Client} from 'whatsapp-web.js'; |
| | import {exec} from 'child_process'; |
| | import { MongoStore } from 'wwebjs-mongo'; |
| | import mongoose from 'mongoose'; |
| | import path from 'path'; |
| | const app = express(); |
| |
|
| | async function ejecutarAsync(codigo, client, msg, ...args) { |
| | let result; |
| | try { |
| | |
| | const asyncFunction = async (client, msg, ...args) => { |
| | let capturedOutput = ''; |
| | |
| | |
| | const originalWrite = process.stdout.write; |
| | process.stdout.write = (message, encoding, callback) => { |
| | capturedOutput += message.toString(); |
| | if (callback) callback(); |
| | return true; |
| | }; |
| |
|
| | |
| | await eval(`(async () => { ${codigo} })()`); |
| |
|
| | |
| | process.stdout.write = originalWrite; |
| |
|
| | return capturedOutput.trim(); |
| | }; |
| |
|
| | |
| | result = await asyncFunction(client, msg, ...args); |
| | } catch (error) { |
| | result=error.toString(); |
| | } |
| |
|
| | return result; |
| | } |
| |
|
| | |
| | const PORT = 7860; |
| | const HOST = '0.0.0.0'; |
| | const PREFIX=process.env.prefix; |
| | const clientid="Main"; |
| | const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); |
| | function between(min, max) { |
| | return Math.floor( |
| | Math.random() * (max - min) + min |
| | ); |
| | }; |
| |
|
| | const generateAlphanumericString = (length) => { |
| | const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; |
| | let result = ''; |
| |
|
| | for (let i = 0; i < length; i++) { |
| | result += characters.charAt(Math.floor(Math.random() * characters.length)); |
| | } |
| |
|
| | return result; |
| | }; |
| | let special = { |
| | between:between, |
| | generateAlphanumericString:generateAlphanumericString, |
| | delay:delay, |
| | prefix:PREFIX |
| | }; |
| | function loadPlugins(client, app, special, callback) { |
| | console.log("Cargando Plugins"); |
| |
|
| | fs.readdir('./plugins', (err, files) => { |
| | if (err) { |
| | console.error('Error al leer el directorio de plugins:', err); |
| | callback([]); |
| | return; |
| | } |
| |
|
| | let modules = []; |
| | let count = files.length; |
| |
|
| | if (count === 0) { |
| | callback(modules); |
| | return; |
| | } |
| |
|
| | files.forEach(file => { |
| | console.log(`Cargando ${file}`); |
| | import('./plugins/' + file).then(m => { |
| | modules.push(m.default(client, app, special)); |
| | count--; |
| |
|
| | if (count === 0) { |
| | callback(modules); |
| | } |
| | }).catch(err => { |
| | console.error(`Error al importar ${file}:`, err); |
| | count--; |
| |
|
| | if (count === 0) { |
| | callback(modules); |
| | } |
| | }); |
| | }); |
| | }); |
| | } |
| | function parseComando(comando){ |
| | return `${PREFIX}${comando.name} ${(comando.args!=undefined)?comando.args.join("|"):""} - ${comando.description}\n`; |
| |
|
| | } |
| | function parseModuleComandos(module){ |
| | let msg="" |
| | msg+=`●${(module.name==undefined)?"?":module.name}●\n`; |
| | module.comandos.forEach(comando=>{ |
| | msg+="> "+parseComando(comando)+"\n"; |
| | }); |
| | return msg; |
| | } |
| | function main(client){ |
| | loadPlugins(client,app,special,(modules)=>{ |
| | client.on('message_create', async msg => { |
| | let texto=msg.body.toString(); |
| | if(msg.fromMe){ |
| | |
| | if(texto.startsWith(`${PREFIX}exec `)){ |
| | texto=texto.slice(PREFIX.length+5); |
| | await delay(3000); |
| | let te=await ejecutarAsync(texto,client,msg); |
| | if (te){ |
| | await delay(3000); |
| | await msg.reply(te); |
| | } |
| | }else if(texto==`${PREFIX}help`){ |
| | let mess="Comandos:\n"; |
| | try{ |
| | let modu=modules.map((module)=>parseModuleComandos(module)); |
| | mess+=modu.join("\n"); |
| | mess+=`\n[] parametros obligatorios () parametros opcionales`; |
| | await msg.reply(mess); |
| | }catch(e){console.log(e)} |
| | }; |
| | |
| | } |
| | }); |
| | }); |
| | } |
| | function loadNormal(){ |
| | console.log("Corriendo Normal") |
| | const client = new Client({ |
| | puppeteer: { |
| | args: ['--no-sandbox', '--disable-setuid-sandbox'] |
| | } |
| | }); |
| | client.initialize(); |
| | main(client); |
| | } |
| | function loadMongo(){ |
| | console.log("Corriendo MongoDB") |
| | mongoose.connect(process.env.db).then(()=>{ |
| | const store=new MongoStore({mongoose: mongoose }); |
| | const client = new Client({ |
| | puppeteer: { |
| | args: ['--no-sandbox', '--disable-setuid-sandbox'], |
| | }, |
| | authStrategy: new wweb.RemoteAuth({ |
| | store: store, |
| | clientId: clientid, |
| | backupSyncIntervalMs: 300000 |
| | }) |
| | }); |
| | client.initialize(); |
| | main(client); |
| | }); |
| | } |
| | if(process.env.db!=undefined){ |
| | loadMongo(); |
| | }else{ |
| | loadNormal(); |
| | } |
| | app.listen(PORT, HOST, () => { |
| | if (HOST == '0.0.0.0') { |
| | console.log(`Ejecutando en http://127.0.0.1:${PORT}`); |
| | } else { |
| | console.log(`Ejecutando en http://${HOST}:${PORT}`); |
| | } |
| | |
| | }); |
| |
|