azils3's picture
Upload 47 files
bc96bf6 verified
raw
history blame
5.04 kB
from __future__ import unicode_literals
import os, requests, asyncio, math, time, wget
from pyrogram import filters, Client
from pyrogram.types import Message
from youtube_search import YoutubeSearch
from youtubesearchpython import SearchVideos
from yt_dlp import YoutubeDL
@Client.on_message(filters.command(['song', 'mp3']) & filters.private)
async def song(client, message):
user_id = message.from_user.id
user_name = message.from_user.first_name
rpk = "["+user_name+"](tg://user?id="+str(user_id)+")"
query = ''
for i in message.command[1:]:
query += ' ' + str(i)
print(query)
m = await message.reply(f"**Ρ•Ρ”Ξ±rchΓ­ng Ρ‡Οƒur Ρ•Οƒng...!\n {query}**")
ydl_opts = {"format": "bestaudio[ext=m4a]"}
try:
results = YoutubeSearch(query, max_results=1).to_dict()
link = f"https://youtube.com{results[0]['url_suffix']}"
title = results[0]["title"][:40]
thumbnail = results[0]["thumbnails"][0]
thumb_name = f'thumb{title}.jpg'
thumb = requests.get(thumbnail, allow_redirects=True)
open(thumb_name, 'wb').write(thumb.content)
performer = f"[Mα΄‹Ι΄ Bᴏᴛᴒℒ]"
duration = results[0]["duration"]
url_suffix = results[0]["url_suffix"]
views = results[0]["views"]
except Exception as e:
print(str(e))
return await m.edit("**π™΅π™Ύπš„π™½π™³ π™½π™Ύπšƒπ™·π™Έπ™½π™Ά π™Ώπ™»π™΄π™°πš‚π™΄ π™²π™Ύπšπšπ™΄π™²πšƒ πšƒπ™·π™΄ πš‚π™Ώπ™΄π™»π™»π™Έπ™½π™Ά π™Ύπš 𝙲𝙷𝙴𝙲𝙺 πšƒπ™·π™΄ 𝙻𝙸𝙽𝙺**")
await m.edit("**dΟƒwnlσαdΓ­ng Ρ‡Οƒur Ρ•Οƒng...!**")
try:
with YoutubeDL(ydl_opts) as ydl:
info_dict = ydl.extract_info(link, download=False)
audio_file = ydl.prepare_filename(info_dict)
ydl.process_info(info_dict)
cap = "**BYβ€Ίβ€Ί [Mα΄‹Ι΄ Bᴏᴛᴒℒ](https://t.me/mkn_bots_updates)**"
secmul, dur, dur_arr = 1, 0, duration.split(':')
for i in range(len(dur_arr)-1, -1, -1):
dur += (int(dur_arr[i]) * secmul)
secmul *= 60
await message.reply_audio(
audio_file,
caption=cap,
quote=False,
title=title,
duration=dur,
performer=performer,
thumb=thumb_name
)
await m.delete()
except Exception as e:
await m.edit("**🚫 π™΄πšπšπ™Ύπš 🚫**")
print(e)
try:
os.remove(audio_file)
os.remove(thumb_name)
except Exception as e:
print(e)
def get_text(message: Message) -> [None,str]:
text_to_return = message.text
if message.text is None:
return None
if " " not in text_to_return:
return None
try:
return message.text.split(None, 1)[1]
except IndexError:
return None
@Client.on_message(filters.command(["video", "mp4"]))
async def vsong(client, message: Message):
urlissed = get_text(message)
pablo = await client.send_message(message.chat.id, f"**𝙡𝙸𝙽𝙳𝙸𝙽𝙢 πšˆπ™Ύπš„πš πš…π™Έπ™³π™΄π™Ύ** `{urlissed}`")
if not urlissed:
return await pablo.edit("Invalid Command Syntax Please Check help Menu To Know More!")
search = SearchVideos(f"{urlissed}", offset=1, mode="dict", max_results=1)
mi = search.result()
mio = mi["search_result"]
mo = mio[0]["link"]
thum = mio[0]["title"]
fridayz = mio[0]["id"]
mio[0]["channel"]
kekme = f"https://img.youtube.com/vi/{fridayz}/hqdefault.jpg"
await asyncio.sleep(0.6)
url = mo
sedlyf = wget.download(kekme)
opts = {
"format": "best",
"addmetadata": True,
"key": "FFmpegMetadata",
"prefer_ffmpeg": True,
"geo_bypass": True,
"nocheckcertificate": True,
"postprocessors": [{"key": "FFmpegVideoConvertor", "preferedformat": "mp4"}],
"outtmpl": "%(id)s.mp4",
"logtostderr": False,
"quiet": True,
}
try:
with YoutubeDL(opts) as ytdl:
ytdl_data = ytdl.extract_info(url, download=True)
except Exception as e:
return await pablo.edit_text(f"**π™³πš˜πš πš—πš•πš˜πšŠπš π™΅πšŠπš’πš•πšŽπš π™Ώπš•πšŽπšŠπšœπšŽ πšƒπš›πš’ π™°πšπšŠπš’πš—..β™₯️** \n**Error :** `{str(e)}`")
file_stark = f"{ytdl_data['id']}.mp4"
capy = f"""**πšƒπ™Έπšƒπ™»π™΄ :** [{thum}]({mo})\n**πšπ™΄πš€πš„π™΄πš‚πšƒπ™΄π™³ π™±πšˆ :** {message.from_user.mention}"""
await client.send_video(
message.chat.id,
video=open(file_stark, "rb"),
duration=int(ytdl_data["duration"]),
file_name=str(ytdl_data["title"]),
thumb=sedlyf,
caption=capy,
supports_streaming=True,
reply_to_message_id=message.id
)
await pablo.delete()
for files in (sedlyf, file_stark):
if files and os.path.exists(files):
os.remove(files)