/* * DON'T DELETE MY WM PLEASE @ ################ $ ===== ~ type: plugins/cjs ~ description: YouTube play ~ note: must install yt-search, notmebotz-tools modules first $ =========== * Follow my github https://github.com/herzonly * Follow my Instagram https://instagram.com/justme.herz * Follow my channel https://whatsapp.com/channel/0029VaGVOvq1iUxY6WgHLv2R @ ################ DONT DELETE MY WM PLEASE */ const search = require("yt-search"); const { youtubev3 } = require('notmebotz-tools'); const { exec } = require("child_process"); const fs = require("fs"); const path = require("path"); let handler = async (m, { conn, text }) => { if (!text) throw "Masukkan Judul Lagu Yang Ingin Dicari"; const look = await search(text); const convert = look.videos[0]; if (!convert) throw "Video/Audio Tidak Ditemukan"; if (convert.seconds >= 3600) return conn.reply(m.chat, "Video is longer than 1 hour!", m); const caption = `╭─────═[ Youtube Play ]═─────⋆ ├ ⬡ Title: ${convert.title} ├ ⬡ Duration : ${convert.timestamp} ├ ⬡ Upload At : ${convert.ago} ├ ⬡ Viewers : ${convert.views} ├ ⬡ ID : ${convert.videoId} ├ ⬡ Description : ${convert.description} ├ ⬡ Url : ${convert.url} ╰───────────────⋆`; try { let a = await youtubev3(convert.url, "720"); let inputPath = path.join(__dirname, `tmp/${Date.now()}.mp4`); let outputPath = inputPath.replace(".mp4", ".mp3"); let download = await fetch(a.data.media); let buffer = await download.buffer(); fs.writeFileSync(inputPath, buffer); exec(`ffmpeg -i "${inputPath}" -q:a 0 -map a "${outputPath}"`, async (err) => { if (err) return conn.reply(m.chat, "Error: " + err.message, m); fs.unlinkSync(inputPath); await conn.sendMessage(m.chat, { extendedTextMessage: { text: caption, contextInfo: { externalAdReply: { title: `Now playing... ${convert.title}`, mediaType: 1, body: "Enjoy your music!", previewType: 0, renderLargerThumbnail: true, thumbnailUrl: convert.image, sourceUrl: convert.url, }, }, mentions: [m.sender], }, }, {}); await conn.sendMessage(m.chat, { audio: { url: outputPath }, mimetype: "audio/mpeg", contextInfo: { externalAdReply: { title: convert.title, body: "", thumbnailUrl: convert.image, sourceUrl: convert.url, mediaType: 1, showAdAttribution: true, renderLargerThumbnail: true, }, }, }, { quoted: m }); fs.unlinkSync(outputPath); }); } catch (error) { conn.reply(m.chat, "Error: " + error.message, m); } }; handler.command = handler.help = ["play", "song", "ds"]; handler.tags = ["downloader"]; handler.exp = 0; handler.limit = true; handler.premium = false; module.exports = handler;