2021-10-28 15:49:34 +00:00
# Copyright (C) 2021 By Veez Music-Project
# Commit Start Date 20/10/2021
# Finished On 28/10/2021
2021-11-02 23:54:47 +00:00
import re
2021-11-21 06:18:39 +00:00
import asyncio
2021-10-29 20:24:14 +00:00
2021-11-15 09:36:35 +00:00
from config import ASSISTANT_NAME , BOT_USERNAME , IMG_1 , IMG_2
2022-01-08 15:25:30 +00:00
from driver . design . thumbnail import thumb
2022-01-08 15:30:19 +00:00
from driver . design . chatname import CHAT_TITLE
2021-11-02 08:07:40 +00:00
from driver . filters import command , other_filters
2021-11-02 23:54:47 +00:00
from driver . queues import QUEUE , add_to_queue
from driver . veez import call_py , user
2021-12-11 08:43:37 +00:00
from driver . utils import bash
2021-11-02 23:54:47 +00:00
from pyrogram import Client
2021-11-02 08:07:40 +00:00
from pyrogram . errors import UserAlreadyParticipant , UserNotParticipant
2021-10-29 20:24:14 +00:00
from pyrogram . types import InlineKeyboardButton , InlineKeyboardMarkup , Message
from pytgcalls import StreamType
2021-10-26 07:00:00 +00:00
from pytgcalls . types . input_stream import AudioPiped
2021-10-29 20:24:14 +00:00
from youtubesearchpython import VideosSearch
2021-10-26 07:00:00 +00:00
2021-12-11 07:49:57 +00:00
def ytsearch ( query : str ) :
2021-10-29 20:24:14 +00:00
try :
2021-12-11 07:49:57 +00:00
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 ]
2021-10-29 20:24:14 +00:00
except Exception as e :
print ( e )
return 0
2021-10-26 07:00:00 +00:00
2021-12-11 07:49:57 +00:00
async def ytdl ( format : str , link : str ) :
2021-12-16 18:39:31 +00:00
stdout , stderr = await bash ( f ' youtube-dl -g -f " { format } " { link } ' )
2021-10-29 20:24:14 +00:00
if stdout :
2021-12-11 07:49:57 +00:00
return 1 , stdout . split ( " \n " ) [ 0 ]
return 0 , stderr
2021-10-26 07:00:00 +00:00
2022-01-08 15:41:15 +00:00
@Client.on_message ( command ( [ " play " , f " play@ { BOT_USERNAME } " ] ) & other_filters )
2021-11-02 23:54:47 +00:00
async def play ( c : Client , m : Message ) :
2021-12-11 07:49:57 +00:00
await m . delete ( )
2021-11-02 23:54:47 +00:00
replied = m . reply_to_message
chat_id = m . chat . id
2021-10-29 20:24:14 +00:00
keyboard = InlineKeyboardMarkup (
[
2021-10-27 14:08:39 +00:00
[
2021-11-02 23:54:47 +00:00
InlineKeyboardButton ( text = " • Mᴇɴᴜ " , callback_data = " cbmenu " ) ,
InlineKeyboardButton ( text = " • Cʟᴏ sᴇ " , callback_data = " cls " ) ,
2021-10-27 14:08:39 +00:00
]
2021-10-29 20:24:14 +00:00
]
)
2021-11-05 08:35:16 +00:00
if m . sender_chat :
2021-12-11 07:49:57 +00:00
return await m . reply_text ( " you ' re an __Anonymous__ Admin ! \n \n » revert back to user account from admin rights. " )
2021-11-02 15:05:22 +00:00
try :
2021-11-02 23:54:47 +00:00
aing = await c . get_me ( )
2021-11-02 17:02:52 +00:00
except Exception as e :
return await m . reply_text ( f " error: \n \n { e } " )
2021-11-02 23:54:47 +00:00
a = await c . get_chat_member ( chat_id , aing . id )
2021-11-02 17:02:52 +00:00
if a . status != " administrator " :
2021-11-02 23:54:47 +00:00
await m . reply_text (
2022-01-15 13:56:57 +00:00
f " 💡 To use me, I need to be an **Administrator** with the following **permissions**: \n \n » ❌ __Delete messages__ \n » ❌ __Add users__ \n » ❌ __Add new Admins__ \n » ❌ __Manage video chat__ \n \n Data is **updated** automatically after you **promote me** "
2021-11-02 23:54:47 +00:00
)
2021-11-02 17:02:52 +00:00
return
if not a . can_manage_voice_chats :
await m . reply_text (
2021-11-03 13:15:17 +00:00
" missing required permission: " + " \n \n » ❌ __Manage video chat__ "
2021-11-02 23:54:47 +00:00
)
2021-11-02 17:02:52 +00:00
return
if not a . can_delete_messages :
await m . reply_text (
2021-11-02 23:54:47 +00:00
" missing required permission: " + " \n \n » ❌ __Delete messages__ "
)
2021-11-02 17:02:52 +00:00
return
if not a . can_invite_users :
2021-11-02 23:54:47 +00:00
await m . reply_text ( " missing required permission: " + " \n \n » ❌ __Add users__ " )
2021-11-02 17:02:52 +00:00
return
2022-01-15 13:56:57 +00:00
if not a . can_promote_members :
await m . reply_text ( " missing required permission: " + " \n \n » ❌ __Add new Admins__ " )
return
2021-11-02 17:02:52 +00:00
try :
2021-11-25 14:59:59 +00:00
ubot = ( await user . get_me ( ) ) . id
2022-01-15 13:56:57 +00:00
b = await c . get_chat_member ( chat_id , ubot )
2021-11-02 17:02:52 +00:00
if b . status == " kicked " :
2022-01-15 13:56:57 +00:00
await c . unban_chat_member ( chat_id , ubot )
invitelink = await c . export_chat_invite_link ( chat_id )
if invitelink . startswith ( " https://t.me/+ " ) :
invitelink = invitelink . replace (
" https://t.me/+ " , " https://t.me/joinchat/ "
)
await user . join_chat ( invitelink )
await m . chat . promote_member (
ubot , can_manage_voice_chats = True
2021-11-02 23:54:47 +00:00
)
2021-11-02 17:02:52 +00:00
except UserNotParticipant :
2022-01-15 13:56:57 +00:00
try :
ubot = ( await user . get_me ( ) ) . id
invitelink = await c . export_chat_invite_link ( chat_id )
if invitelink . startswith ( " https://t.me/+ " ) :
2021-12-11 06:42:37 +00:00
invitelink = invitelink . replace (
" https://t.me/+ " , " https://t.me/joinchat/ "
)
2022-01-15 13:56:57 +00:00
await user . join_chat ( invitelink )
await m . chat . promote_member (
ubot , can_manage_voice_chats = True
)
except UserAlreadyParticipant :
pass
except Exception as e :
return await m . reply_text (
f " ❌ **userbot failed to join** \n \n **reason**: ` { e } ` "
)
2021-10-29 20:24:14 +00:00
if replied :
if replied . audio or replied . voice :
suhu = await replied . reply ( " 📥 **downloading audio...** " )
dl = await replied . download ( )
link = replied . link
if replied . audio :
if replied . audio . title :
2021-10-30 22:49:09 +00:00
songname = replied . audio . title [ : 70 ]
2021-10-29 20:24:14 +00:00
else :
2021-11-01 03:21:16 +00:00
if replied . audio . file_name :
songname = replied . audio . file_name [ : 70 ]
else :
songname = " Audio "
2021-10-29 20:24:14 +00:00
elif replied . voice :
songname = " Voice Note "
if chat_id in QUEUE :
pos = add_to_queue ( chat_id , songname , dl , link , " Audio " , 0 )
await suhu . delete ( )
await m . reply_photo (
photo = f " { IMG_1 } " ,
2021-12-18 21:52:24 +00:00
caption = f " 💡 **Track added to queue »** ` { pos } ` \n \n 🏷 **Name:** [ { songname } ]( { link } ) | `music` \n 💭 **Chat:** ` { chat_id } ` \n 🎧 **Request by:** { m . from_user . mention ( ) } " ,
2021-10-29 20:24:14 +00:00
reply_markup = keyboard ,
)
2021-10-26 07:00:00 +00:00
else :
2021-11-15 23:36:27 +00:00
try :
2021-11-22 09:43:21 +00:00
await suhu . edit ( " 🔄 **Joining vc...** " )
2021-10-29 20:24:14 +00:00
await call_py . join_group_call (
chat_id ,
AudioPiped (
dl ,
) ,
2021-11-11 06:54:03 +00:00
stream_type = StreamType ( ) . local_stream ,
2021-10-29 20:24:14 +00:00
)
add_to_queue ( chat_id , songname , dl , link , " Audio " , 0 )
2021-10-29 21:01:56 +00:00
await suhu . delete ( )
2021-11-02 17:16:55 +00:00
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
2021-10-29 20:24:14 +00:00
await m . reply_photo (
photo = f " { IMG_2 } " ,
2021-12-18 21:52:24 +00:00
caption = f " 🏷 **Name:** [ { songname } ]( { link } ) \n 💭 **Chat:** ` { chat_id } ` \n 💡 **Status:** `Playing` \n 🎧 **Request by:** { requester } \n 📹 **Stream type:** `Music` " ,
2021-10-29 20:24:14 +00:00
reply_markup = keyboard ,
)
2021-11-15 23:36:27 +00:00
except Exception as e :
await suhu . delete ( )
await m . reply_text ( f " 🚫 error: \n \n » { e } " )
2021-10-29 20:24:14 +00:00
else :
if len ( m . command ) < 2 :
await m . reply (
" » reply to an **audio file** or **give something to search.** "
)
2021-10-26 07:00:00 +00:00
else :
2021-12-11 09:30:51 +00:00
suhu = await c . send_message ( chat_id , " 🔍 **Searching...** " )
2021-10-29 20:24:14 +00:00
query = m . text . split ( None , 1 ) [ 1 ]
search = ytsearch ( query )
if search == 0 :
await suhu . edit ( " ❌ **no results found.** " )
else :
songname = search [ 0 ]
2022-01-08 15:25:30 +00:00
title = search [ 0 ]
2021-10-29 20:24:14 +00:00
url = search [ 1 ]
2021-12-11 07:49:57 +00:00
duration = search [ 2 ]
thumbnail = search [ 3 ]
2022-01-08 15:25:30 +00:00
userid = m . from_user . id
gcname = m . chat . title
ctitle = await CHAT_TITLE ( gcname )
image = await thumb ( thumbnail , title , userid , ctitle )
2021-12-16 16:21:03 +00:00
format = " bestaudio[ext=m4a] "
2021-12-11 07:49:57 +00:00
veez , ytlink = await ytdl ( format , url )
2021-10-29 20:24:14 +00:00
if veez == 0 :
await suhu . edit ( f " ❌ yt-dl issues detected \n \n » ` { ytlink } ` " )
else :
if chat_id in QUEUE :
pos = add_to_queue (
2022-01-18 06:58:48 +00:00
chat_id , songname , ytlink , url , image , duration , " Audio " , 0
2021-10-29 20:24:14 +00:00
)
await suhu . delete ( )
2021-11-02 17:16:55 +00:00
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
2021-10-29 20:24:14 +00:00
await m . reply_photo (
2022-01-08 15:25:30 +00:00
photo = image ,
2021-12-18 21:52:24 +00:00
caption = f " 💡 **Track added to queue »** ` { pos } ` \n \n 🏷 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🎧 **Request by:** { requester } " ,
2021-10-29 20:24:14 +00:00
reply_markup = keyboard ,
)
else :
try :
2021-11-22 09:43:21 +00:00
await suhu . edit ( " 🔄 **Joining vc...** " )
2021-10-29 20:24:14 +00:00
await call_py . join_group_call (
chat_id ,
AudioPiped (
ytlink ,
) ,
2021-11-26 01:39:52 +00:00
stream_type = StreamType ( ) . local_stream ,
2021-10-29 20:24:14 +00:00
)
2022-01-18 09:28:47 +00:00
add_to_queue ( chat_id , songname , ytlink , url , " Audio " , 0 )
2021-10-29 20:24:14 +00:00
await suhu . delete ( )
2021-11-02 17:16:55 +00:00
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
2021-10-29 20:24:14 +00:00
await m . reply_photo (
2022-01-08 15:25:30 +00:00
photo = image ,
2021-12-18 21:52:24 +00:00
caption = f " 🏷 **Name:** [ { songname } ]( { url } ) \n **⏱ Duration:** ` { duration } ` \n 💡 **Status:** `Playing` \n 🎧 **Request by:** { requester } \n 📹 **Stream type:** `Music` " ,
2021-10-29 20:24:14 +00:00
reply_markup = keyboard ,
)
except Exception as ep :
2021-11-07 06:03:43 +00:00
await suhu . delete ( )
2021-10-29 20:24:14 +00:00
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 :
2021-12-11 09:30:51 +00:00
suhu = await c . send_message ( chat_id , " 🔍 **Searching...** " )
2021-10-26 07:00:00 +00:00
query = m . text . split ( None , 1 ) [ 1 ]
search = ytsearch ( query )
2021-10-29 20:24:14 +00:00
if search == 0 :
await suhu . edit ( " ❌ **no results found.** " )
2021-10-26 07:00:00 +00:00
else :
2021-10-29 20:24:14 +00:00
songname = search [ 0 ]
2022-01-08 15:25:30 +00:00
title = search [ 0 ]
2021-10-29 20:24:14 +00:00
url = search [ 1 ]
2021-12-11 07:49:57 +00:00
duration = search [ 2 ]
thumbnail = search [ 3 ]
2022-01-08 15:25:30 +00:00
userid = m . from_user . id
gcname = m . chat . title
ctitle = await CHAT_TITLE ( gcname )
image = await thumb ( thumbnail , title , userid , ctitle )
2021-12-16 16:21:03 +00:00
format = " bestaudio[ext=m4a] "
2021-12-11 07:49:57 +00:00
veez , ytlink = await ytdl ( format , url )
2021-10-29 20:24:14 +00:00
if veez == 0 :
2021-10-30 11:12:58 +00:00
await suhu . edit ( f " ❌ yt-dl issues detected \n \n » ` { ytlink } ` " )
2021-10-29 20:24:14 +00:00
else :
if chat_id in QUEUE :
2022-01-18 06:58:48 +00:00
pos = add_to_queue ( chat_id , songname , ytlink , url , image , duration , " Audio " , 0 )
2021-10-27 14:08:39 +00:00
await suhu . delete ( )
2021-11-02 23:54:47 +00:00
requester = (
f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
)
2021-10-27 14:08:39 +00:00
await m . reply_photo (
2022-01-08 15:25:30 +00:00
photo = image ,
2021-12-18 21:52:24 +00:00
caption = f " 💡 **Track added to queue »** ` { pos } ` \n \n 🏷 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🎧 **Request by:** { requester } " ,
2021-10-29 20:24:14 +00:00
reply_markup = keyboard ,
2021-10-27 14:08:39 +00:00
)
2021-10-29 20:24:14 +00:00
else :
try :
2021-11-22 09:43:21 +00:00
await suhu . edit ( " 🔄 **Joining vc...** " )
2021-10-29 20:24:14 +00:00
await call_py . join_group_call (
chat_id ,
AudioPiped (
ytlink ,
) ,
2021-11-26 01:39:52 +00:00
stream_type = StreamType ( ) . local_stream ,
2021-10-29 20:24:14 +00:00
)
2022-01-18 09:28:47 +00:00
add_to_queue ( chat_id , songname , ytlink , url , " Audio " , 0 )
2021-10-29 20:24:14 +00:00
await suhu . delete ( )
2021-11-02 17:16:55 +00:00
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
2021-10-29 20:24:14 +00:00
await m . reply_photo (
2022-01-08 15:25:30 +00:00
photo = image ,
2021-12-18 21:52:24 +00:00
caption = f " 🏷 **Name:** [ { songname } ]( { url } ) \n **⏱ Duration:** ` { duration } ` \n 💡 **Status:** `Playing` \n 🎧 **Request by:** { requester } \n 📹 **Stream type:** `Music` " ,
2021-10-29 20:24:14 +00:00
reply_markup = keyboard ,
)
except Exception as ep :
2021-11-07 06:03:43 +00:00
await suhu . delete ( )
2021-10-29 20:24:14 +00:00
await m . reply_text ( f " 🚫 error: ` { ep } ` " )