Queria decirles sobre mi nuevo proyecto, este es un mod de baileys que les puede servir bastante para bots de whatsapp, muchos diran que otro es mejor o el original es mejor, pero ¿Porque no darle una oportunidad a algo nuevo? no creen que quizas les guste mucho mas, o de pronto les sea mas util. 🤗
En este post no lo dire todo ya que es demasiado largo, pero te dejo aqui los enlaces de los repositorios y de npmjs.com para que puedas leerlo completamente:
GitHub: Click Aqui
NPMJS: Clicl Aqui
Instalación
Opción 1: NPM
npm install @soblend/baileys
Opción 2: Yarn
yarn add @soblend/baileys
Opción 3: PNPM
pnpm add @soblend/baileys
Ejemplo Basico
`import { SoblendBaileys } from '@soblend/baileys';
async function main() {
// Crear instancia con configuración básica
const soblend = new SoblendBaileys({
printQRInTerminal: true, // Mostrar QR en consola
enableCache: true, // Activar caché inteligente
logLevel: 'info', // Nivel de logs
});
// Conectar
const socket = await soblend.connect('auth_session');
console.log('✅ ¡Conectado a WhatsApp!');
// Escuchar mensajes
socket.ev.on('messages.upsert', async ({ messages }) => {
const msg = messages[0];
if (!msg.message || msg.key.fromMe) return;
const text = msg.message.conversation || '';
const from = msg.key.remoteJid;
// Responder a "hola"
if (text.toLowerCase() === 'hola') {
await socket.sendMessage(from, { text: '¡Hola! 👋' });
}
});
}
main();`
Ejemplo 2: Bot con Base de datos y sistema de niveles
`import { SoblendBaileys, SoblendStorage } from '@soblend/baileys';
async function main() {
const storage = new SoblendStorage('./database', true, 'password');
await storage.initialize();
const soblend = new SoblendBaileys({ printQRInTerminal: true });
const socket = await soblend.connect('session');
socket.ev.on('messages.upsert', async ({ messages }) => {
const msg = messages[0];
if (!msg.message || msg.key.fromMe) return;
const sender = msg.key.participant || msg.key.remoteJid;
const from = msg.key.remoteJid;
// Registrar usuario si no existe
let user = storage.getUser(sender);
if (!user) {
await storage.saveUser({
jid: sender,
name: msg.pushName || 'Usuario',
messageCount: 0,
firstSeen: Date.now(),
lastSeen: Date.now(),
isBlocked: false,
isBanned: false,
level: 1,
points: 0
});
user = storage.getUser(sender);
}
// Incrementar contador y puntos
await storage.updateUser(sender, {
messageCount: user.messageCount + 1,
lastSeen: Date.now()
});
await storage.incrementUserLevel(sender, 10); // +10 puntos por mensaje
const text = msg.message.conversation || '';
// Comando: !level
if (text === '!level') {
const updatedUser = storage.getUser(sender);
await socket.sendMessage(from, {
text: `👤 Tu Perfil:\n` +
`Nivel: ${updatedUser.level}\n` +
`Puntos: ${updatedUser.points}\n` +
`Mensajes: ${updatedUser.messageCount}`
});
}
// Comando: !top
if (text === '!top') {
const topUsers = await storage.getTopUsers(5);
let leaderboard = '🏆 Top 5 Usuarios:\n\n';
topUsers.forEach((u, i) => {
leaderboard += `${i + 1}. ${u.name}\n`;
leaderboard += ` Nivel ${u.level} - ${u.points} puntos\n\n`;
});
await socket.sendMessage(from, { text: leaderboard });
}
});
}
main();`
Ejemplo 3: Sistema de administración
`import { SoblendBaileys, GroupAdminManager } from '@soblend/baileys';
async function main() {
const soblend = new SoblendBaileys({ printQRInTerminal: true });
const socket = await soblend.connect('session');
const groupManager = new GroupAdminManager(socket);
// Configurar reglas anti-spam y anti-link
const GROUP_ID = 'GROUP_ID@g.us';
groupManager.addRule(GROUP_ID, {
id: 'no-links',
type: 'anti-link',
enabled: true,
action: 'kick',
message: '❌ Enlaces prohibidos'
});
groupManager.addRule(GROUP_ID, {
id: 'no-spam',
type: 'anti-spam',
enabled: true,
action: 'mute'
});
// Mensaje de bienvenida personalizado
groupManager.setWelcomeMessage(GROUP_ID, {
enabled: true,
text: '¡Hola {user}! 👋\nBienvenido a {group}\n\n📋 Reglas:\n1. No spam\n2. No enlaces\n3. Respeto mutuo',
buttons: true
});
socket.ev.on('messages.upsert', async ({ messages }) => {
const msg = messages[0];
if (!msg.message || msg.key.fromMe) return;
const text = msg.message.conversation || '';
const from = msg.key.remoteJid;
const sender = msg.key.participant || msg.key.remoteJid;
// Verificar reglas
if (from.endsWith('@g.us')) {
const allowed = await groupManager.checkRules(from, sender, text);
if (!allowed) return; // Mensaje bloqueado por reglas
}
// Comando: !admin (mostrar panel)
if (text === '!admin' && from.endsWith('@g.us')) {
const isAdmin = await groupManager.isAdmin(from, sender);
if (isAdmin) {
await groupManager.sendAdminPanel(from, sender);
}
}
// Comando: !kick @usuario
if (text.startsWith('!kick') && from.endsWith('@g.us')) {
const isAdmin = await groupManager.isAdmin(from, sender);
if (!isAdmin) return;
const mentioned = msg.message.extendedTextMessage?.contextInfo?.mentionedJid;
if (mentioned && mentioned.length > 0) {
await groupManager.removeParticipants(from, mentioned);
await socket.sendMessage(from, { text: '✅ Usuarios eliminados' });
}
}
});
}
main();`
Solucion De Problemas (Comunes)
Problema: QR Code no aparece
Solución:
const soblend = new SoblendBaileys({
printQRInTerminal: true, // Asegúrate de que esté en true
logLevel: 'debug' // Activa logs detallados
});
Problema: Reconexión lenta
Solución:
const soblend = new SoblendBaileys({
autoReconnect: true,
reconnectDelay: 1500, // Reducir delay inicial
maxReconnectAttempts: 20 // Aumentar intentos
});
Problema: Alto uso de memoria
Solución:
`const soblend = new SoblendBaileys({
enableCache: true,
cacheMaxSize: 5000, // Reducir tamaño del caché
});
// Limpiar caché periódicamente
setInterval(() => {
soblend.getCache().clear();
}, 3600000); // Cada hora`
Problema: Botones no funcionan
Solución:
await socket.sendInteractiveButtons(jid, {
text: 'Elige una opción',
footer: 'Powered by Soblend',
buttons: [
{
buttonId: 'id1',
buttonText: { displayText: 'Opción 1' },
type: 1
}
]
});
[ NOTA ] Recientemente se encontro un error en los botones, esto se estara corrijiendo en la siguiente version junto con la integración de carouseles.
Top comments (0)