From bd4b7a66d161a8d1a89472f22d4857cd25de50dc Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 22 Jun 2025 01:24:49 +0500 Subject: feat: reupload external links to hosting --- extsrc.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 extsrc.py (limited to 'extsrc.py') diff --git a/extsrc.py b/extsrc.py new file mode 100644 index 0000000..f321cac --- /dev/null +++ b/extsrc.py @@ -0,0 +1,65 @@ +from os import unlink +from time import time + +import yt_dlp +from file import upload_file +from telegram import Update +from telegram.constants import ParseMode +from telegram.ext import ConversationHandler, CommandHandler, MessageHandler, filters, ContextTypes + +STATES = dict( + extsrc_url=1 +) + + +async def download_from_extenal_source(update: Update, url: str): + ydl = yt_dlp.YoutubeDL({ + "format": "worst", + "outtmpl": "./temp/%(id)s.%(ext)s" + }) + msg = await update.message.reply_text('Downloading from external source (may take a while)...', + reply_to_message_id=update.message.message_id) + + start_time = time() + ydl.download(url) + + await msg.edit_text(f'Uploading to file hosting (downloaded in {int(time() - start_time)}s)...') + + info = ydl.extract_info(url) + file_path = f"./temp/{info['id']}.{info['ext']}" + url = upload_file(file_path, '') + + await msg.delete() + await update.message.reply_text(f'Saved! Here is your URL: [{url}]({url})', ParseMode.MARKDOWN, + reply_to_message_id=update.message.message_id) + + unlink(file_path) + + +async def extsrc(update: Update, context: ContextTypes.DEFAULT_TYPE): + if context.args: + await download_from_extenal_source(update, context.args[0]) + return ConversationHandler.END + else: + await update.message.reply_text("Send an URL and I will try to reupload it to file hosting.") + return STATES["extsrc_url"] + + +async def extsrc_continue(update: Update, _: ContextTypes.DEFAULT_TYPE): + await download_from_extenal_source(update, update.message.text) + return ConversationHandler.END + + +async def cancel(update: Update, _: ContextTypes.DEFAULT_TYPE): + await update.message.reply_text("Command cancelled.") + return ConversationHandler.END + + +def extsrc_add_handler(app): + app.add_handler(ConversationHandler( + entry_points=[CommandHandler("extsrc", extsrc)], + states={ + STATES["extsrc_url"]: [MessageHandler(filters.TEXT & ~filters.COMMAND, extsrc_continue)] + }, + fallbacks=[CommandHandler('cancel', cancel)] + )) -- cgit v1.2.3