From b95ce804ab496c27b9a2d296dca121716c2c6e1b Mon Sep 17 00:00:00 2001 From: Flummi Date: Mon, 1 May 2023 15:44:40 +0200 Subject: [PATCH] extended mime check and failsafe --- src/inc/trigger/parser.mjs | 46 ++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/src/inc/trigger/parser.mjs b/src/inc/trigger/parser.mjs index ed5c88d..5e9a9c2 100644 --- a/src/inc/trigger/parser.mjs +++ b/src/inc/trigger/parser.mjs @@ -51,13 +51,24 @@ export default async bot => { const maxfilesize = (getLevel(e.user).level > 50 ? cfg.main.maxfilesize * cfg.main.adminmultiplier : cfg.main.maxfilesize); - let ext; // read metadata - if(!regex.yt.test(link)) { + /*if(!regex.yt.test(link)) { const tmphead = (await fetch(link, { method: "HEAD" })).headers["content-type"]; if(!Object.keys(cfg.mimes).includes(tmphead)) return; ext = cfg.mimes[tmphead]; + }*/ + let ext; + try { + const meta = JSON.parse((await queue.exec(`yt-dlp -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' --skip-download --dump-json "${link}"`)).stdout); + ext = meta.ext; + } catch(err) { + const tmphead = (await fetch(link, { method: "HEAD" })).headers["content-type"]; + ext = tmphead; + } + + if(!Object.values(cfg.mimes).includes(ext.toLowerCase())) { + return await e.reply('mime schmime '+ext); } const msg = await e.reply(`[charging the f0cker] downloading: ${uuid}`, { @@ -66,7 +77,14 @@ export default async bot => { // download data const start = new Date(); - let source = (await queue.exec(`yt-dlp -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' "${link}" --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath`)).stdout.trim(); + let source; + try { + source = (await queue.exec(`yt-dlp -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' "${link}" --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath --merge-output-format "mp4"`)).stdout.trim(); + } catch(err) { + if(e.type == 'tg') + return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "something went wrong lol"); + return await e.reply("something went wrong lol"); + } if(!source) { if(e.type == 'tg') @@ -91,8 +109,28 @@ export default async bot => { } // mime check - const mime = (await queue.exec(`file --mime-type -b ${source}`)).stdout.trim(); + let mime = (await queue.exec(`file --mime-type -b ${source}`)).stdout.trim(); + try { + if(mime == 'video/x-matroska') { // mkv failsafe + await queue.exec(`ffmpeg -i ./tmp/${uuid}.mkv -codec copy ./tmp/${uuid}.mp4`); + await fs.promises.unlink(source); + source = source.replace(/\.mkv$/, '.mp4'); + mime = 'video/mp4'; + } + if(source.match(/\.opus$/)) { // opus failsave + await queue.exec(`ffmpeg -i ./tmp/${uuid}.opus -codec copy ./tmp/${uuid}.ogg`); + await fs.promises.unlink(source); + source = source.replace(/\.opus$/, '.ogg'); + mime = 'audio/ogg'; + } + } catch(err) { + if(e.type == 'tg') + return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "something went wrong lol"); + return await e.reply("something went wrong lol"); + } + if(!Object.keys(cfg.mimes).includes(mime)) { + await fs.promises.unlink(source).catch(_=>{}); if(e.type == 'tg') return await e.editMessageText(msg.result.chat.id, msg.result.message_id, `lol, go f0ck yourself (${mime})`); return await e.reply(`lol, go f0ck yourself (${mime})`);