diff options
| author | ilotterytea <iltsu@alright.party> | 2025-06-22 01:24:49 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-06-22 01:24:49 +0500 |
| commit | bd4b7a66d161a8d1a89472f22d4857cd25de50dc (patch) | |
| tree | 0d0e49b7578d8e76d31c2a7417dabb68d5fd1df8 /extsrc.py | |
| parent | 0e3f431a58a7dffb52566734e294704143d2654f (diff) | |
feat: reupload external links to hosting
Diffstat (limited to 'extsrc.py')
| -rw-r--r-- | extsrc.py | 65 |
1 files changed, 65 insertions, 0 deletions
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)] + )) |
