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)
@Bot.on_message(filters.command('start') & filters.private & subscribed)
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"āļø IMPORTANT āļø\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
@Bot.on_message(filters.command('start') & filters.private)
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
)
@Bot.on_message(filters.command('users') & filters.private & filters.user(ADMINS))
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")
@Bot.on_message(filters.private & filters.command('broadcast') & filters.user(ADMINS))
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("Broadcasting Message.. This will Take Some Time")
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"""Broadcast Completed
Total Users : {total}
Successful : {successful}
Blocked Users : {blocked}
Deleted Accounts : {deleted}
Unsuccessful : {unsuccessful}
"""
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