2022-01-31 12:42:18 +00:00
# Copyright (C) 2021 By Veez Music-Project
# Commit Start Date 20/10/2021
# Finished On 28/10/2021
# pyrogram stuff
from pyrogram import Client
from pyrogram . errors import UserAlreadyParticipant , UserNotParticipant
from pyrogram . types import InlineKeyboardMarkup , Message
# pytgcalls stuff
2022-02-07 05:05:41 +00:00
from pytgcalls import idle
2022-01-31 12:42:18 +00:00
from pytgcalls import StreamType
from pytgcalls . types . input_stream import AudioPiped
from pytgcalls . types . input_stream . quality import HighQualityAudio
# repository stuff
from program . utils . inline import stream_markup
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
2022-02-07 16:36:42 +00:00
from driver . core import calls , user , bot
2022-01-31 12:42:18 +00:00
from driver . utils import bash
2022-02-06 04:56:09 +00:00
from driver . database . dbpunish import is_gbanned_user
2022-02-07 16:36:42 +00:00
from driver . database . dblockchat import blacklisted_chats
2022-02-03 00:45:24 +00:00
from config import BOT_USERNAME , IMG_5
2022-01-31 12:42:18 +00:00
# youtube-dl stuff
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 " ]
2022-02-08 01:44:47 +00:00
thumbnail = data [ " thumbnails " ] [ 0 ] [ " url " ]
2022-01-31 12:42:18 +00:00
return [ songname , url , duration , thumbnail ]
except Exception as e :
print ( e )
return 0
async def ytdl ( link : str ) :
stdout , stderr = await bash (
2022-01-31 13:39:24 +00:00
f ' yt-dlp -g -f " best[height<=?720][width<=?1280] " { link } '
2022-01-31 12:42:18 +00:00
)
if stdout :
return 1 , stdout
return 0 , stderr
2022-02-08 01:44:47 +00:00
def convert_seconds ( seconds ) :
seconds = seconds % ( 24 * 3600 )
seconds % = 3600
minutes = seconds / / 60
seconds % = 60
return " %02d : %02d " % ( minutes , seconds )
2022-01-31 12:42:18 +00:00
@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
user_id = m . from_user . id
2022-02-06 04:56:09 +00:00
user_xd = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
2022-02-07 17:17:30 +00:00
if chat_id in await blacklisted_chats ( ) :
2022-02-07 16:36:42 +00:00
await m . reply (
" ❗️ This chat has blacklisted by sudo user and You ' re not allowed to use me in this chat. "
)
return await bot . leave_chat ( chat_id )
2022-02-06 04:56:09 +00:00
if await is_gbanned_user ( user_id ) :
2022-02-06 06:54:01 +00:00
await message . reply_text ( f " ❗️ { user_xd } **You ' ve blocked from using this bot!** " )
2022-02-06 04:56:09 +00:00
return
2022-01-31 12:42:18 +00:00
if m . sender_chat :
return await m . reply_text (
2022-02-03 00:45:24 +00:00
" you ' re an __Anonymous__ user ! \n \n » revert back to your real user account to use this bot. "
2022-01-31 12:42:18 +00:00
)
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 (
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 "
)
return
if not a . can_manage_voice_chats :
await m . reply_text (
" 💡 To use me, Give me the following permission below: "
+ " \n \n » ❌ __Manage video chat__ \n \n Once done, try again. "
)
return
if not a . can_delete_messages :
await m . reply_text (
" 💡 To use me, Give me the following permission below: "
+ " \n \n » ❌ __Delete messages__ \n \n Once done, try again. "
)
return
if not a . can_invite_users :
await m . reply_text (
" 💡 To use me, Give me the following permission below: "
+ " \n \n » ❌ __Add users__ \n \n Once done, try again. "
)
return
try :
ubot = ( await user . get_me ( ) ) . id
b = await c . get_chat_member ( chat_id , ubot )
if b . status == " kicked " :
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 )
except UserNotParticipant :
try :
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 )
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
try :
if replied . audio :
songname = replied . audio . title [ : 70 ]
songname = replied . audio . file_name [ : 70 ]
2022-02-08 01:44:47 +00:00
duration = convert_seconds ( replied . audio . duration )
2022-01-31 12:42:18 +00:00
elif replied . voice :
songname = " Voice Note "
2022-02-08 01:44:47 +00:00
duration = convert_seconds ( replied . voice . duration )
2022-01-31 12:42:18 +00:00
except BaseException :
songname = " Audio "
if chat_id in QUEUE :
2022-02-03 00:45:24 +00:00
gcname = m . chat . title
ctitle = await CHAT_TITLE ( gcname )
title = songname
userid = m . from_user . id
thumbnail = f " { IMG_5 } "
image = await thumb ( thumbnail , title , userid , ctitle )
2022-01-31 12:42:18 +00:00
pos = add_to_queue ( chat_id , songname , dl , link , " Audio " , 0 )
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
buttons = stream_markup ( user_id )
await suhu . delete ( )
await m . reply_photo (
2022-02-03 00:45:24 +00:00
photo = image ,
2022-01-31 12:42:18 +00:00
reply_markup = InlineKeyboardMarkup ( buttons ) ,
caption = f " 💡 **Track added to queue »** ` { pos } ` \n \n 🗂 **Name:** [ { songname } ]( { link } ) | `music` \n ⏱️ **Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
)
else :
try :
2022-02-03 00:45:24 +00:00
gcname = m . chat . title
ctitle = await CHAT_TITLE ( gcname )
title = songname
userid = m . from_user . id
thumbnail = f " { IMG_5 } "
image = await thumb ( thumbnail , title , userid , ctitle )
2022-01-31 12:42:18 +00:00
await suhu . edit ( " 🔄 **Joining vc...** " )
2022-02-07 16:17:40 +00:00
await calls . join_group_call (
2022-01-31 12:42:18 +00:00
chat_id ,
AudioPiped (
dl ,
2022-02-01 14:12:19 +00:00
HighQualityAudio ( ) ,
2022-01-31 12:42:18 +00:00
) ,
2022-02-08 00:53:46 +00:00
stream_type = StreamType ( ) . pulse_stream ,
2022-01-31 12:42:18 +00:00
)
add_to_queue ( chat_id , songname , dl , link , " Audio " , 0 )
await suhu . delete ( )
buttons = stream_markup ( user_id )
requester = (
f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
)
await m . reply_photo (
2022-02-03 00:45:24 +00:00
photo = image ,
2022-01-31 12:42:18 +00:00
reply_markup = InlineKeyboardMarkup ( buttons ) ,
2022-02-08 01:27:10 +00:00
caption = f " 🗂 **Name:** [ { songname } ]( { link } ) | `music` \n ⏱️ **Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
2022-01-31 12:42:18 +00:00
)
2022-02-07 05:05:41 +00:00
await idle ( )
2022-01-31 12:42:18 +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 )
veez , ytlink = await ytdl ( 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 ( )
buttons = stream_markup ( user_id )
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
await m . reply_photo (
photo = image ,
reply_markup = InlineKeyboardMarkup ( buttons ) ,
caption = f " 💡 **Track added to queue »** ` { pos } ` \n \n 🗂 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
)
else :
try :
await suhu . edit ( " 🔄 **Joining vc...** " )
2022-02-07 16:17:40 +00:00
await calls . join_group_call (
2022-01-31 12:42:18 +00:00
chat_id ,
AudioPiped (
ytlink ,
HighQualityAudio ( ) ,
) ,
stream_type = StreamType ( ) . local_stream ,
)
add_to_queue ( chat_id , songname , ytlink , url , " Audio " , 0 )
await suhu . delete ( )
buttons = stream_markup ( user_id )
requester = (
f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
)
await m . reply_photo (
photo = image ,
reply_markup = InlineKeyboardMarkup ( buttons ) ,
caption = f " 🗂 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
)
2022-02-07 05:05:41 +00:00
await idle ( )
2022-01-31 12:42:18 +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-31 12:58:43 +00:00
veez , ytlink = await ytdl ( url )
2022-01-31 12:42:18 +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 ( chat_id , songname , ytlink , url , " Audio " , 0 )
await suhu . delete ( )
requester = f " [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) "
buttons = stream_markup ( user_id )
await m . reply_photo (
photo = image ,
reply_markup = InlineKeyboardMarkup ( buttons ) ,
caption = f " 💡 **Track added to queue »** ` { pos } ` \n \n 🗂 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
)
else :
try :
await suhu . edit ( " 🔄 **Joining vc...** " )
2022-02-07 16:17:40 +00:00
await calls . join_group_call (
2022-01-31 12:42:18 +00:00
chat_id ,
AudioPiped (
ytlink ,
HighQualityAudio ( ) ,
) ,
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 } ) "
buttons = stream_markup ( user_id )
await m . reply_photo (
photo = image ,
reply_markup = InlineKeyboardMarkup ( buttons ) ,
caption = f " 🗂 **Name:** [ { songname } ]( { url } ) | `music` \n **⏱ Duration:** ` { duration } ` \n 🧸 **Request by:** { requester } " ,
)
2022-02-07 05:05:41 +00:00
await idle ( )
2022-01-31 12:42:18 +00:00
except Exception as ep :
await suhu . delete ( )
await m . reply_text ( f " 🚫 error: ` { ep } ` " )