const axios = require('axios'); const PRIMARY_API = "https://melissa-api-hub-1.onrender.com/Melissa-api-hub/badhon-00-api/apis/melissa/sing?q="; const FALLBACK_API = "https://melissa-api-hub-1.onrender.com/api/sing/search?limit=5&q="; module.exports = { config: { name: "play", author: "BADHON-BBZ", version: "3.0.0", role: 0, category: "tools", usage: "{pn} " }, react: async function ({ message, api, event }, emoji) { try { if (message && typeof message.react === "function") { await message.react(emoji); return; } if (api && typeof api.setMessageReaction === "function" && event) { await api.setMessageReaction(emoji, event.messageID, () => {}, true); } } catch (e) { console.log("[sing] reaction failed:", e.message); } }, fetchAudioStream: async function (audioUrl, retries = 1) { let lastErr; for (let i = 0; i <= retries; i++) { try { return await axios.get(audioUrl, { responseType: 'stream', timeout: 30000 }); } catch (e) { lastErr = e; console.log(`[sing] audio fetch attempt ${i + 1} failed:`, e.message); } } throw lastErr; }, onStart: async function ({ message, args, api, event }) { const query = args.join(" "); if (!query) return message.reply("Please provide a song name."); await module.exports.react({ message, api, event }, "⏳"); try { let data; try { const res = await axios.get(PRIMARY_API + encodeURIComponent(query), { timeout: 10000 }); data = res.data; } catch (e) { const res = await axios.get(FALLBACK_API + encodeURIComponent(query), { timeout: 10000 }); data = res.data; } const audioUrl = data?.download_url || data?.audio_url || data?.result?.download_url; const title = data?.title || data?.result?.title || query; if (!audioUrl) { await module.exports.react({ message, api, event }, "❌"); return message.reply("Couldn't find that song."); } let audioRes; try { audioRes = await module.exports.fetchAudioStream(audioUrl, 1); } catch (e) { await module.exports.react({ message, api, event }, "❌"); return message.reply("The audio server is taking too long to respond. Please try again in a bit."); } await message.reply({ body: `🎵 ${title}`, attachment: audioRes.data }); await module.exports.react({ message, api, event }, "✅"); } catch (err) { await module.exports.react({ message, api, event }, "❌"); message.reply("Error: " + (err.response?.data?.error || err.message)); } } };