/** * Mengirim reaksi ke WhatsApp Channel melalui API * Description: Nih makan uy send React pesan saluran WhatsApp 😹 * Credit by Zx * Sumber: https://whatsapp.com/channel/0029VbDLqe7EquiSF4STU13o * * Catatan: Kalau Mau Di Sher Lagi Pake Credit Atau sumber mas 😹 */ import { gotScraping } from 'got-scraping'; const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); /** * @param {string} url - URL lengkap post WhatsApp Channel. * @param {string[]} [reactions=['😂']] - Array emoji yang dikirim. * @param {number} [maxRetries=5] - Maksimal percobaan ulang jika gagal/rate limit. */ async function sendReaction(url, reactions = ['😂'], maxRetries = 5) { let attempt = 0; while (attempt < maxRetries) { try { console.log(`[Attempt ${attempt + 1}/${maxRetries}] Mengirim reaction ke: ${url}`); const response = await gotScraping.post('https://react-w4.zfile.web.id/api/react', { json: { url: url, reactions: reactions, }, responseType: 'json', timeout: { request: 60000 }, }); const data = response.body; if (data.success) { console.log(`✅ Berhasil: ${data.message}`); return data; } else { console.warn(`⚠️ Gagal: ${data.message}`); await delay(5000); attempt++; } } catch (error) { if (error.response) { const data = error.response.body; const statusCode = error.response.statusCode; console.warn(`⚠️ HTTP Error ${statusCode}: ${data?.message || error.message}`); if (statusCode === 429 && data?.retryAfter) { const waitTime = data.retryAfter * 1000; console.log(`⏳ Rate limit tercapai. Menunggu ${data.retryAfter} detik sebelum retry...`); await delay(waitTime); attempt++; continue; } console.log('⏳ Server sibuk, mencoba lagi dalam 5 detik...'); await delay(5000); attempt++; continue; } console.error(`❌ Error jaringan:`, error.message); await delay(5000); attempt++; } } return null; } // CONTOH PENGGUNAAN const targetUrl = 'https://whatsapp.com/channel/0029VbDLqe7EquiSF4STU13o/451'; const emojiReactions = ['😂', '👍', '❤️']; sendReaction(targetUrl, emojiReactions);