|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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}`); |
|
} |
|
|
|
}); |
|
|