Spaces:
Runtime error
Runtime error
import os, asyncio, humanize | |
from pyrogram import Client, filters, __version__ | |
from pyrogram.enums import ParseMode | |
from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery | |
from pyrogram.errors import FloodWait, UserIsBlocked, InputUserDeactivated | |
from bot import Bot | |
from config import ADMINS, FORCE_MSG, START_MSG, CUSTOM_CAPTION, DISABLE_CHANNEL_BUTTON, PROTECT_CONTENT, FILE_AUTO_DELETE | |
from helper_func import subscribed, encode, decode, get_messages | |
from database.database import add_user, del_user, full_userbase, present_user | |
madflixofficials = FILE_AUTO_DELETE | |
jishudeveloper = madflixofficials | |
file_auto_delete = humanize.naturaldelta(jishudeveloper) | |
async def start_command(client: Client, message: Message): | |
id = message.from_user.id | |
if not await present_user(id): | |
try: | |
await add_user(id) | |
except: | |
pass | |
text = message.text | |
if len(text)>7: | |
try: | |
base64_string = text.split(" ", 1)[1] | |
except: | |
return | |
string = await decode(base64_string) | |
argument = string.split("-") | |
if len(argument) == 3: | |
try: | |
start = int(int(argument[1]) / abs(client.db_channel.id)) | |
end = int(int(argument[2]) / abs(client.db_channel.id)) | |
except: | |
return | |
if start <= end: | |
ids = range(start,end+1) | |
else: | |
ids = [] | |
i = start | |
while True: | |
ids.append(i) | |
i -= 1 | |
if i < end: | |
break | |
elif len(argument) == 2: | |
try: | |
ids = [int(int(argument[1]) / abs(client.db_channel.id))] | |
except: | |
return | |
temp_msg = await message.reply("Please Wait...") | |
try: | |
messages = await get_messages(client, ids) | |
except: | |
await message.reply_text("Something Went Wrong..!") | |
return | |
await temp_msg.delete() | |
madflix_msgs = [] # List to keep track of sent messages | |
for msg in messages: | |
if bool(CUSTOM_CAPTION) & bool(msg.document): | |
caption = CUSTOM_CAPTION.format(previouscaption = "" if not msg.caption else msg.caption.html, filename = msg.document.file_name) | |
else: | |
caption = "" if not msg.caption else msg.caption.html | |
if DISABLE_CHANNEL_BUTTON: | |
reply_markup = msg.reply_markup | |
else: | |
reply_markup = None | |
try: | |
madflix_msg = await msg.copy(chat_id=message.from_user.id, caption = caption, parse_mode = ParseMode.HTML, reply_markup = reply_markup, protect_content=PROTECT_CONTENT) | |
# await asyncio.sleep(0.5) | |
madflix_msgs.append(madflix_msg) | |
except FloodWait as e: | |
await asyncio.sleep(e.x) | |
madflix_msg = await msg.copy(chat_id=message.from_user.id, caption = caption, parse_mode = ParseMode.HTML, reply_markup = reply_markup, protect_content=PROTECT_CONTENT) | |
madflix_msgs.append(madflix_msg) | |
except: | |
pass | |
k = await client.send_message(chat_id = message.from_user.id, text=f"<b>βοΈ <u>IMPORTANT</u> βοΈ</b>\n\nThis Video / File Will Be Deleted In {file_auto_delete} (Due To Copyright Issues).\n\nπ Please Forward This Video / File To Somewhere Else And Start Downloading There.") | |
# Schedule the file deletion | |
asyncio.create_task(delete_files(madflix_msgs, client, k)) | |
# for madflix_msg in madflix_msgs: | |
# try: | |
# await madflix_msg.delete() | |
# await k.edit_text("Your Video / File Is Successfully Deleted β ") | |
# except: | |
# pass | |
return | |
else: | |
reply_markup = InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton("π About Me", callback_data = "about"), | |
InlineKeyboardButton("π Close", callback_data = "close") | |
] | |
] | |
) | |
await message.reply_text( | |
text = START_MSG.format( | |
first = message.from_user.first_name, | |
last = message.from_user.last_name, | |
username = None if not message.from_user.username else '@' + message.from_user.username, | |
mention = message.from_user.mention, | |
id = message.from_user.id | |
), | |
reply_markup = reply_markup, | |
disable_web_page_preview = True, | |
quote = True | |
) | |
return | |
async def not_joined(client: Client, message: Message): | |
buttons = [ | |
[ | |
InlineKeyboardButton(text="Join Channel", url=client.invitelink) | |
] | |
] | |
try: | |
buttons.append( | |
[ | |
InlineKeyboardButton( | |
text = 'Try Again', | |
url = f"https://t.me/{client.username}?start={message.command[1]}" | |
) | |
] | |
) | |
except IndexError: | |
pass | |
await message.reply( | |
text = FORCE_MSG.format( | |
first = message.from_user.first_name, | |
last = message.from_user.last_name, | |
username = None if not message.from_user.username else '@' + message.from_user.username, | |
mention = message.from_user.mention, | |
id = message.from_user.id | |
), | |
reply_markup = InlineKeyboardMarkup(buttons), | |
quote = True, | |
disable_web_page_preview = True | |
) | |
async def get_users(client: Bot, message: Message): | |
msg = await client.send_message(chat_id=message.chat.id, text=f"Processing...") | |
users = await full_userbase() | |
await msg.edit(f"{len(users)} Users Are Using This Bot") | |
async def send_text(client: Bot, message: Message): | |
if message.reply_to_message: | |
query = await full_userbase() | |
broadcast_msg = message.reply_to_message | |
total = 0 | |
successful = 0 | |
blocked = 0 | |
deleted = 0 | |
unsuccessful = 0 | |
pls_wait = await message.reply("<i>Broadcasting Message.. This will Take Some Time</i>") | |
for chat_id in query: | |
try: | |
await broadcast_msg.copy(chat_id) | |
successful += 1 | |
except FloodWait as e: | |
await asyncio.sleep(e.x) | |
await broadcast_msg.copy(chat_id) | |
successful += 1 | |
except UserIsBlocked: | |
await del_user(chat_id) | |
blocked += 1 | |
except InputUserDeactivated: | |
await del_user(chat_id) | |
deleted += 1 | |
except: | |
unsuccessful += 1 | |
pass | |
total += 1 | |
status = f"""<b><u>Broadcast Completed</u></b> | |
<b>Total Users :</b> <code>{total}</code> | |
<b>Successful :</b> <code>{successful}</code> | |
<b>Blocked Users :</b> <code>{blocked}</code> | |
<b>Deleted Accounts :</b> <code>{deleted}</code> | |
<b>Unsuccessful :</b> <code>{unsuccessful}</code>""" | |
return await pls_wait.edit(status) | |
else: | |
msg = await message.reply(f"Use This Command As A Reply To Any Telegram Message With Out Any Spaces.") | |
await asyncio.sleep(8) | |
await msg.delete() | |
# Function to handle file deletion | |
async def delete_files(messages, client, k): | |
await asyncio.sleep(FILE_AUTO_DELETE) # Wait for the duration specified in config.py | |
for msg in messages: | |
try: | |
await client.delete_messages(chat_id=msg.chat.id, message_ids=[msg.id]) | |
except Exception as e: | |
print(f"The attempt to delete the media {msg.id} was unsuccessful: {e}") | |
# await client.send_message(messages[0].chat.id, "Your Video / File Is Successfully Deleted β ") | |
await k.edit_text("Your Video / File Is Successfully Deleted β ") | |
# Jishu Developer | |
# Don't Remove Credit π₯Ί | |
# Telegram Channel @Madflix_Bots | |
# Backup Channel @JishuBotz | |
# Developer @JishuDeveloper | |