Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const { Sparky } = require("../lib");
- const axios = require("axios");
- const fs = require("fs");
- const path = require("path");
- Sparky({
- name: "music",
- fromMe: false,
- category: "downloader",
- desc: "Search a song or download from YouTube URL"
- }, async ({ m, client, args }) => {
- args = args || m.quoted?.text;
- if (!args) return await m.reply("_Please provide a song name or YouTube URL!_");
- let tempFile;
- let statusMsg;
- try {
- const query = args.trim();
- const ytUrlRegex = /(https?:\/\/)?(www\.)?(youtube\.com|youtu\.be)\/[^\s]+/;
- const isUrl = ytUrlRegex.test(query);
- statusMsg = await m.sendMsg(m.jid, `🔍 Searching *${query}* ...`, { quoted: m });
- await m.react("🔍");
- let songTitle = "";
- let mp3Url = "";
- // ================= URL MODE =================
- if (isUrl) {
- const { data } = await axios.get(
- `https://rembg-phi.vercel.app/api/edit?url=${encodeURIComponent(query)}`
- );
- if (!data.success || !data.url) {
- await m.react("❌");
- return await m.sendMsg(
- m.jid,
- "_Failed to download audio from URL!_",
- { edit: statusMsg.key }
- );
- }
- songTitle = data.title;
- mp3Url = data.url;
- // ================= SEARCH MODE =================
- } else {
- const searchRes = await axios.get(
- `https://jerrycoder.oggyapi.workers.dev/yt-search?q=${encodeURIComponent(query)}`
- );
- if (!searchRes.data.status || !searchRes.data.result?.length) {
- await m.react("❌");
- return await m.sendMsg(m.jid, "_No results found!_", { edit: statusMsg.key });
- }
- const song = searchRes.data.result[0];
- songTitle = song.title;
- const { data } = await axios.get(
- `https://rembg-phi.vercel.app/api/edit?url=${encodeURIComponent(song.link)}`
- );
- if (!data.success || !data.url) {
- await m.react("❌");
- return await m.sendMsg(
- m.jid,
- "_Failed to download audio from search result!_",
- { edit: statusMsg.key }
- );
- }
- mp3Url = data.url;
- }
- // ================= DOWNLOAD =================
- await m.sendMsg(m.jid, `⬇️ Downloading: *${songTitle}*`, { edit: statusMsg.key });
- await m.react("⬇️");
- tempFile = path.join(__dirname, `${Date.now()}.mp3`);
- const writer = fs.createWriteStream(tempFile);
- const audioStream = await axios.get(mp3Url, {
- responseType: "stream",
- headers: {
- "User-Agent": "Mozilla/5.0"
- }
- });
- audioStream.data.pipe(writer);
- await new Promise((resolve, reject) => {
- writer.on("finish", resolve);
- writer.on("error", reject);
- });
- // ================= SEND AUDIO =================
- await m.sendMsg(
- m.jid,
- fs.readFileSync(tempFile),
- {
- mimetype: "audio/mpeg",
- fileName: `${songTitle}.mp3`,
- quoted: m
- },
- "audio"
- );
- await m.sendMsg(m.jid, `✅ *${songTitle}* sent successfully!`, {
- edit: statusMsg.key
- });
- await m.react("✅");
- } catch (err) {
- console.error("Music Command Error:", err);
- await m.react("❌");
- if (statusMsg) {
- await m.sendMsg(m.jid, `_Error:_ ${err.message}`, { edit: statusMsg.key });
- } else {
- await m.reply(`_Error:_ ${err.message}`);
- }
- } finally {
- if (tempFile && fs.existsSync(tempFile)) fs.unlinkSync(tempFile);
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment