| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- import fs from 'fs';
- import path from 'path';
- import crypto from 'crypto';
- const keysFilePath = path.resolve('./src/key.json');
- // Función para generar key única
- const generateUniqueKey = () => {
- const prefix = "Key-KantuBot-";
- const length = Math.floor(Math.random() * (10 - 8 + 1)) + 8;
- const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
- let key = '';
- for (let i = 0; i < length; i++) {
- key += chars.charAt(Math.floor(Math.random() * chars.length));
- }
- return prefix + key;
- };
- // Función para cargar keys
- const loadKeys = () => {
- try {
- if (!fs.existsSync(keysFilePath)) {
- fs.writeFileSync(keysFilePath, '[]', 'utf8');
- return [];
- }
- const data = fs.readFileSync(keysFilePath, "utf8");
- return JSON.parse(data);
- } catch (err) {
- console.error("❌ Error al cargar las keys:", err.message);
- return [];
- }
- };
- // Función para guardar keys
- const saveKeys = (keys) => {
- try {
- fs.writeFileSync(keysFilePath, JSON.stringify(keys, null, 2));
- return true;
- } catch (err) {
- console.error("❌ Error al guardar las keys:", err.message);
- return false;
- }
- };
- // Función para verificar key única
- const isKeyUnique = (key, existingKeys) => {
- return !existingKeys.some(k => k.key === key);
- };
- let handler = async (m, { conn, text, args, usedPrefix, command }) => {
- if (!text) {
- return m.reply(`📝 Formato correcto:
- ${usedPrefix}${command} título|texto|usos
- 📌 Ejemplo:
- ${usedPrefix}${command} Netflix Premium|usuario: [email protected] contraseña: 123456|5
- ℹ️ Notas:
- - Usa | para separar el título, texto y usos
- - Usos permitidos: 1-100
- - La key se generará automáticamente`);
- }
- try {
- // Separar título, texto y usos
- let [title, content, usosStr] = text.split('|');
-
- if (!title || !content || !usosStr) {
- return m.reply('❌ Error: Debes incluir título, texto y usos separados por |');
- }
- // Validar título
- if (title.length < 3) {
- return m.reply('❌ Error: El título es demasiado corto');
- }
- // Validar contenido
- if (content.length < 3) {
- return m.reply('❌ Error: El texto es demasiado corto');
- }
- // Validar y convertir usos
- let usos = parseInt(usosStr);
-
- if (isNaN(usos)) {
- return m.reply('❌ Error: El número de usos debe ser un número válido');
- }
- if (usos < 1 || usos > 100) {
- return m.reply('❌ Error: Los usos deben estar entre 1 y 100');
- }
- // Cargar keys existentes
- let keys = loadKeys();
- // Generar key única
- let newKey;
- do {
- newKey = generateUniqueKey();
- } while (!isKeyUnique(newKey, keys));
- // Crear nueva entrada
- let keyEntry = {
- "key": newKey,
- "title": title.trim(),
- "text": content.trim(),
- "uses": usos
- };
- // Añadir nueva key
- keys.push(keyEntry);
- // Guardar cambios
- // En la parte donde se envían los mensajes, reemplaza ese bloque por este:
- if (saveKeys(keys)) {
- try {
- // Función de delay
- const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
- // Primer mensaje con los detalles privados
- let mensajePrivado = `✅ Key generada exitosamente\n\n`;
- mensajePrivado += `📝 Detalles:\n`;
- mensajePrivado += `▢ Key: ${newKey}\n`;
- mensajePrivado += `▢ Título: ${title.trim()}\n`;
- mensajePrivado += `▢ Usos: ${usos}\n`;
- mensajePrivado += `▢ Total de keys: ${keys.length}`;
-
- await conn.reply(m.chat, mensajePrivado, m);
- await delay(1000); // Espera 1 segundo
- // Segundo mensaje solo con la key
- await conn.reply(m.chat, `🔑 *KEY:*\n\n${newKey}`, m);
- await delay(1000); // Espera 1 segundo
- // Tercer mensaje público
- let mensajePublico = `╭━━━━━━━━━⬣
- ┃ ✅ *KEY GENERADA*
- ┃━━━━━━━━━━⬣
- ┃ 📝 *DETALLES*
- ┃
- ┃ ▢ *Key:*
- ┃ ${newKey}
- ┃
- ┃ ▢ *Título:*
- ┃ ${title.trim()}
- ┃
- ┃ ▢ *Usos:*
- ┃ ${usos}
- ┃
- ┃━━━━━━━━━━⬣
- ┃ 📱 *Canjea la key en:*
- ┃ wa.me/525662019549
- ┃
- ┃ 📍 *Comando:*
- ┃ .claimkey {KEY}
- ╰━━━━━━━━━⬣`;
- await conn.reply(m.chat, mensajePublico, m);
- } catch (sendError) {
- console.error("Error al enviar mensajes:", sendError);
- throw new Error('Error al enviar los mensajes');
- }
- } else {
- throw new Error('Error al guardar en el archivo');
- }
- } catch (error) {
- console.error(error);
- return m.reply(`❌ Error al generar la key: ${error.message}`);
- }
- };
- handler.help = ['.dropkey <título>|<texto>|<usos>'];
- handler.tags = ['owner'];
- handler.command = /^(dropkey)$/i;
- handler.rowner = true;
- export default handler;
|