2022-02-22 23:18:32 +00:00
"""
Video + Music Stream Telegram Bot
Copyright ( c ) 2022 - present levina = lab < https : / / github . com / levina - lab >
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but without any warranty ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program . If not , see < https : / / www . gnu . org / licenses / licenses . html >
"""
2022-01-31 12:41:47 +00:00
2022-02-15 04:44:58 +00:00
from driver . core import me_bot
2022-01-31 12:41:47 +00:00
from driver . queues import QUEUE
2022-02-22 23:18:32 +00:00
from driver . decorators import check_blacklist
2022-02-10 02:26:16 +00:00
from program . utils . inline import menu_markup , stream_markup
2022-02-22 23:18:32 +00:00
from pyrogram import Client , filters
2022-01-31 12:41:47 +00:00
from pyrogram . types import CallbackQuery , InlineKeyboardButton , InlineKeyboardMarkup
2022-02-10 03:12:00 +00:00
2022-01-31 12:41:47 +00:00
from config import (
BOT_USERNAME ,
GROUP_SUPPORT ,
2022-02-11 06:02:56 +00:00
OWNER_USERNAME ,
2022-01-31 12:41:47 +00:00
UPDATES_CHANNEL ,
2022-02-08 22:50:24 +00:00
SUDO_USERS ,
OWNER_ID ,
2022-01-31 12:41:47 +00:00
)
2022-02-07 15:03:17 +00:00
@Client.on_callback_query ( filters . regex ( " home_start " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def start_set ( _ , query : CallbackQuery ) :
2022-02-15 04:44:58 +00:00
BOT_NAME = me_bot . first_name
2022-01-31 12:41:47 +00:00
await query . answer ( " home start " )
await query . edit_message_text (
f """ ✨ **Welcome [ { query . message . chat . first_name } ](tg://user?id= { query . message . chat . id } ) !** \n
2022-02-11 11:42:37 +00:00
💭 [ { BOT_NAME } ] ( https : / / t . me / { BOT_USERNAME } ) * * Is a bot to play music and video in groups , through the Telegram Group video chat ! * *
2022-01-31 12:41:47 +00:00
💡 * * Find out all the Bot ' s commands and how they work by clicking on the » 📚 Commands button!**
🔖 * * To know how to use this bot , please click on the » ❓ Basic Guide button ! * * """ ,
reply_markup = InlineKeyboardMarkup (
[
[
InlineKeyboardButton (
" ➕ Add me to your Group ➕ " ,
url = f " https://t.me/ { BOT_USERNAME } ?startgroup=true " ,
)
] ,
2022-02-07 23:53:59 +00:00
[ InlineKeyboardButton ( " ❓ Basic Guide " , callback_data = " user_guide " ) ] ,
2022-01-31 12:41:47 +00:00
[
2022-02-07 23:53:59 +00:00
InlineKeyboardButton ( " 📚 Commands " , callback_data = " command_list " ) ,
2022-02-11 06:02:56 +00:00
InlineKeyboardButton ( " ❤ Donate " , url = f " https://t.me/ { OWNER_USERNAME } " ) ,
2022-01-31 12:41:47 +00:00
] ,
[
InlineKeyboardButton (
" 👥 Official Group " , url = f " https://t.me/ { GROUP_SUPPORT } "
) ,
InlineKeyboardButton (
" 📣 Official Channel " , url = f " https://t.me/ { UPDATES_CHANNEL } "
) ,
] ,
[
InlineKeyboardButton (
" 🌐 Source Code " , url = " https://github.com/levina-lab/video-stream "
)
] ,
]
) ,
disable_web_page_preview = True ,
)
2022-02-11 19:47:23 +00:00
@Client.on_callback_query ( filters . regex ( " quick_use " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def quick_set ( _ , query : CallbackQuery ) :
2022-02-11 19:47:23 +00:00
await query . answer ( " quick bot usage " )
await query . edit_message_text (
2022-02-11 20:17:26 +00:00
f """ ℹ ️ Quick use Guide bot, please read fully !
2022-02-11 19:47:23 +00:00
👩 🏻 💼 » / play - Type this with give the song title or youtube link or audio file to play Music . ( Remember to don ' t play YouTube live stream by using this command!, because it will cause unforeseen problems.)
👩 🏻 💼 » / vplay - Type this with give the song title or youtube link or video file to play Video . ( Remember to don ' t play YouTube live video by using this command!, because it will cause unforeseen problems.)
👩 🏻 💼 » / vstream - Type this with give the YouTube live stream video link or m3u8 link to play live Video . ( Remember to don ' t play local audio/video files or non-live YouTube video by using this command!, because it will cause unforeseen problems.)
❓ Have questions ? Contact us in [ Support Group ] ( https : / / t . me / { GROUP_SUPPORT } ) . """ ,
reply_markup = InlineKeyboardMarkup (
2022-02-15 03:16:47 +00:00
[ [ InlineKeyboardButton ( " 🔙 Go Back " , callback_data = " user_guide " ) ] ]
2022-02-11 19:47:23 +00:00
) ,
2022-02-11 19:57:05 +00:00
disable_web_page_preview = True ,
2022-02-11 19:47:23 +00:00
)
2022-02-07 15:03:17 +00:00
@Client.on_callback_query ( filters . regex ( " user_guide " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def guide_set ( _ , query : CallbackQuery ) :
2022-02-15 04:44:58 +00:00
ass_uname = me_bot . first_name
2022-01-31 12:41:47 +00:00
await query . answer ( " user guide " )
await query . edit_message_text (
f """ ❓ How to use this Bot ?, read the Guide below !
1. ) First , add this bot to your Group .
2. ) Then , promote this bot as administrator on the Group also give all permissions except Anonymous admin .
3. ) After promoting this bot , type / reload in Group to update the admin data .
2022-02-11 15:09:03 +00:00
3. ) Invite @ { ass_uname } to your group or type / userbotjoin to invite her , unfortunately the userbot will joined by itself when you type ` / play ( song name ) ` or ` / vplay ( song name ) ` .
2022-01-31 12:41:47 +00:00
4. ) Turn on / Start the video chat first before start to play video / music .
` - END , EVERYTHING HAS BEEN SETUP - `
📌 If the userbot not joined to video chat , make sure if the video chat already turned on and the userbot in the chat .
💡 If you have a follow - up questions about this bot , you can tell it on my support chat here : @ { GROUP_SUPPORT } . """ ,
reply_markup = InlineKeyboardMarkup (
2022-02-15 03:16:47 +00:00
[
[
InlineKeyboardButton ( " » Quick use Guide « " , callback_data = " quick_use " )
] , [
InlineKeyboardButton ( " 🔙 Go Back " , callback_data = " home_start " )
] ,
]
2022-01-31 12:41:47 +00:00
) ,
)
2022-02-07 15:03:17 +00:00
@Client.on_callback_query ( filters . regex ( " command_list " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def commands_set ( _ , query : CallbackQuery ) :
2022-02-06 06:49:45 +00:00
user_id = query . from_user . id
2022-01-31 12:41:47 +00:00
await query . answer ( " commands menu " )
await query . edit_message_text (
f """ ✨ **Hello [ { query . message . chat . first_name } ](tg://user?id= { query . message . chat . id } ) !**
2022-02-07 15:03:17 +00:00
» Check out the menu below to read the module information & see the list of available Commands !
2022-01-31 12:41:47 +00:00
2022-02-11 11:19:22 +00:00
All commands can be used with ( ` ! / . ` ) handler """ ,
2022-01-31 12:41:47 +00:00
reply_markup = InlineKeyboardMarkup (
[
[
2022-02-11 11:19:22 +00:00
InlineKeyboardButton ( " 👮🏻♀️ Admins Commands " , callback_data = " admin_command " ) ,
2022-02-10 14:08:10 +00:00
] , [
2022-02-11 11:19:22 +00:00
InlineKeyboardButton ( " 👩🏻💼 Users Commands " , callback_data = " user_command " ) ,
2022-01-31 12:41:47 +00:00
] , [
2022-02-08 22:50:24 +00:00
InlineKeyboardButton ( " Sudo Commands " , callback_data = " sudo_command " ) ,
InlineKeyboardButton ( " Owner Commands " , callback_data = " owner_command " ) ,
2022-01-31 12:41:47 +00:00
] , [
2022-02-07 15:03:17 +00:00
InlineKeyboardButton ( " 🔙 Go Back " , callback_data = " home_start " )
2022-01-31 12:41:47 +00:00
] ,
]
) ,
)
2022-02-07 15:03:17 +00:00
@Client.on_callback_query ( filters . regex ( " user_command " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def user_set ( _ , query : CallbackQuery ) :
2022-02-15 04:44:58 +00:00
BOT_NAME = me_bot . first_name
2022-01-31 12:41:47 +00:00
await query . answer ( " basic commands " )
await query . edit_message_text (
2022-02-07 15:03:17 +00:00
f """ ✏️ Command list for all user.
2022-01-31 12:41:47 +00:00
» / play ( song name / link ) - play music on video chat
» / vplay ( video name / link ) - play video on video chat
2022-02-11 11:19:22 +00:00
» / vstream ( m3u8 / yt live link ) - play live stream video
» / playlist - see the current playing song
2022-02-07 15:03:17 +00:00
» / lyric ( query ) - scrap the song lyric
2022-01-31 12:41:47 +00:00
» / video ( query ) - download video from youtube
» / song ( query ) - download song from youtube
» / search ( query ) - search a youtube video link
» / ping - show the bot ping status
» / uptime - show the bot uptime status
» / alive - show the bot alive info ( in Group only )
⚡ ️ __Powered by { BOT_NAME } AI__ """ ,
reply_markup = InlineKeyboardMarkup (
2022-02-07 15:03:17 +00:00
[ [ InlineKeyboardButton ( " 🔙 Go Back " , callback_data = " command_list " ) ] ]
2022-01-31 12:41:47 +00:00
) ,
)
2022-02-07 15:03:17 +00:00
@Client.on_callback_query ( filters . regex ( " admin_command " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def admin_set ( _ , query : CallbackQuery ) :
2022-02-15 04:44:58 +00:00
BOT_NAME = me_bot . first_name
2022-01-31 12:41:47 +00:00
await query . answer ( " admin commands " )
await query . edit_message_text (
2022-02-07 15:03:17 +00:00
f """ ✏️ Command list for group admin.
2022-01-31 12:41:47 +00:00
2022-02-11 11:19:22 +00:00
» / pause - pause the current track being played
» / resume - play the previously paused track
» / skip - goes to the next track
» / stop - stop playback of the track and clears the queue
» / vmute - mute the streamer userbot on group call
» / vunmute - unmute the streamer userbot on group call
2022-01-31 12:41:47 +00:00
» / volume ` 1 - 200 ` - adjust the volume of music ( userbot must be admin )
» / reload - reload bot and refresh the admin data
» / userbotjoin - invite the userbot to join group
» / userbotleave - order userbot to leave from group
2022-02-21 05:20:37 +00:00
» / startvc - start / restart the group call
2022-02-21 15:10:08 +00:00
» / stopvc - stop / discard the group call
2022-01-31 12:41:47 +00:00
⚡ ️ __Powered by { BOT_NAME } AI__ """ ,
reply_markup = InlineKeyboardMarkup (
2022-02-07 15:03:17 +00:00
[ [ InlineKeyboardButton ( " 🔙 Go Back " , callback_data = " command_list " ) ] ]
2022-01-31 12:41:47 +00:00
) ,
)
2022-02-10 14:08:10 +00:00
2022-02-07 15:03:17 +00:00
@Client.on_callback_query ( filters . regex ( " sudo_command " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def sudo_set ( _ , query : CallbackQuery ) :
2022-02-06 06:49:45 +00:00
user_id = query . from_user . id
2022-02-15 04:44:58 +00:00
BOT_NAME = me_bot . first_name
2022-02-08 22:50:24 +00:00
if user_id not in SUDO_USERS :
2022-02-10 02:26:16 +00:00
await query . answer ( " ⚠️ You don ' t have permissions to click this button \n \n » This button is reserved for sudo members of this bot. " , show_alert = True )
2022-02-08 22:50:24 +00:00
return
2022-01-31 12:41:47 +00:00
await query . answer ( " sudo commands " )
await query . edit_message_text (
2022-02-07 15:03:17 +00:00
f """ ✏️ Command list for sudo user.
2022-01-31 12:41:47 +00:00
2022-02-05 05:41:23 +00:00
» / stats - get the bot current statistic
2022-02-11 11:19:22 +00:00
» / calls - show you the list of all active group call in database
2022-02-07 15:03:17 +00:00
» / block ( ` chat_id ` ) - use this to blacklist any group from using your bot
» / unblock ( ` chat_id ` ) - use this to whitelist any group from using your bot
» / blocklist - show you the list of all blacklisted chat
2022-01-31 12:41:47 +00:00
» / speedtest - run the bot server speedtest
» / sysinfo - show the system information
2022-02-08 22:50:24 +00:00
» / eval - execute any code ( ` developer stuff ` )
» / sh - run any command ( ` developer stuff ` )
⚡ __Powered by { BOT_NAME } AI__ """ ,
reply_markup = InlineKeyboardMarkup (
[ [ InlineKeyboardButton ( " 🔙 Go Back " , callback_data = " command_list " ) ] ]
) ,
)
@Client.on_callback_query ( filters . regex ( " owner_command " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def owner_set ( _ , query : CallbackQuery ) :
2022-02-08 22:50:24 +00:00
user_id = query . from_user . id
2022-02-15 04:44:58 +00:00
BOT_NAME = me_bot . first_name
2022-02-08 22:50:24 +00:00
if user_id not in OWNER_ID :
2022-02-10 02:26:16 +00:00
await query . answer ( " ⚠️ You don ' t have permissions to click this button \n \n » This button is reserved for owner of this bot. " , show_alert = True )
2022-02-08 22:50:24 +00:00
return
await query . answer ( " owner commands " )
await query . edit_message_text (
f """ ✏️ Command list for bot owner.
» / gban ( ` username ` or ` user_id ` ) - for global banned people , can be used only in group
» / ungban ( ` username ` or ` user_id ` ) - for un - global banned people , can be used only in group
2022-01-31 12:41:47 +00:00
» / update - update your bot to latest version
2022-02-07 15:03:17 +00:00
» / restart - restart your bot directly
2022-01-31 12:41:47 +00:00
» / leaveall - order userbot to leave from all group
2022-01-31 13:57:14 +00:00
» / leavebot ( ` chat id ` ) - order bot to leave from the group you specify
2022-02-11 11:19:22 +00:00
» / broadcast ( ` message ` ) - send a broadcast message to all groups in bot database
» / broadcast_pin ( ` message ` ) - send a broadcast message to all groups in bot database with the chat pin
2022-01-31 12:41:47 +00:00
⚡ __Powered by { BOT_NAME } AI__ """ ,
reply_markup = InlineKeyboardMarkup (
2022-02-07 15:03:17 +00:00
[ [ InlineKeyboardButton ( " 🔙 Go Back " , callback_data = " command_list " ) ] ]
2022-01-31 12:41:47 +00:00
) ,
)
2022-02-07 15:03:17 +00:00
@Client.on_callback_query ( filters . regex ( " stream_menu_panel " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def at_set_markup_menu ( _ , query : CallbackQuery ) :
2022-02-06 06:49:45 +00:00
user_id = query . from_user . id
2022-01-31 12:41:47 +00:00
a = await _ . get_chat_member ( query . message . chat . id , query . from_user . id )
if not a . can_manage_voice_chats :
return await query . answer ( " 💡 Only admin with manage video chat permission that can tap this button ! " , show_alert = True )
chat_id = query . message . chat . id
user_id = query . message . from_user . id
buttons = menu_markup ( user_id )
if chat_id in QUEUE :
2022-02-10 13:54:02 +00:00
await query . answer ( " control panel opened " )
2022-02-10 02:26:16 +00:00
await query . edit_message_reply_markup ( reply_markup = InlineKeyboardMarkup ( buttons ) )
2022-01-31 12:41:47 +00:00
else :
await query . answer ( " ❌ nothing is currently streaming " , show_alert = True )
2022-02-10 02:26:16 +00:00
@Client.on_callback_query ( filters . regex ( " stream_home_panel " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def is_set_home_menu ( _ , query : CallbackQuery ) :
2022-02-10 02:26:16 +00:00
a = await _ . get_chat_member ( query . message . chat . id , query . from_user . id )
if not a . can_manage_voice_chats :
return await query . answer ( " 💡 Only admin with manage video chat permission that can tap this button ! " , show_alert = True )
await query . answer ( " control panel closed " )
user_id = query . message . from_user . id
buttons = stream_markup ( user_id )
await query . edit_message_reply_markup ( reply_markup = InlineKeyboardMarkup ( buttons ) )
2022-02-08 00:00:29 +00:00
@Client.on_callback_query ( filters . regex ( " set_close " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def on_close_menu ( _ , query : CallbackQuery ) :
2022-01-31 12:41:47 +00:00
a = await _ . get_chat_member ( query . message . chat . id , query . from_user . id )
if not a . can_manage_voice_chats :
return await query . answer ( " 💡 Only admin with manage video chat permission that can tap this button ! " , show_alert = True )
await query . message . delete ( )
2022-02-07 15:37:44 +00:00
@Client.on_callback_query ( filters . regex ( " close_panel " ) )
2022-02-14 05:38:16 +00:00
@check_blacklist ( )
2022-02-11 20:14:33 +00:00
async def in_close_panel ( _ , query : CallbackQuery ) :
2022-02-07 15:37:44 +00:00
await query . message . delete ( )