Spaces:
Runtime error
Runtime error
# Jishu Developer | |
# Don't Remove Credit ๐ฅบ | |
# Telegram Channel @Madflix_Bots | |
# Backup Channel @JishuBotz | |
# Developer @JishuDeveloper | |
import os | |
import asyncio | |
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 | |
from helper_func import subscribed, encode, decode, get_messages | |
from database.database import add_user, del_user, full_userbase, present_user | |
# add time im seconds for waitingwaiting before delete | |
# 1 minutes = 60, 2 minutes = 60ร2=120, 5 minutes = 60ร5=300 | |
SECONDS = int(os.getenv("SECONDS", "600")) | |
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() | |
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: | |
f = await msg.copy(chat_id=message.from_user.id, caption = caption, parse_mode = ParseMode.HTML, reply_markup = reply_markup, protect_content=PROTECT_CONTENT) | |
except FloodWait as e: | |
await asyncio.sleep(e.x) | |
f = await msg.copy(chat_id=message.from_user.id, caption = caption, parse_mode = ParseMode.HTML, reply_markup = reply_markup, protect_content=PROTECT_CONTENT) | |
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 10 minutes (Due to copyright issues).\n\n๐ Please forward this video / file to somewhere else and start downloading there.") | |
await asyncio.sleep(SECONDS) | |
await f.delete() | |
await k.edit_text("Your video / file is successfully deleted !") | |
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 | |
#=====================================================================================## | |
WAIT_MSG = """"<b>Processing ...</b>""" | |
REPLY_ERROR = """<code>Use this command as a replay to any telegram message with out any spaces.</code>""" | |
#=====================================================================================## | |
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=WAIT_MSG) | |
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> | |
Total Users: <code>{total}</code> | |
Successful: <code>{successful}</code> | |
Blocked Users: <code>{blocked}</code> | |
Deleted Accounts: <code>{deleted}</code> | |
Unsuccessful: <code>{unsuccessful}</code></b>""" | |
return await pls_wait.edit(status) | |
else: | |
msg = await message.reply(REPLY_ERROR) | |
await asyncio.sleep(8) | |
await msg.delete() | |
# Jishu Developer | |
# Don't Remove Credit ๐ฅบ | |
# Telegram Channel @Madflix_Bots | |
# Backup Channel @JishuBotz | |
# Developer @JishuDeveloper | |