owner-subasta-buy.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import fs from 'fs';
  2. import path from 'path';
  3. const auctionFilePath = path.resolve('./src/auctions.json');
  4. // Función para cargar subastas
  5. const loadAuctions = () => {
  6. try {
  7. if (!fs.existsSync(auctionFilePath)) return { auctions: [] };
  8. return JSON.parse(fs.readFileSync(auctionFilePath));
  9. } catch (err) {
  10. console.error("❌ Error al cargar subastas:", err);
  11. return { auctions: [] };
  12. }
  13. };
  14. // Función para guardar subastas
  15. const saveAuctions = (auctionData) => {
  16. try {
  17. fs.writeFileSync(auctionFilePath, JSON.stringify(auctionData, null, 2));
  18. return true;
  19. } catch (err) {
  20. console.error("❌ Error al guardar subastas:", err);
  21. return false;
  22. }
  23. };
  24. let handler = async (m, { conn, args, usedPrefix, command }) => {
  25. if (!args[0]) {
  26. return m.reply(`╭━━━[ *COMPRA DIRECTA* ]━━━⬣
  27. ┃ ⚠️ Formato:
  28. ┃ ${usedPrefix}${command} <ID>
  29. ┃ 📌 Ejemplo:
  30. ┃ ${usedPrefix}${command} AUC-1A2B3C
  31. ┃ 📋 Notas:
  32. ┃ • Necesitas el precio directo o más
  33. ┃ • La subasta terminará al instante
  34. ┃ • No hay devoluciones
  35. ╰━━━━━━━━━━━━━━━⬣`);
  36. }
  37. try {
  38. const auctionId = args[0];
  39. // Cargar subastas
  40. let auctionData = loadAuctions();
  41. let auction = auctionData.auctions.find(a => a.auctionId === auctionId);
  42. if (!auction) {
  43. return m.reply('❌ Subasta no encontrada');
  44. }
  45. // Verificar estado de la subasta
  46. if (auction.status !== 'active') {
  47. return m.reply('❌ Esta subasta ya ha finalizado');
  48. }
  49. // Verificar tiempo
  50. const now = new Date();
  51. const endTime = new Date(auction.endTime);
  52. if (now > endTime) {
  53. auction.status = 'ended';
  54. saveAuctions(auctionData);
  55. return m.reply('❌ Esta subasta ya ha expirado');
  56. }
  57. // Verificar balance del usuario
  58. const user = global.db.data.users[m.sender];
  59. if (!user || user.money < auction.buyNowPrice) {
  60. return m.reply(`❌ No tienes suficientes USD para la compra directa\n\n💰 Precio: ${auction.buyNowPrice.toLocaleString()} USD`);
  61. }
  62. // Descontar el dinero necesario
  63. user.money -= auction.buyNowPrice;
  64. // Devolver coins al último postor si existe
  65. if (auction.lastBidder) {
  66. global.db.data.users[auction.lastBidder].money += auction.currentPrice;
  67. }
  68. // Realizar la compra
  69. auction.currentPrice = auction.buyNowPrice;
  70. auction.lastBidder = m.sender;
  71. auction.status = 'completed';
  72. auction.endTime = new Date().toISOString();
  73. auction.winner = m.sender;
  74. auction.bids.push({
  75. bidder: m.sender,
  76. amount: auction.buyNowPrice,
  77. time: new Date().toISOString(),
  78. type: 'buynow'
  79. });
  80. // Guardar cambios
  81. if (saveAuctions(auctionData)) {
  82. // Mensaje de compra exitosa
  83. let buyMsg = `╭━━━[ *COMPRA DIRECTA EXITOSA* ]━━━⬣
  84. ┃ 🎊 *¡FELICIDADES!* 🎊
  85. ┃ 🔖 *ID:* ${auctionId}
  86. ┃ 🎁 *Premio:*
  87. ┃ ${auction.item}
  88. ┃ 💎 *Precio pagado:*
  89. ┃ ${auction.buyNowPrice.toLocaleString()} USD
  90. ┃ 👤 *Comprador:*
  91. ┃ @${m.sender.split('@')[0]}
  92. ┃ 📍 *Estado:* Completada
  93. ┃ ⭐ *Tipo:* Compra Directa
  94. ╰━━━━━━━━━━━━━━━⬣`;
  95. // Mensaje en el grupo
  96. await conn.reply(m.chat, buyMsg, m, {
  97. mentions: [m.sender]
  98. });
  99. // Notificar al creador de la subasta
  100. let creatorMsg = `╭━━━[ *SUBASTA COMPLETADA* ]━━━⬣
  101. ┃ 🔖 *ID:* ${auctionId}
  102. ┃ 🎁 *Tu premio:*
  103. ┃ ${auction.item}
  104. ┃ 💎 *Fue comprado por:*
  105. ┃ @${m.sender.split('@')[0]}
  106. ┃ 💰 *Precio final:*
  107. ┃ ${auction.buyNowPrice.toLocaleString()} USD
  108. ╰━━━━━━━━━━━━━━━⬣`;
  109. await conn.sendMessage(auction.createdBy, {
  110. text: creatorMsg,
  111. mentions: [m.sender]
  112. });
  113. } else {
  114. throw new Error('Error al finalizar la subasta');
  115. }
  116. } catch (error) {
  117. console.error(error);
  118. return m.reply(`❌ Error al realizar la compra: ${error.message}`);
  119. }
  120. };
  121. handler.help = ['.buynow <ID>'];
  122. handler.tags = ['economy'];
  123. handler.command = /^(buynow)$/i;
  124. handler.group = true;
  125. handler.register = true;
  126. export default handler;