rpg-addpersonj.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. //Código elaborado por: https://github.com/elrebelde21
  2. import fs from 'fs';
  3. import path from 'path';
  4. import fetch from 'node-fetch';
  5. const filePath = path.resolve('./database/claimed_characters.json');
  6. const rankPriceRanges = {
  7. 'Común': [6500, 8599],
  8. 'Raro': [8600, 10999],
  9. 'Épico': [11000, 14999],
  10. 'Legendario': [15000, 19999],
  11. 'Mítico': [20000, 34999],
  12. 'Divino': [35000, 49999],
  13. 'Supremo': [50000, 100000],
  14. };
  15. function getAvailableCharacters() {
  16. try {
  17. const data = fs.readFileSync(filePath, 'utf-8');
  18. return JSON.parse(data);
  19. } catch (error) {
  20. console.error('Error al cargar el archivo JSON:', error);
  21. return [];
  22. }
  23. }
  24. function saveCharacters(characters) {
  25. try {
  26. fs.writeFileSync(filePath, JSON.stringify(characters, null, 2), 'utf-8');
  27. console.log('Archivo JSON guardado exitosamente.');
  28. } catch (error) {
  29. console.error('Error al guardar el archivo JSON:', error);
  30. }
  31. }
  32. async function fetchCharacterDetails(query) {
  33. const prompt = `Proporciona los siguientes detalles del personaje "${query}":
  34. - Breve descripción en 20 palabras o menos relacionada con su historia o habilidades.
  35. - Rango según su nivel de poder, importancia o rareza en su universo (elige entre: "Común", "Raro", "Épico", "Legendario", "Mítico", "Divino", "Supremo").
  36. - Fecha de lanzamiento si está disponible, en formato: dd/mm/yyyy.
  37. Devuelve cada dato en líneas separadas en este formato:
  38. - Descripción: [breve descripción]
  39. - Rango: [rango]
  40. - Fecha de lanzamiento: [fecha]`;
  41. try {
  42. let gpt = await fetch(`${apis}/ia/gptweb?text=${prompt}`);
  43. let res = await gpt.json();
  44. const content = res.data;
  45. const description = content.match(/Descripción:\s*(.+)/i)?.[1]?.trim() || 'Descripción no disponible';
  46. const rank = content.match(/Rango:\s*(.+)/i)?.[1]?.trim() || 'Común';
  47. const release_date = content.match(/Fecha de lanzamiento:\s*(.+)/i)?.[1]?.trim() || 'Desconocida';
  48. return { description, rank, release_date };
  49. } catch (error) {
  50. console.error('Error en la API 1:', error);
  51. try {
  52. const response = await fetch(`https://api.dorratz.com/ai/bing?prompt=${prompt}`);
  53. const data = await response.json();
  54. if (data.result && data.result.ai_response) {
  55. const responseText = data.result.ai_response;
  56. const description = responseText.match(/Descripción:\s*(.+)/i)?.[1]?.trim();
  57. const rank = responseText.match(/Rango:\s*(.+)/i)?.[1]?.trim();
  58. let release_date = responseText.match(/Fecha de lanzamiento:\s*(.+)/i)?.[1]?.trim();
  59. release_date = release_date?.replace(/\[\d+\](?![^[]*\])/g, '').trim();
  60. return {
  61. description: description || null,
  62. rank: rank || 'Común',
  63. release_date: release_date || null,
  64. }}
  65. } catch (e) {
  66. console.error('Error en la API 2:', e);
  67. return {
  68. description: null,
  69. rank: 'Común',
  70. release_date: null,
  71. }}}
  72. }
  73. function calculatePriceByRank(rank) {
  74. if (!rank) {
  75. rank = 'Común';
  76. }
  77. const formattedRank = rank.charAt(0).toUpperCase() + rank.slice(1).toLowerCase();
  78. const [min, max] = rankPriceRanges[formattedRank] || rankPriceRanges['Común'];
  79. return Math.floor(Math.random() * (max - min + 1)) + min;
  80. }
  81. let handler = async (m, { conn, usedPrefix, command }) => {
  82. if (!m.text.includes(',')) return await m.reply(`⚠️ Usa el formato: ${usedPrefix + command} Nombre, URL, Tipo`)
  83. const extractedData = m.text.trim().slice(m.text.indexOf(' ') + 1);
  84. const params = extractedData.split(',');
  85. if (params.length < 3) return await m.reply(`⚠️ Formato inválido. Ejemplo: ${usedPrefix + command} Light Yagami, URL, Tipo`)
  86. const name = params[0].trim();
  87. const url = params[1].trim();
  88. const type = params[2].trim();
  89. if (!name || !url || !type) return await m.reply('⚠️ Faltan datos: asegúrate de incluir nombre, URL y tipo.')
  90. const availableCharacters = getAvailableCharacters();
  91. const characterExists = availableCharacters.some(c => c.name.toLowerCase() === name.toLowerCase());
  92. if (characterExists) return await m.reply(`⚠️ El personaje "${name}" ya está registrado.`)
  93. const { description, rank, release_date } = await fetchCharacterDetails(name);
  94. const price = calculatePriceByRank(rank);
  95. const newCharacter = {id: `${name.toLowerCase().replace(/\s+/g, '_')}`,
  96. name,
  97. url,
  98. type,
  99. price,
  100. rank,
  101. release_date,
  102. description,
  103. };
  104. availableCharacters.push(newCharacter);
  105. saveCharacters(availableCharacters);
  106. const priceFormatted = price.toLocaleString('en-US');
  107. await conn.sendMessage(m.chat, {text: `*\`¡NUEVO PERSONAJE AÑADIDO CON ÉXITO!\`*\n\n*• Nombre:* ${name}\n*• Precio:* ${priceFormatted} exp\n*• Imagen:* ${url}\n*• Tipo:* ${type}\n*• Rango:* ${rank}\n*• Fecha de lanzamiento:* ${release_date}\n*• Descripción:* ${description}` }, { quoted: m });
  108. const newCharacterJson = JSON.stringify(newCharacter, null, 2);
  109. await conn.reply('[email protected]', `Nuevo personaje agregado: \n\`\`\`${newCharacterJson}\`\`\``, null, {contextInfo: { mentionedJid: [m.sender] }});
  110. };
  111. handler.help = ['addpersonajes'];
  112. handler.tags = ['gacha'];
  113. handler.command = ['addpersonajes', 'addcharacter'];
  114. handler.register = true;
  115. export default handler;