Created
November 6, 2025 12:35
-
-
Save mifyow/19bffd9bf5169993bf8ad92ed47ecfa4 to your computer and use it in GitHub Desktop.
Uploaded via Mifinfinity-!! | Yessir
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import axios from "axios"; | |
| export default { | |
| name: "ytdl", | |
| category: "downloader", | |
| command: ["ytdl", "yt"], | |
| run: async (conn, m) => { | |
| try { | |
| const input = m.isQuoted ? m.quoted.text : m.text; | |
| const regex = /(https?:\/\/(?:www\.)?(youtube\.com|youtu\.be)\/[^\s]+)/; | |
| const parseUrl = input.match(regex)?.[0]; | |
| if (!parseUrl) { | |
| return m.reply( | |
| `# Cara Penggunaan\n\n` + | |
| `> ${m.cmd} <link_youtube> --audio\n` + | |
| `> ${m.cmd} <link_youtube> --video\n\n` + | |
| `# Contoh:\n` + | |
| `> ${m.cmd} https://youtu.be/dQw4w9WgXcQ --audio` | |
| ); | |
| } | |
| let type; | |
| if (input.includes("--audio")) type = "audio"; | |
| else if (input.includes("--video")) type = "video"; | |
| else return m.reply(`❗ Tentukan jenis unduhan: --audio atau --video`); | |
| m.reply("⏳ Sedang memproses permintaanmu..."); | |
| let command; | |
| if (type === "audio") command = `-x --audio-format mp3 ${parseUrl}`; | |
| else command = `-f bestvideo+bestaudio[ext=mp4]/best[ext=mp4]/best ${parseUrl}`; | |
| const encoded = encodeURIComponent(command); | |
| const response = await axios.get( | |
| `https://ytdlp.online/stream?command=${encoded}`, | |
| { responseType: "stream" } | |
| ); | |
| const downloadUrl = await new Promise((resolve, reject) => { | |
| let found = null; | |
| response.data.on("data", (chunk) => { | |
| const text = chunk.toString(); | |
| const match = | |
| text.match(/href="([^"]+\.(mp3|mp4|m4a|webm|mov|mkv))"/i) || | |
| text.match(/(https:\/\/ytdlp\.online\/[^"' ]+\.(mp3|mp4|m4a|webm|mov|mkv))/i); | |
| if (match) | |
| found = match[1].startsWith("http") | |
| ? match[1] | |
| : `https://ytdlp.online${match[1]}`; | |
| }); | |
| response.data.on("end", () => { | |
| if (!found) reject(new Error("Gagal menemukan URL download")); | |
| else resolve(found); | |
| }); | |
| response.data.on("error", reject); | |
| }); | |
| if (type === "audio") { | |
| await m.reply({ | |
| audio: { url: downloadUrl }, | |
| mimetype: "audio/mpeg", | |
| caption: "🎧 Berhasil mengunduh audio!" | |
| }); | |
| } else { | |
| await m.reply({ | |
| video: { url: downloadUrl }, | |
| caption: "🎥 Berhasil mengunduh video!" | |
| }); | |
| } | |
| } catch (error) { | |
| m.reply("⚠️ Terjadi kesalahan saat mengambil video YouTube."); | |
| } | |
| }, | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment