2022-01-18 10:04:11 +00:00
# Copyright (C) 2021 By Veez Music-Project
# Commit Start Date 20/10/2021
# Finished On 28/10/2021
2022-01-19 13:39:26 +00:00
# important things
2022-01-18 10:04:11 +00:00
import re
import asyncio
2022-01-19 13:39:26 +00:00
# pyrogram stuff
from pyrogram import Client
from pyrogram . errors import UserAlreadyParticipant , UserNotParticipant
from pyrogram . types import InlineKeyboardButton , InlineKeyboardMarkup , Message
# pytgcalls stuff
from pytgcalls import StreamType
from pytgcalls . types . input_stream import AudioPiped
2022-01-30 20:07:18 +00:00
from pytgcalls . types . input_stream . quality import HighQualityAudio
2022-01-19 13:39:26 +00:00
# repository stuff
from program . utils . inline import stream_markup
2022-01-18 10:04:11 +00:00
from driver . design . thumbnail import thumb
from driver . design . chatname import CHAT_TITLE
from driver . filters import command , other_filters
from driver . queues import QUEUE , add_to_queue
from driver . veez import call_py , user
from driver . utils import bash
2022-01-19 13:39:26 +00:00
from config import ASSISTANT_NAME , BOT_USERNAME , IMG_1 , IMG_2
# youtube-dl stuff
2022-01-18 10:04:11 +00:00
from youtubesearchpython import VideosSearch
def ytsearch ( query : str ) :
try :
search = VideosSearch ( query , limit = 1 ) . result ( )
data = search [ " result " ] [ 0 ]
songname = data [ " title " ]
url = data [ " link " ]
duration = data [ " duration " ]
thumbnail = f " https://i.ytimg.com/vi/ { data [ ' id ' ] } /hqdefault.jpg "
return [ songname , url , duration , thumbnail ]
except Exception as e :
print ( e )
return 0
async def ytdl ( format : str , link : str ) :
2022-01-30 20:07:18 +00:00
stdout , stderr = await bash ( f ' yt-dlp -g -f " { format } " { link } ' )
2022-01-18 10:04:11 +00:00
if stdout :
return 1 , stdout . split ( " \n " ) [ 0 ]
return 0 , stderr
@Client.on_message ( command ( [ " play " , f " play@ { BOT_USERNAME } " ] ) & other_filters )
async def play ( c : Client , m : Message ) :
await m . delete ( )
replied = m . reply_to_message
chat_id = m . chat . id
2022-01-19 13:39:26 +00:00
user_id = m . from_user . id
2022-01-18 10:04:11 +00:00
if m . sender_chat :
return await m . reply_text ( " you ' re an __Anonymous__ Admin ! \n \n » revert back to user account from admin rights. " )
try :
aing = await c . get_me ( )
except Exception as e :
return await m . reply_text ( f " error: \n \n { e } " )
a = await c . get_chat_member ( chat_id , aing . id )
if a . status != " administrator " :
await m . reply_text (
2022-01-18 12:59:57 +00:00
f " 💡 To use me, I need to be an **Administrator** with the following **permissions**: \n \n » ❌ __Delete messages__ \n » ❌ __Invite users__ \n » ❌ __Manage video chat__ \n \n Once done, type /reload "
2022-01-18 10:04:11 +00:00
)
return
if not a . can_manage_voice_chats :
await m . reply_text (
2022-01-18 12:59:57 +00:00
" 💡 To use me, Give me the following permission below: "
+ " \n \n » ❌ __Manage video chat__ \n \n Once done, try again. " )
2022-01-18 10:04:11 +00:00
return
if not a . can_delete_messages :
await m . reply_text (
2022-01-18 12:59:57 +00:00
" 💡 To use me, Give me the following permission below: "
+ " \n \n » ❌ __Delete messages__ \n \n Once done, try again. " )
2022-01-18 10:04:11 +00:00
return
if not a . can_invite_users :
2022-01-18 12:59:57 +00:00
await m . reply_text (
" 💡 To use me, Give me the following permission below: "
+ " \n \n » ❌ __Add users__ \n \n Once done, try again. " )
2022-01-18 10:04:11 +00:00
return
try :
ubot = ( await user . get_me ( ) ) . id
2022-01-18 13:02:17 +00:00
b = await c . get_chat_member ( chat_id , ubot )
2022-01-18 10:04:11 +00:00
if b . status == " kicked " :
2022-01-18 13:02:17 +00:00
await c . unban_chat_member ( chat_id , ubot )
invitelink = await c . export_chat_invite_link ( chat_id )
2022-01-18 10:04:11 +00:00
if invitelink . startswith ( " https://t.me/+ " ) :
invitelink = invitelink . replace (
" https://t.me/+ " , " https://t.me/joinchat/ "
)
2022-01-20 14:21:37 +00:00
await user . join_chat ( invitelink )
2022-01-18 10:04:11 +00:00
except UserNotParticipant :
try :
2022-01-18 13:02:17 +00:00
invitelink = await c . export_chat_invite_link ( chat_id )
2022-01-18 10:04:11 +00:00
if invitelink . startswith ( " https://t.me/+ " ) :
invitelink = invitelink . replace (
" https://t.me/+ " , " https://t.me/joinchat/ "
)
2022-01-20 14:21:37 +00:00
await user . join_chat ( invitelink )
2022-01-18 10:04:11 +00:00
except UserAlreadyParticipant :
pass
except Exception as e :
return await m . reply_text (
f " ❌ **userbot failed to join** \n \n **reason**: ` { e } ` "
)
if replied :
if replied . audio or replied . voice :
suhu = await replied . reply ( " 📥 **downloading audio...** " )
dl = await replied . download ( )
link = replied . link
2022-01-25 14:01:19 +00:00
try :
if replied . audio :
2022-01-18 10:04:11 +00:00
songname = replied . audio . title [ : 70 ]
2022-01-25 14:01:19 +00:00
songname = replied . audio . file_name [ : 70 ]
duration = replied . audio . duration
elif replied . voice :
songname = " Voice Note "
duration = replied . voice . duration
except BaseException :
songname = " Audio "
2022-01-18 10:04:11 +00:00
if chat_id in QUEUE :
pos = add_to_queue ( chat_id , songname , dl , link , " Audio " , 0 )
2022-01-20 14:32:28 +00:00
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
2022-01-19 13:39:26 +00:00
buttons = stream_markup ( user_id )
2022-01-18 10:04:11 +00:00
await suhu . delete ( )
await m . reply_photo (
photo = f " { IMG_1 } " ,
2022-01-19 13:39:26 +00:00
reply_markup = InlineKeyboardMarkup ( buttons ) ,
2022-01-25 14:01:19 +00:00
caption = f " 💡 **Track added to queue »** ` { pos } ` \n \n 🗂 **Name:** [ { songname } ]( { link } ) | `music` \n ⏱️ **Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
2022-01-18 10:04:11 +00:00
)
else :
try :
await suhu . edit ( " 🔄 **Joining vc...** " )
await call_py . join_group_call (
chat_id ,
AudioPiped (
dl ,
2022-01-30 20:07:18 +00:00
HighQualityAudio ( ) ,
2022-01-18 10:04:11 +00:00
) ,
stream_type = StreamType ( ) . local_stream ,
)
add_to_queue ( chat_id , songname , dl , link , " Audio " , 0 )
await suhu . delete ( )
2022-01-19 13:39:26 +00:00
buttons = stream_markup ( user_id )
2022-01-18 10:04:11 +00:00
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
await m . reply_photo (
photo = f " { IMG_2 } " ,
2022-01-19 13:39:26 +00:00
reply_markup = InlineKeyboardMarkup ( buttons ) ,
2022-01-25 14:01:19 +00:00
caption = f " 🗂 **Name:** [ { songname } ]( { link } ) | `music` \n ⏱️ **Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
2022-01-18 10:04:11 +00:00
)
except Exception as e :
await suhu . delete ( )
await m . reply_text ( f " 🚫 error: \n \n » { e } " )
else :
if len ( m . command ) < 2 :
await m . reply (
" » reply to an **audio file** or **give something to search.** "
)
else :
suhu = await c . send_message ( chat_id , " 🔍 **Searching...** " )
query = m . text . split ( None , 1 ) [ 1 ]
search = ytsearch ( query )
if search == 0 :
await suhu . edit ( " ❌ **no results found.** " )
else :
songname = search [ 0 ]
title = search [ 0 ]
url = search [ 1 ]
duration = search [ 2 ]
thumbnail = search [ 3 ]
userid = m . from_user . id
gcname = m . chat . title
ctitle = await CHAT_TITLE ( gcname )
image = await thumb ( thumbnail , title , userid , ctitle )
2022-01-30 20:07:18 +00:00
format = " bestaudio/best "
2022-01-18 10:04:11 +00:00
veez , ytlink = await ytdl ( format , url )
if veez == 0 :
await suhu . edit ( f " ❌ yt-dl issues detected \n \n » ` { ytlink } ` " )
else :
if chat_id in QUEUE :
pos = add_to_queue (
chat_id , songname , ytlink , url , " Audio " , 0
)
await suhu . delete ( )
2022-01-19 13:39:26 +00:00
buttons = stream_markup ( user_id )
2022-01-18 10:04:11 +00:00
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
await m . reply_photo (
photo = image ,
2022-01-19 13:39:26 +00:00
reply_markup = InlineKeyboardMarkup ( buttons ) ,
2022-01-20 14:32:28 +00:00
caption = f " 💡 **Track added to queue »** ` { pos } ` \n \n 🗂 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
2022-01-18 10:04:11 +00:00
)
else :
try :
await suhu . edit ( " 🔄 **Joining vc...** " )
await call_py . join_group_call (
chat_id ,
AudioPiped (
ytlink ,
2022-01-30 20:07:18 +00:00
HighQualityAudio ( ) ,
2022-01-18 10:04:11 +00:00
) ,
stream_type = StreamType ( ) . local_stream ,
)
add_to_queue ( chat_id , songname , ytlink , url , " Audio " , 0 )
await suhu . delete ( )
2022-01-19 13:39:26 +00:00
buttons = stream_markup ( user_id )
2022-01-18 10:04:11 +00:00
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
await m . reply_photo (
photo = image ,
2022-01-19 13:39:26 +00:00
reply_markup = InlineKeyboardMarkup ( buttons ) ,
2022-01-20 14:32:28 +00:00
caption = f " 🗂 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
2022-01-18 10:04:11 +00:00
)
except Exception as ep :
await suhu . delete ( )
await m . reply_text ( f " 🚫 error: ` { ep } ` " )
else :
if len ( m . command ) < 2 :
await m . reply (
" » reply to an **audio file** or **give something to search.** "
)
else :
suhu = await c . send_message ( chat_id , " 🔍 **Searching...** " )
query = m . text . split ( None , 1 ) [ 1 ]
search = ytsearch ( query )
if search == 0 :
await suhu . edit ( " ❌ **no results found.** " )
else :
songname = search [ 0 ]
title = search [ 0 ]
url = search [ 1 ]
duration = search [ 2 ]
thumbnail = search [ 3 ]
userid = m . from_user . id
gcname = m . chat . title
ctitle = await CHAT_TITLE ( gcname )
image = await thumb ( thumbnail , title , userid , ctitle )
2022-01-30 20:07:18 +00:00
format = " bestaudio/best "
2022-01-18 10:04:11 +00:00
veez , ytlink = await ytdl ( format , url )
if veez == 0 :
await suhu . edit ( f " ❌ yt-dl issues detected \n \n » ` { ytlink } ` " )
else :
if chat_id in QUEUE :
pos = add_to_queue ( chat_id , songname , ytlink , url , " Audio " , 0 )
await suhu . delete ( )
2022-01-19 13:39:26 +00:00
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
buttons = stream_markup ( user_id )
2022-01-18 10:04:11 +00:00
await m . reply_photo (
photo = image ,
2022-01-19 13:39:26 +00:00
reply_markup = InlineKeyboardMarkup ( buttons ) ,
2022-01-20 14:32:28 +00:00
caption = f " 💡 **Track added to queue »** ` { pos } ` \n \n 🗂 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
2022-01-18 10:04:11 +00:00
)
else :
try :
await suhu . edit ( " 🔄 **Joining vc...** " )
await call_py . join_group_call (
chat_id ,
AudioPiped (
ytlink ,
2022-01-30 20:07:18 +00:00
HighQualityAudio ( ) ,
2022-01-18 10:04:11 +00:00
) ,
stream_type = StreamType ( ) . local_stream ,
)
add_to_queue ( chat_id , songname , ytlink , url , " Audio " , 0 )
await suhu . delete ( )
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
2022-01-19 13:39:26 +00:00
buttons = stream_markup ( user_id )
2022-01-18 10:04:11 +00:00
await m . reply_photo (
photo = image ,
2022-01-19 13:39:26 +00:00
reply_markup = InlineKeyboardMarkup ( buttons ) ,
2022-01-20 14:32:28 +00:00
caption = f " 🗂 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
2022-01-18 10:04:11 +00:00
)
except Exception as ep :
await suhu . delete ( )
await m . reply_text ( f " 🚫 error: ` { ep } ` " )