2021-04-25 18:35:46 +05:30
# (c) @Avishkarpatil | @EverythingSuckz | @AbirHasan2005
2021-04-16 19:37:44 +05:30
2021-04-20 15:14:57 +06:00
import asyncio
2021-04-16 19:37:44 +05:30
from WebStreamer . bot import StreamBot
2021-04-20 15:14:57 +06:00
from WebStreamer . utils . database import Database
from WebStreamer . utils . human_readable import humanbytes
2021-04-16 19:37:44 +05:30
from WebStreamer . vars import Var
2021-04-20 15:14:57 +06:00
from pyrogram import filters , Client
from pyrogram . errors import FloodWait , UserNotParticipant
2021-04-16 19:37:44 +05:30
from pyrogram . types import Message , InlineKeyboardMarkup , InlineKeyboardButton
2021-04-20 15:14:57 +06:00
db = Database ( Var . DATABASE_URL , Var . SESSION_NAME )
2021-04-16 19:37:44 +05:30
2021-04-20 15:14:57 +06:00
@StreamBot.on_message ( filters . private & ( filters . document | filters . video | filters . audio ) & ~ filters . edited , group = 4 )
async def private_receive_handler ( c : Client , m : Message ) :
if not await db . is_user_exist ( m . from_user . id ) :
await db . add_user ( m . from_user . id )
await c . send_message (
Var . BIN_CHANNEL ,
f " #NEW_USER: \n \n New User [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) Started !! "
)
if Var . UPDATES_CHANNEL is not None :
try :
user = await c . get_chat_member ( Var . UPDATES_CHANNEL , m . chat . id )
if user . status == " kicked " :
await c . send_message (
chat_id = m . chat . id ,
2021-04-22 11:54:30 +05:30
text = " Sorry Sir, You are Banned to use me. developer @Avishkarpatil " ,
2021-04-20 15:14:57 +06:00
parse_mode = " markdown " ,
disable_web_page_preview = True
)
return
except UserNotParticipant :
await c . send_message (
chat_id = m . chat . id ,
text = " **Please Join My Updates Channel to use this Bot!** \n \n Due to Overload, Only Channel Subscribers can use the Bot! " ,
reply_markup = InlineKeyboardMarkup (
[
[
InlineKeyboardButton ( " 🤖 Join Updates Channel " , url = f " https://t.me/ { Var . UPDATES_CHANNEL } " )
]
]
) ,
parse_mode = " markdown "
)
return
except Exception :
await c . send_message (
chat_id = m . chat . id ,
2021-04-22 11:54:30 +05:30
text = " Something went Wrong. Contact my boss @Avishkarpatil " ,
2021-04-20 15:14:57 +06:00
parse_mode = " markdown " ,
disable_web_page_preview = True )
return
try :
log_msg = await m . forward ( chat_id = Var . BIN_CHANNEL )
stream_link = " https:// {} / {} " . format ( Var . FQDN , log_msg . message_id ) if Var . ON_HEROKU or Var . NO_PORT else \
" http:// {} : {} / {} " . format ( Var . FQDN ,
Var . PORT ,
log_msg . message_id )
file_size = None
if m . video :
file_size = f " { humanbytes ( m . video . file_size ) } "
elif m . document :
file_size = f " { humanbytes ( m . document . file_size ) } "
elif m . audio :
file_size = f " { humanbytes ( m . audio . file_size ) } "
file_name = None
if m . video :
file_name = f " { m . video . file_name } "
elif m . document :
file_name = f " { m . document . file_name } "
elif m . audio :
file_name = f " { m . audio . file_name } "
msg_text = " Bruh! 😁 \n Your Link Generated! 🤓 \n \n 📂 **File Name:** ` {} ` \n **File Size:** ` {} ` \n \n 📥 **Download Link:** ` {} ` "
await log_msg . reply_text ( text = f " Requested by [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) \n **User ID:** ` { m . from_user . id } ` \n **Download Link:** { stream_link } " , disable_web_page_preview = True , parse_mode = " Markdown " , quote = True )
await m . reply_text (
text = msg_text . format ( file_name , file_size , stream_link ) ,
reply_markup = InlineKeyboardMarkup ( [ [ InlineKeyboardButton ( " Download Now " , url = stream_link ) ] ] ) ,
quote = True
)
except FloodWait as e :
print ( f " Sleeping for { str ( e . x ) } s " )
await asyncio . sleep ( e . x )
await c . send_message ( chat_id = Var . BIN_CHANNEL , text = f " Got FloodWait of { str ( e . x ) } s from [ { m . from_user . first_name } ](tg://user?id= { m . from_user . id } ) \n \n **User ID:** ` { str ( m . from_user . id ) } ` " , disable_web_page_preview = True , parse_mode = " Markdown " )
@StreamBot.on_message ( filters . channel & ( filters . document | filters . video ) & ~ filters . edited , group = - 1 )
async def channel_receive_handler ( bot , broadcast ) :
if int ( broadcast . chat . id ) in Var . BANNED_CHANNELS :
await bot . leave_chat ( broadcast . chat . id )
return
try :
log_msg = await broadcast . forward ( chat_id = Var . BIN_CHANNEL )
await log_msg . reply_text (
2021-04-25 18:32:17 +05:30
text = f " **Channel Name:** ` { broadcast . chat . title } ` \n **Channel ID:** ` { broadcast . chat . id } ` \n **Link:** https://avifilestreambot.herokuapp.com/ { str ( log_msg . message_id ) } " ,
2021-04-20 15:14:57 +06:00
quote = True ,
parse_mode = " Markdown "
)
await bot . edit_message_reply_markup (
chat_id = broadcast . chat . id ,
message_id = broadcast . message_id ,
reply_markup = InlineKeyboardMarkup (
[
2021-04-25 18:32:17 +05:30
[ InlineKeyboardButton ( " Get Direct Download Link " , url = f " https://avifilestreambot.herokuapp.com/ { str ( log_msg . message_id ) } " ) ]
2021-04-20 15:14:57 +06:00
]
)
)
except FloodWait as w :
print ( f " Sleeping for { str ( w . x ) } s " )
await asyncio . sleep ( w . x )
await bot . send_message ( chat_id = Var . BIN_CHANNEL ,
text = f " Got FloodWait of { str ( w . x ) } s from { broadcast . chat . title } \n \n **Channel ID:** ` { str ( broadcast . chat . id ) } ` " ,
disable_web_page_preview = True , parse_mode = " Markdown " )
except Exception as e :
await bot . send_message ( chat_id = Var . BIN_CHANNEL , text = f " #ERROR_TRACEBACK: ` { e } ` " , disable_web_page_preview = True , parse_mode = " Markdown " )
2021-04-22 11:54:30 +05:30
print ( f " Can ' t Edit Broadcast Message! \n Error: { e } " )