info-reporte.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. //Código elaborado por: https://github.com/elrebelde21
  2. /*FUNCIONA PERO NO COMO QUIERO LUEGO LOS ARREGLOS :v
  3. import { webp2png } from '../lib/webp2mp4.js';
  4. import uploadFile from '../lib/uploadFile.js';
  5. import uploadImage from '../lib/uploadImage.js';
  6. import axios from 'axios';
  7. import fs from 'fs';
  8. import { fileURLToPath } from 'url';
  9. import { dirname, join } from 'path';
  10. const __filename = fileURLToPath(import.meta.url);
  11. const __dirname = dirname(__filename);
  12. const OWNER1 = "[email protected]";
  13. const ACTIVE_CONVERSATIONS = {};
  14. const MAX_VIDEO_SIZE_MB = 60; // Límite de 60MB para videos
  15. let handler = async (m, { conn, text, args, command, usedPrefix }) => {
  16. let media = false;
  17. let q = m.quoted ? m.quoted : m;
  18. let mime = (q.msg || q).mimetype || '';
  19. let url = '';
  20. if (/image|video|audio/.test(mime)) {
  21. media = await q.download();
  22. if (/video/.test(mime)) {
  23. let videoPath = join(__dirname, `./temp_video_${new Date().getTime()}.mp4`);
  24. fs.writeFileSync(videoPath, media);
  25. let videoStats = fs.statSync(videoPath);
  26. let videoSizeMB = videoStats.size / (1024 * 1024);
  27. if (videoSizeMB > MAX_VIDEO_SIZE_MB) {
  28. fs.unlinkSync(videoPath);
  29. return m.reply(`*⚠️ El video excede el tamaño permitido (max 60 MB). Por favor, recórtalo, comprime o envía uno más ligero.*`);
  30. }
  31. url = videoPath;
  32. } else {
  33. url = await uploadImage(media);
  34. }} else if (/webp/.test(mime)) {
  35. media = await q.download();
  36. url = await webp2png(media);
  37. }
  38. let activeConversation = Object.entries(ACTIVE_CONVERSATIONS).find(([id, convo]) => convo.active && convo.userId === m.sender && convo.chatId === m.chat);
  39. if (activeConversation) {
  40. let [reportId] = activeConversation;
  41. let message = `📩 *Mensaje del usuario @${m.sender.split("@")[0]} (ID: ${reportId}):*\n${text || ''}`;
  42. if (url) {
  43. if (/image/.test(mime)) {
  44. await conn.sendMessage(OWNER1, { image: { url }, caption: message, contextInfo: { mentionedJid: [m.sender] } }, { quoted: m });
  45. } else if (/video/.test(mime)) {
  46. await conn.sendMessage(OWNER1, { video: { url }, caption: message, contextInfo: { mentionedJid: [m.sender] } }, { quoted: m });
  47. } else if (/audio/.test(mime)) {
  48. await conn.sendMessage(OWNER1, { audio: { url }, mimetype: mime, caption: message, contextInfo: { mentionedJid: [m.sender] } }, { quoted: m });
  49. }} else if (m.msg && m.msg.sticker) {
  50. await conn.sendMessage(OWNER1, { sticker: media, contextInfo: { mentionedJid: [m.sender] } }, { quoted: m });
  51. } else {
  52. await conn.sendMessage(OWNER1, { text: message, mentions: [m.sender] }, { quoted: m });
  53. }
  54. return;
  55. }
  56. if (command === 'report' || command === 'reporte') {
  57. if (!text && !m.quoted) return m.reply(`⚠️ 𝐄𝐬𝐜𝐫𝐢𝐛𝐚 𝐞𝐥 𝐞𝐫𝐫𝐨𝐫/𝐜𝐨𝐦𝐚𝐧𝐝𝐨 𝐜𝐨𝐧 𝐟𝐚𝐥𝐥𝐚\n\n*𝐄𝐣:* ${usedPrefix + command} los sticker no funka`);
  58. if (text.length < 8) throw `${fg} ✨ *𝑴𝒊́𝒏𝒊𝒎𝒐 10 𝒄𝒂𝒓𝒂𝒄𝒕𝒆𝒓𝒆𝒔 𝒑𝒂𝒓𝒂 𝒉𝒂𝒄𝒆𝒓 𝒆𝒍 𝒓𝒆𝒑𝒐𝒓𝒕𝒆...*`
  59. if (text.length > 1000) throw `${fg} ⚠️ *𝑴𝒂́𝒙𝒊𝒎𝒐 1000 𝑪𝒂𝒓𝒂𝒄𝒕𝒆𝒓𝒆𝒔 𝒑𝒂𝒓𝒂 𝒉𝒂𝒄𝒆𝒓 𝒆𝒍 𝒓𝒆𝒑𝒐𝒓𝒕𝒆.*`
  60. let reportId = Math.floor(Math.random() * 901);
  61. ACTIVE_CONVERSATIONS[reportId] = {
  62. userId: m.sender,
  63. userName: m.pushName || 'Usuario desconocido',
  64. active: true,
  65. chatId: m.chat,
  66. url: url,
  67. mime: mime,
  68. };
  69. let reportText = text || (m.quoted && m.quoted.text) || 'Sin mensaje';
  70. let teks = `┏╼╾╼⧼⧼⧼ REPORTE ⧽⧽⧽╼╼╼┓
  71. ╏• *ɴᴜᴍᴇʀᴏ:* Wa.me/${m.sender.split("@")[0]}
  72. ╏• *ᴍᴇɴsᴀᴊᴇ:* ${reportText}
  73. ┗╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼\n\nResponde al mensaje con:\n*"responder ${reportId} [mensaje]"* para interactuar.\nUsa *.fin ${reportId}* para finalizar la conversación.`
  74. await conn.sendMessage(OWNER1, { text: teks, mentions: [m.sender] }, { quoted: m });
  75. await delay(1000)
  76. await conn.reply(m.chat, `*⚡ᴇʟ ʀᴇᴘᴏʀᴛᴇ ʜᴀ sɪᴅᴏ ᴇɴᴠɪᴀᴅᴏs ᴀ ᴍɪ ᴄʀᴇᴀᴅᴏʀ, ᴛᴇɴᴅʀᴀ ᴜɴᴀ ʀᴇsᴘᴜᴇsᴛᴀ ᴘʀᴏɴᴛᴏ, ᴅᴇ sᴇʀ ғᴀʟsᴏ sᴇʀᴀ ɪɢɴᴏʀᴀᴅᴏ ᴇʟ ʀᴇᴘᴏʀᴛᴇ*`);
  77. return;
  78. }};
  79. handler.before = async (m, { conn }) => {
  80. let activeConversation = Object.entries(ACTIVE_CONVERSATIONS).find(([id, convo]) => convo.active && convo.userId === m.sender && convo.chatId === m.chat);
  81. if (activeConversation) {
  82. let [reportId] = activeConversation;
  83. let message2 = `*📩 Nueva respuesta del usuario @${m.sender.split("@")[0]} (ID: ${reportId}):*\n${m.text || ''}`;
  84. if (m.mtype === 'stickerMessage') {
  85. let sticker = await m.download();
  86. if (sticker) {
  87. await conn.sendMessage(OWNER1, { sticker }, { quoted: m });
  88. } else {
  89. }} else if (m.mtype === 'imageMessage' || m.mtype === 'videoMessage' || m.mtype === 'audioMessage') {
  90. let media = await m.download();
  91. let url = await uploadImage(media);
  92. if (url) {
  93. await conn.sendMessage(OWNER1, { [m.mtype === 'videoMessage' ? 'video' : m.mtype === 'audioMessage' ? 'audio' : 'image']: { url }, caption: message2, contextInfo: { mentionedJid: [m.sender] }}, { quoted: m });
  94. } else {
  95. console.error('Error');
  96. }} else {
  97. await conn.sendMessage(OWNER1, { text: message2, mentions: [m.sender] }, { quoted: m });
  98. }}
  99. let matchResponder = m.text.match(/^responder (\S+) (.+)/i);
  100. if (matchResponder) {
  101. let [_, reportId, ownerMessage] = matchResponder;
  102. if (!ACTIVE_CONVERSATIONS[reportId] || !ACTIVE_CONVERSATIONS[reportId].active) return
  103. let { userId } = ACTIVE_CONVERSATIONS[reportId];
  104. if (m.quoted) {
  105. let quoted = m.quoted;
  106. let mime = (quoted.msg || quoted).mimetype || '';
  107. if (/image|video|audio|sticker/.test(mime)) {
  108. let media = await quoted.download();
  109. let url = await uploadImage(media);
  110. if (/image/.test(mime)) {
  111. await conn.sendMessage(userId, { image: { url }, caption: ownerMessage });
  112. } else if (/video/.test(mime)) {
  113. await conn.sendMessage(userId, { video: { url }, caption: ownerMessage });
  114. } else if (/audio/.test(mime)) {
  115. await conn.sendMessage(userId, { audio: { url }, mimetype: mime, caption: ownerMessage });
  116. } else if (/sticker/.test(mime)) {
  117. await conn.sendMessage(userId, { sticker: media });
  118. }} else {
  119. await conn.sendMessage(userId, { text: ownerMessage });
  120. }} else {
  121. await conn.sendMessage(userId, { text: `*• Respuesta del propietario:*\n${ownerMessage}` });
  122. }
  123. return;
  124. }
  125. if (m.quoted && m.quoted.text) {
  126. let quotedTextMatch = m.quoted.text.match(/ID: (\d+)/);
  127. if (quotedTextMatch) {
  128. let reportId = quotedTextMatch[1];
  129. if (ACTIVE_CONVERSATIONS[reportId] && ACTIVE_CONVERSATIONS[reportId].active) {
  130. let { userId } = ACTIVE_CONVERSATIONS[reportId];
  131. let ownerMessage = m.text || 'Sin mensaje';
  132. if (/image|video|audio|sticker/.test(m.mtype)) {
  133. let media = await m.download();
  134. let url = await uploadImage(media);
  135. if (/image/.test(m.mtype)) {
  136. await conn.sendMessage(userId, { image: { url }, caption: ownerMessage });
  137. } else if (/video/.test(m.mtype)) {
  138. await conn.sendMessage(userId, { video: { url }, caption: ownerMessage });
  139. } else if (/audio/.test(m.mtype)) {
  140. await conn.sendMessage(userId, { audio: { url }, mimetype: m.mimetype });
  141. } else if (/sticker/.test(m.mtype)) {
  142. await conn.sendMessage(userId, { sticker: media });
  143. }} else {
  144. await conn.sendMessage(userId, { text: `*• Respuesta del propietario:*\n${ownerMessage}` });
  145. }
  146. return;
  147. }}}
  148. let matchFin = m.text.match(/^\.fin (\S+)/i);
  149. if (matchFin) {
  150. let [_, reportId] = matchFin;
  151. if (!ACTIVE_CONVERSATIONS[reportId]) return await conn.reply(m.chat, `⚠️ No se encontró ninguna conversación activa con ese ID.`, m);
  152. let { userId } = ACTIVE_CONVERSATIONS[reportId];
  153. ACTIVE_CONVERSATIONS[reportId].active = false;
  154. await conn.reply(userId, `🔒 *La conversación ha sido cerrada por el propietario.*`);
  155. await delay(1000)
  156. await conn.reply(m.chat, `✔️ Conversación ${reportId} cerrada.`);
  157. return;
  158. }};
  159. handler.help = ['reporte', 'request'].map(v => v + ' <teks>')
  160. handler.tags = ['main']
  161. handler.exp = 3500
  162. handler.command = /^(report|request|reporte|bugs|bug|report-owner|reportes|reportar)$/i
  163. handler.register = true
  164. handler.private = true
  165. export default handler
  166. const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
  167. */
  168. let handler = async (m, { conn, text, usedPrefix, command }) => {
  169. if (!text) return conn.reply(m.chat, `⚠️ 𝐄𝐬𝐜𝐫𝐢𝐛𝐚 𝐞𝐥 𝐞𝐫𝐫𝐨𝐫/𝐜𝐨𝐦𝐚𝐧𝐝𝐨 𝐜𝐨𝐧 𝐟𝐚𝐥𝐥𝐚\n\n*𝐄𝐣:* ${usedPrefix + command} los sticker no funka`, m, {contextInfo: { externalAdReply :{ mediaUrl: null, mediaType: 1, description: null, title: mg, previewType: 0, thumbnail: imagen4, sourceUrl: [md, yt, tiktok].getRandom()}}})
  170. if (text.length < 8) throw `${fg} ✨ *𝑴𝒊́𝒏𝒊𝒎𝒐 10 𝒄𝒂𝒓𝒂𝒄𝒕𝒆𝒓𝒆𝒔 𝒑𝒂𝒓𝒂 𝒉𝒂𝒄𝒆𝒓 𝒆𝒍 𝒓𝒆𝒑𝒐𝒓𝒕𝒆...*`
  171. if (text.length > 1000) throw `${fg} ⚠️ *𝑴𝒂́𝒙𝒊𝒎𝒐 1000 𝑪𝒂𝒓𝒂𝒄𝒕𝒆𝒓𝒆𝒔 𝒑𝒂𝒓𝒂 𝒉𝒂𝒄𝒆𝒓 𝒆𝒍 𝒓𝒆𝒑𝒐𝒓𝒕𝒆.*`
  172. let teks = `┏╼╾╼⧼⧼⧼ REPORTE ⧽⧽⧽╼╼╼┓
  173. ╏• *ɴᴜᴍᴇʀᴏ:* Wa.me/${m.sender.split`@`[0]}
  174. ╏• *ᴍᴇɴsᴀᴊᴇ:* ${text}
  175. ┗╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼`
  176. await delay(1 * 1000)
  177. conn.reply(m.chat, `⚡ᴇʟ ʀᴇᴘᴏʀᴛᴇ ʜᴀ sɪᴅᴏ ᴇɴᴠɪᴀᴅᴏs ᴀ ᴍɪ ᴄʀᴇᴀᴅᴏʀ, ᴛᴇɴᴅʀᴀ ᴜɴᴀ ʀᴇsᴘᴜᴇsᴛᴀ ᴘʀᴏɴᴛᴏ, ᴅᴇ sᴇʀ ғᴀʟsᴏ sᴇʀᴀ ɪɢɴᴏʀᴀᴅᴏ ᴇʟ ʀᴇᴘᴏʀᴛᴇ`, m, {contextInfo: { externalAdReply :{ mediaUrl: null, mediaType: 1, description: null, body: '𝐄𝐗𝐈𝐓𝐎𝐒', previewType: 0, thumbnail: imagen4, sourceUrl: [md, yt, tiktok].getRandom()}}})
  178. //conn.reply('[email protected]', m.quoted ? teks + m.quoted.text : teks, null, {
  179. //contextInfo: {
  180. //mentionedJid: [m.sender]
  181. //}})
  182. await delay(3 * 3000)
  183. conn.reply('[email protected]', m.quoted ? teks + m.quoted.text : teks, null, {contextInfo: {mentionedJid: [m.sender]
  184. }})}
  185. handler.help = ['reporte', 'request'].map(v => v + ' <teks>')
  186. handler.tags = ['main']
  187. handler.exp = 3500
  188. handler.command = /^(report|request|reporte|bugs|bug|report-owner|reportes|reportar)$/i
  189. handler.register = true
  190. export default handler
  191. const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms))