owner-key.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import fs from 'fs';
  2. import path from 'path';
  3. import crypto from 'crypto';
  4. const keysFilePath = path.resolve('./src/key.json');
  5. // Función para generar key única
  6. const generateUniqueKey = () => {
  7. const prefix = "Key-KantuBot-";
  8. const length = Math.floor(Math.random() * (10 - 8 + 1)) + 8;
  9. const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  10. let key = '';
  11. for (let i = 0; i < length; i++) {
  12. key += chars.charAt(Math.floor(Math.random() * chars.length));
  13. }
  14. return prefix + key;
  15. };
  16. // Función para cargar keys
  17. const loadKeys = () => {
  18. try {
  19. if (!fs.existsSync(keysFilePath)) {
  20. fs.writeFileSync(keysFilePath, '[]', 'utf8');
  21. return [];
  22. }
  23. const data = fs.readFileSync(keysFilePath, "utf8");
  24. return JSON.parse(data);
  25. } catch (err) {
  26. console.error("❌ Error al cargar las keys:", err.message);
  27. return [];
  28. }
  29. };
  30. // Función para guardar keys
  31. const saveKeys = (keys) => {
  32. try {
  33. fs.writeFileSync(keysFilePath, JSON.stringify(keys, null, 2));
  34. return true;
  35. } catch (err) {
  36. console.error("❌ Error al guardar las keys:", err.message);
  37. return false;
  38. }
  39. };
  40. // Función para verificar key única
  41. const isKeyUnique = (key, existingKeys) => {
  42. return !existingKeys.some(k => k.key === key);
  43. };
  44. let handler = async (m, { conn, text, args, usedPrefix, command }) => {
  45. if (!text) {
  46. return m.reply(`📝 Formato correcto:
  47. ${usedPrefix}${command} título|texto|usos
  48. 📌 Ejemplo:
  49. ${usedPrefix}${command} Netflix Premium|usuario: [email protected] contraseña: 123456|5
  50. ℹ️ Notas:
  51. - Usa | para separar el título, texto y usos
  52. - Usos permitidos: 1-100
  53. - La key se generará automáticamente`);
  54. }
  55. try {
  56. // Separar título, texto y usos
  57. let [title, content, usosStr] = text.split('|');
  58. if (!title || !content || !usosStr) {
  59. return m.reply('❌ Error: Debes incluir título, texto y usos separados por |');
  60. }
  61. // Validar título
  62. if (title.length < 3) {
  63. return m.reply('❌ Error: El título es demasiado corto');
  64. }
  65. // Validar contenido
  66. if (content.length < 3) {
  67. return m.reply('❌ Error: El texto es demasiado corto');
  68. }
  69. // Validar y convertir usos
  70. let usos = parseInt(usosStr);
  71. if (isNaN(usos)) {
  72. return m.reply('❌ Error: El número de usos debe ser un número válido');
  73. }
  74. if (usos < 1 || usos > 100) {
  75. return m.reply('❌ Error: Los usos deben estar entre 1 y 100');
  76. }
  77. // Cargar keys existentes
  78. let keys = loadKeys();
  79. // Generar key única
  80. let newKey;
  81. do {
  82. newKey = generateUniqueKey();
  83. } while (!isKeyUnique(newKey, keys));
  84. // Crear nueva entrada
  85. let keyEntry = {
  86. "key": newKey,
  87. "title": title.trim(),
  88. "text": content.trim(),
  89. "uses": usos
  90. };
  91. // Añadir nueva key
  92. keys.push(keyEntry);
  93. // Guardar cambios
  94. // En la parte donde se envían los mensajes, reemplaza ese bloque por este:
  95. if (saveKeys(keys)) {
  96. try {
  97. // Función de delay
  98. const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
  99. // Primer mensaje con los detalles privados
  100. let mensajePrivado = `✅ Key generada exitosamente\n\n`;
  101. mensajePrivado += `📝 Detalles:\n`;
  102. mensajePrivado += `▢ Key: ${newKey}\n`;
  103. mensajePrivado += `▢ Título: ${title.trim()}\n`;
  104. mensajePrivado += `▢ Usos: ${usos}\n`;
  105. mensajePrivado += `▢ Total de keys: ${keys.length}`;
  106. await conn.reply(m.chat, mensajePrivado, m);
  107. await delay(1000); // Espera 1 segundo
  108. // Segundo mensaje solo con la key
  109. await conn.reply(m.chat, `🔑 *KEY:*\n\n${newKey}`, m);
  110. await delay(1000); // Espera 1 segundo
  111. // Tercer mensaje público
  112. let mensajePublico = `╭━━━━━━━━━⬣
  113. ┃ ✅ *KEY GENERADA*
  114. ┃━━━━━━━━━━⬣
  115. ┃ 📝 *DETALLES*
  116. ┃ ▢ *Key:*
  117. ┃ ${newKey}
  118. ┃ ▢ *Título:*
  119. ┃ ${title.trim()}
  120. ┃ ▢ *Usos:*
  121. ┃ ${usos}
  122. ┃━━━━━━━━━━⬣
  123. ┃ 📱 *Canjea la key en:*
  124. ┃ wa.me/525662019549
  125. ┃ 📍 *Comando:*
  126. ┃ .claimkey {KEY}
  127. ╰━━━━━━━━━⬣`;
  128. await conn.reply(m.chat, mensajePublico, m);
  129. } catch (sendError) {
  130. console.error("Error al enviar mensajes:", sendError);
  131. throw new Error('Error al enviar los mensajes');
  132. }
  133. } else {
  134. throw new Error('Error al guardar en el archivo');
  135. }
  136. } catch (error) {
  137. console.error(error);
  138. return m.reply(`❌ Error al generar la key: ${error.message}`);
  139. }
  140. };
  141. handler.help = ['.dropkey <título>|<texto>|<usos>'];
  142. handler.tags = ['owner'];
  143. handler.command = /^(dropkey)$/i;
  144. handler.rowner = true;
  145. export default handler;