Spaces:
Runtime error
Runtime error
import os | |
import time | |
import requests | |
from PIL import Image | |
from pyrogram.enums import MessageMediaType | |
from pyrogram.types import Message | |
from Hellbot.core import ENV | |
from Hellbot.functions.convert import tgs_to_png, video_to_png | |
from Hellbot.functions.formatter import readable_time | |
from Hellbot.functions.images import create_thumbnail, draw_meme | |
from Hellbot.functions.media import get_metedata | |
from Hellbot.functions.paste import post_to_telegraph | |
from Hellbot.functions.tools import progress, runcmd | |
from Hellbot.functions.utility import TGraph | |
from . import Config, HelpMenu, db, hellbot, on_message | |
async def mediaInfo(_, message: Message): | |
if not message.reply_to_message or not message.reply_to_message.media: | |
return await hellbot.delete(message, "Reply to a media file") | |
media = message.reply_to_message.media | |
hell = await hellbot.edit(message, "Getting media info...") | |
if media == MessageMediaType.ANIMATION: | |
media_file = message.reply_to_message.animation | |
elif media == MessageMediaType.AUDIO: | |
media_file = message.reply_to_message.audio | |
elif media == MessageMediaType.DOCUMENT: | |
media_file = message.reply_to_message.document | |
elif media == MessageMediaType.PHOTO: | |
media_file = message.reply_to_message.photo | |
elif media == MessageMediaType.STICKER: | |
media_file = message.reply_to_message.sticker | |
elif media == MessageMediaType.VIDEO: | |
media_file = message.reply_to_message.video | |
else: | |
return await hellbot.delete(message, "Unsupported media type") | |
metadata = await get_metedata(media_file) | |
if not metadata: | |
return await hellbot.delete(message, "Failed to get media info") | |
await hell.edit(f"Fetched metadata, now fetching extra mediainfo...") | |
start_time = time.time() | |
try: | |
file_path = await message.reply_to_message.download( | |
Config.DWL_DIR, | |
progress=progress, | |
progress_args=(hell, start_time, "⬇️ Downloading"), | |
) | |
except Exception: | |
return await hell.edit( | |
f"**Failed to download media check the metadata instead!**\n\n{metadata}" | |
) | |
out, _, _, _ = await runcmd(f"mediainfo '{file_path}'") | |
if not out: | |
return await hell.edit( | |
f"Failed to get mediainfo, check the metadata instead!\n\n{metadata}" | |
) | |
await hell.edit(f"Uploading mediainfo to telegraph...") | |
to_paste = f"<strong>💫 HellBot Media Info:</strong><br>{metadata}<br><b>📝 MediaInfo:</b><br><code>{out}</code>" | |
link = post_to_telegraph("HellBotMediaInfo", to_paste) | |
await hell.edit(f"**📌 Media Info:** [Here]({link})", disable_web_page_preview=True) | |
os.remove(file_path) | |
async def memify(_, message: Message): | |
if len(message.command) < 2: | |
return await hellbot.delete(message, "Enter some text!") | |
if not message.reply_to_message or not message.reply_to_message.media: | |
return await hellbot.delete(message, "Reply to a media file") | |
start_time = time.time() | |
hell = await hellbot.edit(message, "Memifying...") | |
file = await message.reply_to_message.download( | |
Config.DWL_DIR, | |
progress=progress, | |
progress_args=(hell, start_time, "⬇️ Downloading"), | |
) | |
text = await hellbot.input(message) | |
if ";" in text: | |
upper_text, lower_text = text.split(";") | |
else: | |
upper_text, lower_text = text, "" | |
if file and file.endswith(".tgs"): | |
await hell.edit("Looks like an animated sticker, converting to image...") | |
pic = await tgs_to_png(file) | |
elif file and file.endswith((".webp", ".png")): | |
pic = Image.open(file).save(file, "PNG", optimize=True) | |
elif file: | |
await hell.edit("Converting to image...") | |
pic, status = await video_to_png(file, 0) | |
if status == False: | |
return await hellbot.error(hell, pic) | |
else: | |
return await hellbot.delete(message, "Unsupported media type") | |
await hell.edit("Adding text...") | |
memes = await draw_meme(file, upper_text, lower_text) | |
await hellbot.delete(hell, "Done!") | |
await message.reply_sticker(memes[1]) | |
await message.reply_photo( | |
memes[0], | |
caption=f"**🍀 𝖬𝖾𝗆𝗂𝖿𝗂𝖾𝖽 𝗎𝗌𝗂𝗇𝗀 𝖧𝖾𝗅𝗅𝖡𝗈𝗍!**", | |
) | |
os.remove(pic) | |
os.remove(file) | |
os.remove(memes[0]) | |
os.remove(memes[1]) | |
async def set_thumbnail(_, message: Message): | |
if len(message.command) < 2: | |
return await hellbot.delete( | |
message, "Reply to a media file to set as thumbnail!" | |
) | |
if not message.reply_to_message or not message.reply_to_message.media: | |
return await hellbot.delete( | |
message, "Reply to a media file to set as thumbnail!" | |
) | |
media = message.reply_to_message.media | |
if media not in MessageMediaType.PHOTO: | |
return await hellbot.delete( | |
message, | |
"Only photos are supported! If this is a file, try converting it to a photo first.", | |
) | |
if message.reply_to_message.photo.file_size >= 5242880: | |
return await hellbot.delete( | |
message, | |
"This photo is too big to upload to telegraph! You need to choose a photo below 5mb.", | |
) | |
hell = await hellbot.edit(message, "Uploading to telegraph...") | |
path = await message.reply_to_message.download(Config.TEMP_DIR) | |
try: | |
media_url = TGraph.telegraph.upload_file(path) | |
url = f"https://te.legra.ph{media_url[0]['src']}" | |
except Exception as e: | |
return await hellbot.error(hell, str(e)) | |
await db.set_env(ENV.thumbnail_url) | |
await hellbot.delete(hell, f"Thumbnail set to [this image]({url})!", 20) | |
os.remove(path) | |
async def renameMedia(_, message: Message): | |
if not message.reply_to_message or not message.reply_to_message.media: | |
return await hellbot.delete(message, "Reply to a media file to rename it!") | |
media = message.reply_to_message.media | |
if media not in [ | |
MessageMediaType.AUDIO, | |
MessageMediaType.DOCUMENT, | |
MessageMediaType.PHOTO, | |
MessageMediaType.VIDEO, | |
MessageMediaType.VOICE, | |
MessageMediaType.ANIMATION, | |
MessageMediaType.STICKER, | |
MessageMediaType.VIDEO_NOTE, | |
]: | |
return await hellbot.delete(message, "Unsupported media type!") | |
if len(message.command) < 2: | |
return await hellbot.delete( | |
message, "You need to provide a new filename with extention!" | |
) | |
new_name = await hellbot.input(message) | |
hell = await hellbot.edit(message, f"Renaming to `{new_name}` ...") | |
strart_time = time.time() | |
renamed_file = await message.reply_to_message.download( | |
Config.DWL_DIR + new_name, | |
progress=progress, | |
progress_args=(hell, strart_time, "⬇️ Downloading"), | |
) | |
dwl_time = readable_time(int(strart_time - time.time())) | |
await hell.edit(f"**Downloaded and Renamed in** `{dwl_time}`**,** __uploading...__") | |
start2 = time.time() | |
thumb = await db.get_env(ENV.thumbnail_url) | |
if thumb: | |
binary = requests.get(thumb).content | |
photo = f"{Config.TEMP_DIR}/thumb_{int(time.time())}.jpeg" | |
with open(photo, "wb") as f: | |
f.write(binary) | |
thumbnail = create_thumbnail(photo, (320, 320), 199) | |
else: | |
photo = None | |
thumbnail = None | |
await message.reply_document( | |
renamed_file, | |
thumb=thumbnail, | |
caption=f"**📁 File Name:** `{new_name}`", | |
file_name=new_name, | |
force_document=True, | |
progress=progress, | |
progress_args=(hell, start2, "⬆️ Uploading"), | |
) | |
end_time = readable_time(int(start2 - time.time())) | |
total_time = readable_time(int(strart_time - time.time())) | |
await hell.edit( | |
f"**📁 File Name:** `{new_name}`\n\n**⬇️ Downloaded in:** `{dwl_time}`\n**⬆️ Uploaded in:** `{end_time}`\n**💫 Total time taken:** `{total_time}`" | |
) | |
os.remove(renamed_file) | |
if photo: | |
os.remove(photo) | |
HelpMenu("media").add( | |
"mediainfo", | |
"<reply to media message>", | |
"Get the metadata and detailed media info of replied media file.", | |
"mediainfo", | |
).add( | |
"memify", | |
"<reply to media message> <upper text>;<lower text>", | |
"Add text to a media file and make it a meme.", | |
"memify Hello World", | |
"When ';' is used, the text before it will be the upper text and the text after it will be the lower text.", | |
).add( | |
"rename", | |
"<reply to media message> <new file name>", | |
"Rename a media file with the provided name.", | |
"rename HellBot.jpg", | |
"The file name must have an extention.", | |
).add( | |
"setthumbnail", | |
"<reply to photo>", | |
"Set the replied photo as the thumbnail of the bot for all the upload/rename function.", | |
"setthumbnail <reply>", | |
"The photo must be below 5mb and in photo format and not in file.", | |
).info( | |
"Media utils" | |
).done() | |