const axios = require("axios"); const fs = require('fs'); const path = require('path'); const baseApiUrl = async () => { const base = await axios.get(`https://raw.githubusercontent.com/mahmudx7/HINATA/main/baseApiUrl.json`); return base.data.mahmud; }; module.exports = { config: { name: "video", aliases: ["ভিডিও"], version: "1.7", author: "𓆩𝑅𝑜𝒷𝒾𝓃𓆪 𝒜𝓁𝒾", countDown: 10, role: 0, description: { bn: "ইউটিউব থেকে ভিডিও ডাউনলোড করুন (নাম বা লিঙ্ক দিয়ে)", en: "Download video from YouTube (by name or link)", vi: "Tải video từ YouTube (theo tên hoặc liên kết)" }, category: "media", guide: { bn: ' {pn} <নাম বা লিঙ্ক>: ভিডিও ডাউনলোড করতে নাম বা লিঙ্ক দিন', en: ' {pn} : Provide video name or link', vi: ' {pn} : Cung cấp tên hoặc liên kết video' } }, langs: { bn: { noInput: "× বেবি, ভিডিওর নাম বা লিঙ্ক তো দাও! 📺", noResult: "× কোনো রেজাল্ট পাওয়া যায়নি।", success: "✅ 𝙃𝙚𝙧𝙚'𝙨 𝙮𝙤𝙪𝙧 𝙫𝙞𝙙𝙚𝙤 𝙗𝙖𝙗𝙮\n\n• 𝐓𝐢𝐭𝐥𝐞: %1", error: "× সমস্যা হয়েছে: %1। প্রয়োজনে contact 𓆩𝑅𝑜𝒷𝒾𝓃𓆪 𝒜𝓁𝒾。" }, en: { noInput: "× Baby, please provide a video name or link! 📺", noResult: "× No results found.", success: "✅ 𝙃𝙚𝙧𝙚'𝙨 𝙮𝙤𝙪𝙧 𝙫𝙞𝙙𝙚𝙤 𝙗𝙖𝙗𝙮\n\n• 𝐓𝐢𝐭𝐥𝐞: %1", error: "× API error: %1. contact 𓆩𝑅𝑜𝒷𝒾𝓃𓆪 𝒜𝓁𝒾 for help." }, vi: { noInput: "× Cưng ơi, vui lòng cung cấp tên hoặc liên kết video! 📺", noResult: "× Không tìm thấy kết quả.", success: "✅ Video của cưng đây <😘\n\n• 𝐓𝐢êu đề: %1", error: "× Lỗi: %1. Liên hệ 𓆩𝑅𝑜𝒷𝒾𝓃𓆪 𝒜𝓁𝒾 để hỗ trợ." } }, onStart: async function ({ api, event, args, message, getLang }) { if (!args[0]) return message.reply(getLang("noInput")); try { api.setMessageReaction("🐤", event.messageID, () => {}, true); const apiUrl = await baseApiUrl(); const checkurl = /^(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=|shorts\/))((\w|-){11})(?:\S+)?$/; let videoID; if (checkurl.test(args[0])) { videoID = args[0].match(checkurl)[1]; } else { const keyWord = args.join(" "); const searchRes = await axios.get(`${apiUrl}/api/video/search?songName=${encodeURIComponent(keyWord)}`); if (!searchRes.data || searchRes.data.length === 0) { api.setMessageReaction("🥹", event.messageID, () => {}, true); return message.reply(getLang("noResult")); } videoID = searchRes.data[0].id; } const cacheDir = path.join(__dirname, "cache"); if (!fs.existsSync(cacheDir)) fs.mkdirSync(cacheDir); const filePath = path.join(cacheDir, `video_${videoID}.mp4`); const res = await axios.get(`${apiUrl}/api/video/download?link=${videoID}&format=mp4`); const { title, downloadLink } = res.data; const videoBuffer = (await axios.get(downloadLink, { responseType: "arraybuffer" })).data; fs.writeFileSync(filePath, Buffer.from(videoBuffer)); return message.reply({ body: getLang("success", title), attachment: fs.createReadStream(filePath) }, () => { api.setMessageReaction("🪽", event.messageID, () => {}, true); if (fs.existsSync(filePath)) fs.unlinkSync(filePath); }); } catch (err) { console.error("Video Download Error:", err); api.setMessageReaction("❌", event.messageID, () => {}, true); return message.reply(getLang("error", err.message)); } } };