import os import re import asyncio from pyrogram import Client from pyrogram import filters from pytgcalls import StreamType from pyrogram.types import Message from driver.filters import command from youtubesearchpython import VideosSearch from program.queues import QUEUE, add_to_queue from config import contact_filter, BOT_USERNAME from pytgcalls.types.input_stream import AudioVideoPiped from pytgcalls.types.input_stream.quality import HighQualityAudio, MediumQualityAudio from pytgcalls.types.input_stream.quality import HighQualityVideo, MediumQualityVideo, LowQualityVideo def ytsearch(query): try: search = VideosSearch(query, limit=1) for r in search.result()["result"]: ytid = r['id'] if len(r['title']) > 34: songname = r['title'][:35] + "..." else: songname = r['title'] url = f"https://www.youtube.com/watch?v={ytid}" return [songname, url] except Exception as e: print(e) return 0 async def ytdl(link): proc = await asyncio.create_subprocess_exec( 'youtube-dl', '-g', '-f', 'best[height<=?720][width<=?1280]', f'{link}', stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) stdout, stderr = await proc.communicate() if stdout: return 1, stdout.decode().split('\n')[0] else: return 0, stderr.decode() @Client.on_message(command(["vplay", f"vplay@{BOT_USERNAME}"]) & other_filters) async def vplay(client, m: Message): replied = m.reply_to_message chat_id = m.chat.id if replied: if replied.video or replied.document: loser = await replied.reply("๐Ÿ“ฅ **downloading video...**") dl = await replied.download() link = replied.link if len(m.command) < 2: Q = 720 else: pq = m.text.split(None, 1)[1] if pq == "720" or "480" or "360": Q = int(pq) else: Q = 720 await loser.edit("ยป __only 720, 480, 360 allowed__ \n๐Ÿ’ก **now streaming video in 720p**") if replied.video: songname = replied.video.file_name[:35] + "..." elif replied.document: songname = replied.document.file_name[:35] + "..." if chat_id in QUEUE: pos = add_to_queue(chat_id, songname, dl, link, "Video", Q) await loser.edit(f"๐Ÿ’ก **Track added to the queue**\n๐Ÿ”ข At position ยป `{pos}`") else: if Q==720: amaze = HighQualityVideo() elif Q==480: amaze = MediumQualityVideo() elif Q==360: amaze = LowQualityVideo() await call_py.join_group_call( chat_id, AudioVideoPiped( dl, HighQualityAudio(), amaze ), stream_type=StreamType().pulse_stream, ) add_to_queue(chat_id, songname, dl, link, "Video", Q) await loser.edit(f"๐Ÿ’ก **video streaming is started.**\n\n๐Ÿท **Name:** [{songname}]({link})\n๐Ÿ’ฌ **Chat:** `{chat_id}`", disable_web_page_preview=True) else: if len(m.command) < 2: await m.reply("ยป reply to an **audio file** or **give something to search.**") else: loser = await m.reply("๐Ÿ”Ž **searching...**") query = m.text.split(None, 1)[1] search = ytsearch(query) Q = 720 amaze = HighQualityVideo() if search==0: await loser.edit("โŒ **no results found.**") else: songname = search[0] url = search[1] veez, ytlink = await ytdl(url) if veez==0: await loser.edit(f"โŒ youtube-dl issues detected\n\nยป `{ytlink}`") else: if chat_id in QUEUE: pos = add_to_queue(chat_id, songname, ytlink, url, "Video", Q) await loser.edit(f"๐Ÿ’ก **Track added to the queue**\n๐Ÿ”ข At position ยป `{pos}`") else: try: await call_py.join_group_call( chat_id, AudioVideoPiped( ytlink, HighQualityAudio(), amaze ), stream_type=StreamType().pulse_stream, ) add_to_queue(chat_id, songname, ytlink, url, "Video", Q) await loser.edit(f"๐Ÿ’ก **video streaming is started.**\n\n๐Ÿท **Name:** [{songname}]({link})\n๐Ÿ’ฌ **Chat:** `{chat_id}`", disable_web_page_preview=True) except Exception as ep: await loser.edit(f"โŒ issues: `{ep}`") else: if len(m.command) < 2: await m.reply("ยป reply to an **audio file** or **give something to search.**") else: loser = await m.reply("๐Ÿ”Ž **searching...**") query = m.text.split(None, 1)[1] search = ytsearch(query) Q = 720 amaze = HighQualityVideo() if search==0: await loser.edit("โŒ **no results found.**") else: songname = search[0] url = search[1] veez, ytlink = await ytdl(url) if veez==0: await loser.edit(f"โŒ youtube-dl issues detected\n\nยป `{ytlink}`") else: if chat_id in QUEUE: pos = add_to_queue(chat_id, songname, ytlink, url, "Video", Q) await loser.edit(f"๐Ÿ’ก **Track added to the queue**\n๐Ÿ”ข At position ยป `{pos}`") else: try: await call_py.join_group_call( chat_id, AudioVideoPiped( ytlink, HighQualityAudio(), amaze ), stream_type=StreamType().pulse_stream, ) add_to_queue(chat_id, songname, ytlink, url, "Video", Q) await loser.edit(f"๐Ÿ’ก **video streaming is started.**\n\n๐Ÿท **Name:** [{songname}]({url})\n๐Ÿ’ฌ **Chat:** `{chat_id}`", disable_web_page_preview=True) except Exception as ep: await loser.edit(f"โŒ issues: `{ep}`") @Client.on_message(command(["vstream", f"vstream@{BOT_USERNAME}"]) & other_filters) async def vstream(client, m: Message): chat_id = m.chat.id if len(m.command) < 2: await m.reply("ยป give me a live-link/m3u8 url/youtube link to stream.") else: if len(m.command)==2: link = m.text.split(None, 1)[1] Q = 720 loser = await m.reply("๐Ÿ”„ **processing stream...**") elif len(m.command)==3: op = m.text.split(None, 1)[1] link = op.split(None, 1)[0] quality = op.split(None, 1)[1] if quality == "720" or "480" or "360": Q = int(quality) else: Q = 720 await m.reply("ยป __only 720, 480, 360 allowed__ \n๐Ÿ’ก **now streaming video in 720p**") loser = await m.reply("๐Ÿ”„ **processing stream...**") else: await m.reply("**/vstream {link} {720/480/360}**") regex = r"^(https?\:\/\/)?(www\.youtube\.com|youtu\.?be)\/.+" match = re.match(regex,link) if match: veez, livelink = await ytdl(link) else: livelink = link veez = 1 if veez==0: await loser.edit(f"โŒ youtube-dl issues detected\n\nยป `{ytlink}`") else: if chat_id in QUEUE: pos = add_to_queue(chat_id, "Live Stream", livelink, link, "Video", Q) await loser.edit(f"๐Ÿ’ก **Track added to the queue**\n๐Ÿ”ข At position ยป `{pos}`") else: if Q==720: amaze = HighQualityVideo() elif Q==480: amaze = MediumQualityVideo() elif Q==360: amaze = LowQualityVideo() try: await call_py.join_group_call( chat_id, AudioVideoPiped( livelink, HighQualityAudio(), amaze ), stream_type=StreamType().pulse_stream, ) add_to_queue(chat_id, "Live Stream", livelink, link, "Video", Q) await loser.edit(f"๐Ÿ’ก **video [live stream]({link}) is started.**\n๐Ÿ’ฌ chat: `{chat_id}`", disable_web_page_preview=True) except Exception as ep: await loser.edit(f"โŒ issues: `{ep}`")