| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- //Código elaborado por: https://github.com/elrebelde21
- /*FUNCIONA PERO NO COMO QUIERO LUEGO LOS ARREGLOS :v
- import { webp2png } from '../lib/webp2mp4.js';
- import uploadFile from '../lib/uploadFile.js';
- import uploadImage from '../lib/uploadImage.js';
- import axios from 'axios';
- import fs from 'fs';
- import { fileURLToPath } from 'url';
- import { dirname, join } from 'path';
- const __filename = fileURLToPath(import.meta.url);
- const __dirname = dirname(__filename);
- const OWNER1 = "[email protected]";
- const ACTIVE_CONVERSATIONS = {};
- const MAX_VIDEO_SIZE_MB = 60; // Límite de 60MB para videos
- let handler = async (m, { conn, text, args, command, usedPrefix }) => {
- let media = false;
- let q = m.quoted ? m.quoted : m;
- let mime = (q.msg || q).mimetype || '';
- let url = '';
- if (/image|video|audio/.test(mime)) {
- media = await q.download();
- if (/video/.test(mime)) {
- let videoPath = join(__dirname, `./temp_video_${new Date().getTime()}.mp4`);
- fs.writeFileSync(videoPath, media);
- let videoStats = fs.statSync(videoPath);
- let videoSizeMB = videoStats.size / (1024 * 1024);
- if (videoSizeMB > MAX_VIDEO_SIZE_MB) {
- fs.unlinkSync(videoPath);
- 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.*`);
- }
- url = videoPath;
- } else {
- url = await uploadImage(media);
- }} else if (/webp/.test(mime)) {
- media = await q.download();
- url = await webp2png(media);
- }
- let activeConversation = Object.entries(ACTIVE_CONVERSATIONS).find(([id, convo]) => convo.active && convo.userId === m.sender && convo.chatId === m.chat);
- if (activeConversation) {
- let [reportId] = activeConversation;
- let message = `📩 *Mensaje del usuario @${m.sender.split("@")[0]} (ID: ${reportId}):*\n${text || ''}`;
- if (url) {
- if (/image/.test(mime)) {
- await conn.sendMessage(OWNER1, { image: { url }, caption: message, contextInfo: { mentionedJid: [m.sender] } }, { quoted: m });
- } else if (/video/.test(mime)) {
- await conn.sendMessage(OWNER1, { video: { url }, caption: message, contextInfo: { mentionedJid: [m.sender] } }, { quoted: m });
- } else if (/audio/.test(mime)) {
- await conn.sendMessage(OWNER1, { audio: { url }, mimetype: mime, caption: message, contextInfo: { mentionedJid: [m.sender] } }, { quoted: m });
- }} else if (m.msg && m.msg.sticker) {
- await conn.sendMessage(OWNER1, { sticker: media, contextInfo: { mentionedJid: [m.sender] } }, { quoted: m });
- } else {
- await conn.sendMessage(OWNER1, { text: message, mentions: [m.sender] }, { quoted: m });
- }
- return;
- }
- if (command === 'report' || command === 'reporte') {
- if (!text && !m.quoted) return m.reply(`⚠️ 𝐄𝐬𝐜𝐫𝐢𝐛𝐚 𝐞𝐥 𝐞𝐫𝐫𝐨𝐫/𝐜𝐨𝐦𝐚𝐧𝐝𝐨 𝐜𝐨𝐧 𝐟𝐚𝐥𝐥𝐚\n\n*𝐄𝐣:* ${usedPrefix + command} los sticker no funka`);
- if (text.length < 8) throw `${fg} ✨ *𝑴𝒊́𝒏𝒊𝒎𝒐 10 𝒄𝒂𝒓𝒂𝒄𝒕𝒆𝒓𝒆𝒔 𝒑𝒂𝒓𝒂 𝒉𝒂𝒄𝒆𝒓 𝒆𝒍 𝒓𝒆𝒑𝒐𝒓𝒕𝒆...*`
- if (text.length > 1000) throw `${fg} ⚠️ *𝑴𝒂́𝒙𝒊𝒎𝒐 1000 𝑪𝒂𝒓𝒂𝒄𝒕𝒆𝒓𝒆𝒔 𝒑𝒂𝒓𝒂 𝒉𝒂𝒄𝒆𝒓 𝒆𝒍 𝒓𝒆𝒑𝒐𝒓𝒕𝒆.*`
- let reportId = Math.floor(Math.random() * 901);
- ACTIVE_CONVERSATIONS[reportId] = {
- userId: m.sender,
- userName: m.pushName || 'Usuario desconocido',
- active: true,
- chatId: m.chat,
- url: url,
- mime: mime,
- };
- let reportText = text || (m.quoted && m.quoted.text) || 'Sin mensaje';
- let teks = `┏╼╾╼⧼⧼⧼ REPORTE ⧽⧽⧽╼╼╼┓
- ╏• *ɴᴜᴍᴇʀᴏ:* Wa.me/${m.sender.split("@")[0]}
- ╏• *ᴍᴇɴsᴀᴊᴇ:* ${reportText}
- ┗╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼\n\nResponde al mensaje con:\n*"responder ${reportId} [mensaje]"* para interactuar.\nUsa *.fin ${reportId}* para finalizar la conversación.`
- await conn.sendMessage(OWNER1, { text: teks, mentions: [m.sender] }, { quoted: m });
- await delay(1000)
- await conn.reply(m.chat, `*⚡ᴇʟ ʀᴇᴘᴏʀᴛᴇ ʜᴀ sɪᴅᴏ ᴇɴᴠɪᴀᴅᴏs ᴀ ᴍɪ ᴄʀᴇᴀᴅᴏʀ, ᴛᴇɴᴅʀᴀ ᴜɴᴀ ʀᴇsᴘᴜᴇsᴛᴀ ᴘʀᴏɴᴛᴏ, ᴅᴇ sᴇʀ ғᴀʟsᴏ sᴇʀᴀ ɪɢɴᴏʀᴀᴅᴏ ᴇʟ ʀᴇᴘᴏʀᴛᴇ*`);
- return;
- }};
- handler.before = async (m, { conn }) => {
- let activeConversation = Object.entries(ACTIVE_CONVERSATIONS).find(([id, convo]) => convo.active && convo.userId === m.sender && convo.chatId === m.chat);
- if (activeConversation) {
- let [reportId] = activeConversation;
- let message2 = `*📩 Nueva respuesta del usuario @${m.sender.split("@")[0]} (ID: ${reportId}):*\n${m.text || ''}`;
- if (m.mtype === 'stickerMessage') {
- let sticker = await m.download();
- if (sticker) {
- await conn.sendMessage(OWNER1, { sticker }, { quoted: m });
- } else {
- }} else if (m.mtype === 'imageMessage' || m.mtype === 'videoMessage' || m.mtype === 'audioMessage') {
- let media = await m.download();
- let url = await uploadImage(media);
- if (url) {
- await conn.sendMessage(OWNER1, { [m.mtype === 'videoMessage' ? 'video' : m.mtype === 'audioMessage' ? 'audio' : 'image']: { url }, caption: message2, contextInfo: { mentionedJid: [m.sender] }}, { quoted: m });
- } else {
- console.error('Error');
- }} else {
- await conn.sendMessage(OWNER1, { text: message2, mentions: [m.sender] }, { quoted: m });
- }}
- let matchResponder = m.text.match(/^responder (\S+) (.+)/i);
- if (matchResponder) {
- let [_, reportId, ownerMessage] = matchResponder;
- if (!ACTIVE_CONVERSATIONS[reportId] || !ACTIVE_CONVERSATIONS[reportId].active) return
- let { userId } = ACTIVE_CONVERSATIONS[reportId];
- if (m.quoted) {
- let quoted = m.quoted;
- let mime = (quoted.msg || quoted).mimetype || '';
- if (/image|video|audio|sticker/.test(mime)) {
- let media = await quoted.download();
- let url = await uploadImage(media);
- if (/image/.test(mime)) {
- await conn.sendMessage(userId, { image: { url }, caption: ownerMessage });
- } else if (/video/.test(mime)) {
- await conn.sendMessage(userId, { video: { url }, caption: ownerMessage });
- } else if (/audio/.test(mime)) {
- await conn.sendMessage(userId, { audio: { url }, mimetype: mime, caption: ownerMessage });
- } else if (/sticker/.test(mime)) {
- await conn.sendMessage(userId, { sticker: media });
- }} else {
- await conn.sendMessage(userId, { text: ownerMessage });
- }} else {
- await conn.sendMessage(userId, { text: `*• Respuesta del propietario:*\n${ownerMessage}` });
- }
- return;
- }
- if (m.quoted && m.quoted.text) {
- let quotedTextMatch = m.quoted.text.match(/ID: (\d+)/);
- if (quotedTextMatch) {
- let reportId = quotedTextMatch[1];
- if (ACTIVE_CONVERSATIONS[reportId] && ACTIVE_CONVERSATIONS[reportId].active) {
- let { userId } = ACTIVE_CONVERSATIONS[reportId];
- let ownerMessage = m.text || 'Sin mensaje';
- if (/image|video|audio|sticker/.test(m.mtype)) {
- let media = await m.download();
- let url = await uploadImage(media);
- if (/image/.test(m.mtype)) {
- await conn.sendMessage(userId, { image: { url }, caption: ownerMessage });
- } else if (/video/.test(m.mtype)) {
- await conn.sendMessage(userId, { video: { url }, caption: ownerMessage });
- } else if (/audio/.test(m.mtype)) {
- await conn.sendMessage(userId, { audio: { url }, mimetype: m.mimetype });
- } else if (/sticker/.test(m.mtype)) {
- await conn.sendMessage(userId, { sticker: media });
- }} else {
- await conn.sendMessage(userId, { text: `*• Respuesta del propietario:*\n${ownerMessage}` });
- }
- return;
- }}}
- let matchFin = m.text.match(/^\.fin (\S+)/i);
- if (matchFin) {
- let [_, reportId] = matchFin;
- if (!ACTIVE_CONVERSATIONS[reportId]) return await conn.reply(m.chat, `⚠️ No se encontró ninguna conversación activa con ese ID.`, m);
- let { userId } = ACTIVE_CONVERSATIONS[reportId];
- ACTIVE_CONVERSATIONS[reportId].active = false;
- await conn.reply(userId, `🔒 *La conversación ha sido cerrada por el propietario.*`);
- await delay(1000)
- await conn.reply(m.chat, `✔️ Conversación ${reportId} cerrada.`);
- return;
- }};
- handler.help = ['reporte', 'request'].map(v => v + ' <teks>')
- handler.tags = ['main']
- handler.exp = 3500
- handler.command = /^(report|request|reporte|bugs|bug|report-owner|reportes|reportar)$/i
- handler.register = true
- handler.private = true
- export default handler
- const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
- */
- let handler = async (m, { conn, text, usedPrefix, command }) => {
- 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()}}})
- if (text.length < 8) throw `${fg} ✨ *𝑴𝒊́𝒏𝒊𝒎𝒐 10 𝒄𝒂𝒓𝒂𝒄𝒕𝒆𝒓𝒆𝒔 𝒑𝒂𝒓𝒂 𝒉𝒂𝒄𝒆𝒓 𝒆𝒍 𝒓𝒆𝒑𝒐𝒓𝒕𝒆...*`
- if (text.length > 1000) throw `${fg} ⚠️ *𝑴𝒂́𝒙𝒊𝒎𝒐 1000 𝑪𝒂𝒓𝒂𝒄𝒕𝒆𝒓𝒆𝒔 𝒑𝒂𝒓𝒂 𝒉𝒂𝒄𝒆𝒓 𝒆𝒍 𝒓𝒆𝒑𝒐𝒓𝒕𝒆.*`
- let teks = `┏╼╾╼⧼⧼⧼ REPORTE ⧽⧽⧽╼╼╼┓
- ╏• *ɴᴜᴍᴇʀᴏ:* Wa.me/${m.sender.split`@`[0]}
- ╏• *ᴍᴇɴsᴀᴊᴇ:* ${text}
- ┗╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼╼`
- await delay(1 * 1000)
- 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()}}})
- //conn.reply('[email protected]', m.quoted ? teks + m.quoted.text : teks, null, {
- //contextInfo: {
- //mentionedJid: [m.sender]
- //}})
- await delay(3 * 3000)
- conn.reply('[email protected]', m.quoted ? teks + m.quoted.text : teks, null, {contextInfo: {mentionedJid: [m.sender]
- }})}
- handler.help = ['reporte', 'request'].map(v => v + ' <teks>')
- handler.tags = ['main']
- handler.exp = 3500
- handler.command = /^(report|request|reporte|bugs|bug|report-owner|reportes|reportar)$/i
- handler.register = true
- export default handler
- const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
|