diff --git "a/plugins/pmfilter.py" "b/plugins/pmfilter.py"
new file mode 100644--- /dev/null
+++ "b/plugins/pmfilter.py"
@@ -0,0 +1,2847 @@
+# Kanged From @TroJanZheX
+# Thanks @DeletedFromEarth
+import asyncio
+import re
+import ast
+import math
+import random
+import pytz
+from datetime import datetime, timedelta, date, time
+lock = asyncio.Lock()
+from database.users_chats_db import db
+from pyrogram.errors.exceptions.bad_request_400 import MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty
+from Script import script
+import pyrogram
+from database.connections_mdb import active_connection, all_connections, delete_connection, if_active, make_active, \
+ make_inactive
+from info import *
+from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery, InputMediaPhoto
+from pyrogram import Client, filters, enums
+from pyrogram.errors import FloodWait, UserIsBlocked, MessageNotModified, PeerIdInvalid
+from utils import get_size, is_req_subscribed, get_poster, search_gagala, temp, get_settings, save_group_settings, get_shortlink, get_tutorial, send_all, get_cap
+from database.users_chats_db import db
+from database.ia_filterdb import Media, get_file_details, get_search_results, get_bad_files
+from database.filters_mdb import (
+ del_all,
+ find_filter,
+ get_filters,
+)
+from database.gfilters_mdb import (
+ find_gfilter,
+ get_gfilters,
+ del_allg
+)
+import logging
+from urllib.parse import quote_plus
+from util.file_properties import get_name, get_hash, get_media_file_size
+
+logger = logging.getLogger(__name__)
+logger.setLevel(logging.ERROR)
+
+import requests
+import string
+import tracemalloc
+# Enable tracemalloc
+tracemalloc.start()
+
+TIMEZONE = "Asia/Kolkata"
+BUTTON = {}
+BUTTONS = {}
+FRESH = {}
+BUTTONS0 = {}
+BUTTONS1 = {}
+BUTTONS2 = {}
+SPELL_CHECK = {}
+# ENABLE_SHORTLINK = ""
+
+def generate_random_alphanumeric():
+ """Generate a random 8-letter alphanumeric string."""
+ characters = string.ascii_letters + string.digits
+ random_chars = ''.join(random.choice(characters) for _ in range(8))
+ return random_chars
+
+def get_shortlink_sync(url):
+ try:
+ rget = requests.get(f"https://{STREAM_SITE}/api?api={STREAM_API}&url={url}&alias={generate_random_alphanumeric()}")
+ rjson = rget.json()
+ if rjson["status"] == "success" or rget.status_code == 200:
+ return rjson["shortenedUrl"]
+ else:
+ return url
+ except Exception as e:
+ print(f"Error in get_shortlink_sync: {e}")
+ return url
+
+async def get_shortlink(url):
+ loop = asyncio.get_event_loop()
+ return await loop.run_in_executor(None, get_shortlink_sync, url)
+
+@Client.on_message(filters.group | filters.private & filters.text & filters.incoming)
+async def give_filter(client, message):
+ if message.chat.id != SUPPORT_CHAT_ID:
+ manual = await manual_filters(client, message)
+ if manual == False:
+ settings = await get_settings(message.chat.id)
+ try:
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_ffilter', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ else: #a better logic to avoid repeated lines of code in auto_filter function
+ search = message.text
+ temp_files, temp_offset, total_results = await get_search_results(chat_id=message.chat.id, query=search.lower(), offset=0, filter=True)
+ if total_results == 0:
+ return
+ else:
+ return await message.reply_text(f"Hᴇʏ {message.from_user.mention},\n\nʏᴏᴜʀ ʀᴇǫᴜᴇꜱᴛ ɪꜱ ᴀʟʀᴇᴀᴅʏ ᴀᴠᴀɪʟᴀʙʟᴇ ✅\n\n📂 ꜰɪʟᴇꜱ ꜰᴏᴜɴᴅ : {str(total_results)}\n🔍 ꜱᴇᴀʀᴄʜ : {search}
\n\n‼️ ᴛʜɪs ɪs ᴀ sᴜᴘᴘᴏʀᴛ ɢʀᴏᴜᴘ sᴏ ᴛʜᴀᴛ ʏᴏᴜ ᴄᴀɴ'ᴛ ɢᴇᴛ ғɪʟᴇs ғʀᴏᴍ ʜᴇʀᴇ...\n\n📝 ꜱᴇᴀʀᴄʜ ʜᴇʀᴇ : 👇",
+ reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("🔍 ᴊᴏɪɴ ᴀɴᴅ ꜱᴇᴀʀᴄʜ ʜᴇʀᴇ 🔎", url=f"https://t.me/MoviesLinkSearchBot2")]]))
+
+@Client.on_message(filters.private & filters.text & filters.incoming)
+async def pm_text(bot, message):
+ content = message.text
+ user = message.from_user.first_name
+ user_id = message.from_user.id
+ if content.startswith("/") or content.startswith("#"): return # ignore commands and hashtags
+ if user_id in ADMINS: return # ignore admins
+ await message.reply_text(
+ text=f"ʜᴇʏ {user} 😍 ,\n\nʏᴏᴜ ᴄᴀɴ'ᴛ ɢᴇᴛ ᴍᴏᴠɪᴇs ꜰʀᴏᴍ ʜᴇʀᴇ. ʀᴇǫᴜᴇsᴛ ɪᴛ ɪɴ ᴏᴜʀ ᴍᴏᴠɪᴇ ɢʀᴏᴜᴘ ʙʏ ᴄʟɪᴄᴋɪɴɢ ᴏɴ ʙᴇʟᴏᴡ ʙᴜᴛᴛᴏɴ 👇",
+ reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("📝 ʀᴇǫᴜᴇsᴛ ʜᴇʀᴇ ", url=f"https://t.me/MoviesLinkSearchBot2")]])
+ )
+ await bot.send_message(
+ chat_id=LOG_CHANNEL,
+ text=f"#𝐏𝐌_𝐌𝐒𝐆\n\nNᴀᴍᴇ : {user}\n\nID : {user_id}\n\nMᴇssᴀɢᴇ : {content}"
+ )
+
+@Client.on_callback_query(filters.regex(r"^next"))
+async def next_page(bot, query):
+ ident, req, key, offset = query.data.split("_")
+ curr_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ if int(req) not in [query.from_user.id, 0]:
+ return await query.answer(script.ALRT_TXT.format(query.from_user.first_name), show_alert=True)
+ try:
+ offset = int(offset)
+ except:
+ offset = 0
+ if BUTTONS.get(key)!=None:
+ search = BUTTONS.get(key)
+ else:
+ search = FRESH.get(key)
+ if not search:
+ await query.answer(script.OLD_ALRT_TXT.format(query.from_user.first_name),show_alert=True)
+ return
+
+ files, n_offset, total = await get_search_results(query.message.chat.id, search, offset=offset, filter=True)
+ try:
+ n_offset = int(n_offset)
+ except:
+ n_offset = 0
+
+ if not files:
+ return
+ temp.GETALL[key] = files
+ temp.SHORT[query.from_user.id] = query.message.chat.id
+ settings = await get_settings(query.message.chat.id)
+ pre = 'filep' if settings['file_secure'] else 'file'
+ if settings['button']:
+ btn = [
+ [
+ InlineKeyboardButton(
+ text=f"📁 {get_size(file.file_size)} ▷ {' '.join(filter(lambda x: not x.startswith('[') and not x.startswith('@') and not x.startswith('www.'), file.file_name.split()))}", callback_data=f'{pre}#{file.file_id}'
+ ),
+ ]
+ for file in files
+ ]
+
+
+ btn.insert(0,
+ [
+ InlineKeyboardButton("⇈ ꜱᴇʟᴇᴄᴛ ᴏᴘᴛɪᴏɴꜱ ʜᴇʀᴇ ⇈", 'reqinfo')
+ ]
+ )
+ btn.insert(0,
+ [
+ InlineKeyboardButton(f'ǫᴜᴀʟɪᴛʏ', callback_data=f"qualities#{key}"),
+ InlineKeyboardButton("ʟᴀɴɢᴜᴀɢᴇ", callback_data=f"languages#{key}"),
+ InlineKeyboardButton("ꜱᴇᴀsᴏɴ", callback_data=f"seasons#{key}")
+ ]
+ )
+ btn.insert(0, [
+ InlineKeyboardButton("♨️ ꜱᴇɴᴅ ᴀʟʟ ꜰɪʟᴇꜱ ♨️", callback_data=f"sendfiles#{key}")
+ ])
+
+ else:
+ btn = []
+ btn.insert(0,
+ [
+ InlineKeyboardButton("⇈ ꜱᴇʟᴇᴄᴛ ᴏᴘᴛɪᴏɴꜱ ʜᴇʀᴇ ⇈", 'reqinfo')
+ ]
+ )
+ btn.insert(0,
+ [
+ InlineKeyboardButton(f'ǫᴜᴀʟɪᴛʏ', callback_data=f"qualities#{key}"),
+ InlineKeyboardButton("ʟᴀɴɢᴜᴀɢᴇ", callback_data=f"languages#{key}"),
+ InlineKeyboardButton("ꜱᴇᴀsᴏɴ", callback_data=f"seasons#{key}")
+ ]
+ )
+ btn.insert(0, [
+ InlineKeyboardButton("♨️ ꜱᴇɴᴅ ᴀʟʟ ꜰɪʟᴇꜱ ♨️", callback_data=f"sendfiles#{key}")
+ ])
+
+ try:
+ if settings['max_btn']:
+ if 0 < offset <= 10:
+ off_set = 0
+ elif offset == 0:
+ off_set = None
+ else:
+ off_set = offset - 10
+ if n_offset == 0:
+ btn.append(
+ [InlineKeyboardButton("⋞ ʙᴀᴄᴋ", callback_data=f"next_{req}_{key}_{off_set}"), InlineKeyboardButton(f"{math.ceil(int(offset)/10)+1} / {math.ceil(total/10)}", callback_data="pages")]
+ )
+ elif off_set is None:
+ btn.append([InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(f"{math.ceil(int(offset)/10)+1} / {math.ceil(total/10)}", callback_data="pages"), InlineKeyboardButton("ɴᴇxᴛ ⋟", callback_data=f"next_{req}_{key}_{n_offset}")])
+ else:
+ btn.append(
+ [
+ InlineKeyboardButton("⋞ ʙᴀᴄᴋ", callback_data=f"next_{req}_{key}_{off_set}"),
+ InlineKeyboardButton(f"{math.ceil(int(offset)/10)+1} / {math.ceil(total/10)}", callback_data="pages"),
+ InlineKeyboardButton("ɴᴇxᴛ ⋟", callback_data=f"next_{req}_{key}_{n_offset}")
+ ],
+ )
+ else:
+ if 0 < offset <= int(MAX_B_TN):
+ off_set = 0
+ elif offset == 0:
+ off_set = None
+ else:
+ off_set = offset - int(MAX_B_TN)
+ if n_offset == 0:
+ btn.append(
+ [InlineKeyboardButton("⋞ ʙᴀᴄᴋ", callback_data=f"next_{req}_{key}_{off_set}"), InlineKeyboardButton(f"{math.ceil(int(offset)/int(MAX_B_TN))+1} / {math.ceil(total/int(MAX_B_TN))}", callback_data="pages")]
+ )
+ elif off_set is None:
+ btn.append([InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(f"{math.ceil(int(offset)/int(MAX_B_TN))+1} / {math.ceil(total/int(MAX_B_TN))}", callback_data="pages"), InlineKeyboardButton("ɴᴇxᴛ ⋟", callback_data=f"next_{req}_{key}_{n_offset}")])
+ else:
+ btn.append(
+ [
+ InlineKeyboardButton("⋞ ʙᴀᴄᴋ", callback_data=f"next_{req}_{key}_{off_set}"),
+ InlineKeyboardButton(f"{math.ceil(int(offset)/int(MAX_B_TN))+1} / {math.ceil(total/int(MAX_B_TN))}", callback_data="pages"),
+ InlineKeyboardButton("ɴᴇxᴛ ⋟", callback_data=f"next_{req}_{key}_{n_offset}")
+ ],
+ )
+ except KeyError:
+ await save_group_settings(query.message.chat.id, 'max_btn', True)
+ if 0 < offset <= 10:
+ off_set = 0
+ elif offset == 0:
+ off_set = None
+ else:
+ off_set = offset - 10
+ if n_offset == 0:
+ btn.append(
+ [InlineKeyboardButton("⋞ ʙᴀᴄᴋ", callback_data=f"next_{req}_{key}_{off_set}"), InlineKeyboardButton(f"{math.ceil(int(offset)/10)+1} / {math.ceil(total/10)}", callback_data="pages")]
+ )
+ elif off_set is None:
+ btn.append([InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(f"{math.ceil(int(offset)/10)+1} / {math.ceil(total/10)}", callback_data="pages"), InlineKeyboardButton("ɴᴇxᴛ ⋟", callback_data=f"next_{req}_{key}_{n_offset}")])
+ else:
+ btn.append(
+ [
+ InlineKeyboardButton("⋞ ʙᴀᴄᴋ", callback_data=f"next_{req}_{key}_{off_set}"),
+ InlineKeyboardButton(f"{math.ceil(int(offset)/10)+1} / {math.ceil(total/10)}", callback_data="pages"),
+ InlineKeyboardButton("ɴᴇxᴛ ⋟", callback_data=f"next_{req}_{key}_{n_offset}")
+ ],
+ )
+ if not settings["button"]:
+ cur_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ time_difference = timedelta(hours=cur_time.hour, minutes=cur_time.minute, seconds=(cur_time.second+(cur_time.microsecond/1000000))) - timedelta(hours=curr_time.hour, minutes=curr_time.minute, seconds=(curr_time.second+(curr_time.microsecond/1000000)))
+ remaining_seconds = "{:.2f}".format(time_difference.total_seconds())
+ cap = await get_cap(settings, remaining_seconds, files, query, total, search)
+ try:
+ await query.message.edit_text(text=cap, reply_markup=InlineKeyboardMarkup(btn), disable_web_page_preview=True)
+ except MessageNotModified:
+ pass
+ else:
+ try:
+ await query.edit_message_reply_markup(
+ reply_markup=InlineKeyboardMarkup(btn)
+ )
+ except MessageNotModified:
+ pass
+ await query.answer()
+
+@Client.on_callback_query(filters.regex(r"^spol"))
+async def advantage_spoll_choker(bot, query):
+ _, user, movie_ = query.data.split('#')
+ movies = SPELL_CHECK.get(query.message.reply_to_message.id)
+ if not movies:
+ return await query.answer(script.OLD_ALRT_TXT.format(query.from_user.first_name), show_alert=True)
+ if int(user) != 0 and query.from_user.id != int(user):
+ return await query.answer(script.ALRT_TXT.format(query.from_user.first_name), show_alert=True)
+ if movie_ == "close_spellcheck":
+ return await query.message.delete()
+ movie = movies[(int(movie_))]
+ movie = re.sub(r"[:\-]", " ", movie)
+ movie = re.sub(r"\s+", " ", movie).strip()
+ await query.answer(script.TOP_ALRT_MSG)
+ gl = await global_filters(bot, query.message, text=movie)
+ if gl == False:
+ k = await manual_filters(bot, query.message, text=movie)
+ if k == False:
+ files, offset, total_results = await get_search_results(query.message.chat.id, movie, offset=0, filter=True)
+ if files:
+ k = (movie, files, offset, total_results)
+ await auto_filter(bot, query, k)
+ else:
+ reqstr1 = query.from_user.id if query.from_user else 0
+ reqstr = await bot.get_users(reqstr1)
+ if NO_RESULTS_MSG:
+ await bot.send_message(chat_id=LOG_CHANNEL, text=(script.NORSLTS.format(reqstr.id, reqstr.mention, movie)))
+ k = await query.message.edit(script.MVE_NT_FND)
+ await asyncio.sleep(10)
+ await k.delete()
+#Qualities
+@Client.on_callback_query(filters.regex(r"^qualities#"))
+async def qualities_cb_handler(client: Client, query: CallbackQuery):
+
+ try:
+ if int(query.from_user.id) not in [query.message.reply_to_message.from_user.id, 0]:
+ return await query.answer(
+ f"⚠️ ʜᴇʟʟᴏ {query.from_user.first_name},\nᴛʜɪꜱ ɪꜱ ɴᴏᴛ ʏᴏᴜʀ ᴍᴏᴠɪᴇ ʀᴇǫᴜᴇꜱᴛ,\nʀᴇǫᴜᴇꜱᴛ ʏᴏᴜʀ'ꜱ...",
+ show_alert=True,
+ )
+ except:
+ pass
+ _, key = query.data.split("#")
+ # if BUTTONS.get(key+"1")!=None:
+ # search = BUTTONS.get(key+"1")
+ # else:
+ # search = BUTTONS.get(key)
+ # BUTTONS[key+"1"] = search
+ search = FRESH.get(key)
+ search = search.replace(' ', '_')
+ btn = []
+ for i in range(0, len(QUALITIES)-1, 2):
+ btn.append([
+ InlineKeyboardButton(
+ text=QUALITIES[i].title(),
+ callback_data=f"fq#{QUALITIES[i].lower()}#{key}"
+ ),
+ InlineKeyboardButton(
+ text=QUALITIES[i+1].title(),
+ callback_data=f"fq#{QUALITIES[i+1].lower()}#{key}"
+ ),
+ ])
+
+ btn.insert(
+ 0,
+ [
+ InlineKeyboardButton(
+ text="⇊ ꜱᴇʟᴇᴄᴛ ǫᴜᴀʟɪᴛʏ ⇊", callback_data="ident"
+ )
+ ],
+ )
+ req = query.from_user.id
+ offset = 0
+ btn.append([InlineKeyboardButton(text="↭ ʙᴀᴄᴋ ᴛᴏ ꜰɪʟᴇs ↭", callback_data=f"fq#homepage#{key}")])
+
+ await query.edit_message_reply_markup(InlineKeyboardMarkup(btn))
+
+
+@Client.on_callback_query(filters.regex(r"^fq#"))
+async def filter_qualities_cb_handler(client: Client, query: CallbackQuery):
+ _, qual, key = query.data.split("#")
+ curr_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ search = FRESH.get(key)
+ search = search.replace("_", " ")
+ baal = qual in search
+ if baal:
+ search = search.replace(qual, "")
+ else:
+ search = search
+ req = query.from_user.id
+ chat_id = query.message.chat.id
+ message = query.message
+ try:
+ if int(query.from_user.id) not in [query.message.reply_to_message.from_user.id, 0]:
+ return await query.answer(
+ f"⚠️ ʜᴇʟʟᴏ {query.from_user.first_name},\nᴛʜɪꜱ ɪꜱ ɴᴏᴛ ʏᴏᴜʀ ᴍᴏᴠɪᴇ ʀᴇǫᴜᴇꜱᴛ,\nʀᴇǫᴜᴇꜱᴛ ʏᴏᴜʀ'ꜱ...",
+ show_alert=True,
+ )
+ except:
+ pass
+ if qual != "homepage":
+ search = f"{search} {qual}"
+ BUTTONS[key] = search
+
+ files, offset, total_results = await get_search_results(chat_id, search, offset=0, filter=True)
+ if not files:
+ await query.answer("🚫 ɴᴏ ꜰɪʟᴇꜱ ᴡᴇʀᴇ ꜰᴏᴜɴᴅ 🚫", show_alert=1)
+ return
+ temp.GETALL[key] = files
+ settings = await get_settings(message.chat.id)
+ pre = 'filep' if settings['file_secure'] else 'file'
+ if settings["button"]:
+ btn = [
+ [
+ InlineKeyboardButton(
+ text=f"📁 {get_size(file.file_size)} ▷ {' '.join(filter(lambda x: not x.startswith('[') and not x.startswith('@') and not x.startswith('www.'), file.file_name.split()))}", callback_data=f'{pre}#{file.file_id}'
+ ),
+ ]
+ for file in files
+ ]
+ btn.insert(0,
+ [
+ InlineKeyboardButton("⇈ ꜱᴇʟᴇᴄᴛ ᴏᴘᴛɪᴏɴꜱ ʜᴇʀᴇ ⇈", 'reqinfo')
+ ]
+ )
+ btn.insert(0,
+ [
+ InlineKeyboardButton(f'ǫᴜᴀʟɪᴛʏ', callback_data=f"qualities#{key}"),
+ InlineKeyboardButton("ʟᴀɴɢᴜᴀɢᴇ", callback_data=f"languages#{key}"),
+ InlineKeyboardButton("ꜱᴇᴀsᴏɴ", callback_data=f"seasons#{key}")
+ ]
+ )
+ btn.insert(0, [
+ InlineKeyboardButton("♨️ ꜱᴇɴᴅ ᴀʟʟ ꜰɪʟᴇꜱ ♨️", callback_data=f"sendfiles#{key}")
+ ])
+
+ else:
+ btn = []
+ btn.insert(0,
+ [
+ InlineKeyboardButton("⇈ ꜱᴇʟᴇᴄᴛ ᴏᴘᴛɪᴏɴꜱ ʜᴇʀᴇ ⇈", 'reqinfo')
+ ]
+ )
+ btn.insert(0,
+ [
+ InlineKeyboardButton(f'ǫᴜᴀʟɪᴛʏ', callback_data=f"qualities#{key}"),
+ InlineKeyboardButton("ʟᴀɴɢᴜᴀɢᴇ", callback_data=f"languages#{key}"),
+ InlineKeyboardButton("ꜱᴇᴀsᴏɴ", callback_data=f"seasons#{key}")
+ ]
+ )
+ btn.insert(0, [
+ InlineKeyboardButton("♨️ ꜱᴇɴᴅ ᴀʟʟ ꜰɪʟᴇꜱ ♨️", callback_data=f"sendfiles#{key}")
+ ])
+
+ if offset != "":
+ try:
+ if settings['max_btn']:
+ btn.append(
+ [InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(text=f"1/{math.ceil(int(total_results)/10)}",callback_data="pages"), InlineKeyboardButton(text="ɴᴇxᴛ ⋟",callback_data=f"next_{req}_{key}_{offset}")]
+ )
+
+ else:
+ btn.append(
+ [InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(text=f"1/{math.ceil(int(total_results)/int(MAX_B_TN))}",callback_data="pages"), InlineKeyboardButton(text="ɴᴇxᴛ ⋟",callback_data=f"next_{req}_{key}_{offset}")]
+ )
+ except KeyError:
+ await save_group_settings(query.message.chat.id, 'max_btn', True)
+ btn.append(
+ [InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(text=f"1/{math.ceil(int(total_results)/10)}",callback_data="pages"), InlineKeyboardButton(text="ɴᴇxᴛ ⋟",callback_data=f"next_{req}_{key}_{offset}")]
+ )
+ else:
+ btn.append(
+ [InlineKeyboardButton(text="↭ ɴᴏ ᴍᴏʀᴇ ᴘᴀɢᴇꜱ ᴀᴠᴀɪʟᴀʙʟᴇ ↭",callback_data="pages")]
+ )
+
+ if not settings["button"]:
+ cur_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ time_difference = timedelta(hours=cur_time.hour, minutes=cur_time.minute, seconds=(cur_time.second+(cur_time.microsecond/1000000))) - timedelta(hours=curr_time.hour, minutes=curr_time.minute, seconds=(curr_time.second+(curr_time.microsecond/1000000)))
+ remaining_seconds = "{:.2f}".format(time_difference.total_seconds())
+ cap = await get_cap(settings, remaining_seconds, files, query, total_results, search)
+ try:
+ await query.message.edit_text(text=cap, reply_markup=InlineKeyboardMarkup(btn), disable_web_page_preview=True)
+ except MessageNotModified:
+ pass
+ else:
+ try:
+ await query.edit_message_reply_markup(
+ reply_markup=InlineKeyboardMarkup(btn)
+ )
+ except MessageNotModified:
+ pass
+ await query.answer()
+
+#languages
+
+@Client.on_callback_query(filters.regex(r"^languages#"))
+async def languages_cb_handler(client: Client, query: CallbackQuery):
+ try:
+ if int(query.from_user.id) not in [query.message.reply_to_message.from_user.id, 0]:
+ return await query.answer(
+ f"⚠️ ʜᴇʟʟᴏ {query.from_user.first_name},\nᴛʜɪꜱ ɪꜱ ɴᴏᴛ ʏᴏᴜʀ ᴍᴏᴠɪᴇ ʀᴇǫᴜᴇꜱᴛ,\nʀᴇǫᴜᴇꜱᴛ ʏᴏᴜʀ'ꜱ...",
+ show_alert=True,
+ )
+ except:
+ pass
+ _, key = query.data.split("#")
+ # if BUTTONS.get(key+"1")!=None:
+ # search = BUTTONS.get(key+"1")
+ # else:
+ # search = BUTTONS.get(key)
+ # BUTTONS[key+"1"] = search
+ search = FRESH.get(key)
+ search = search.replace(' ', '_')
+ btn = []
+ for i in range(0, len(LANGUAGES)-1, 2):
+ btn.append([
+ InlineKeyboardButton(
+ text=LANGUAGES[i].title(),
+ callback_data=f"fl#{LANGUAGES[i].lower()}#{key}"
+ ),
+ InlineKeyboardButton(
+ text=LANGUAGES[i+1].title(),
+ callback_data=f"fl#{LANGUAGES[i+1].lower()}#{key}"
+ ),
+ ])
+
+ btn.insert(
+ 0,
+ [
+ InlineKeyboardButton(
+ text="⇊ ꜱᴇʟᴇᴄᴛ ʟᴀɴɢᴜᴀɢᴇ ⇊", callback_data="ident"
+ )
+ ],
+ )
+ req = query.from_user.id
+ offset = 0
+ btn.append([InlineKeyboardButton(text="↭ ʙᴀᴄᴋ ᴛᴏ ꜰɪʟᴇs ↭", callback_data=f"fl#homepage#{key}")])
+
+ await query.edit_message_reply_markup(InlineKeyboardMarkup(btn))
+
+
+@Client.on_callback_query(filters.regex(r"^fl#"))
+async def filter_languages_cb_handler(client: Client, query: CallbackQuery):
+ _, lang, key = query.data.split("#")
+ curr_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ search = FRESH.get(key)
+ search = search.replace("_", " ")
+ baal = lang in search
+ if baal:
+ search = search.replace(lang, "")
+ else:
+ search = search
+ req = query.from_user.id
+ chat_id = query.message.chat.id
+ message = query.message
+ try:
+ if int(query.from_user.id) not in [query.message.reply_to_message.from_user.id, 0]:
+ return await query.answer(
+ f"⚠️ ʜᴇʟʟᴏ {query.from_user.first_name},\nᴛʜɪꜱ ɪꜱ ɴᴏᴛ ʏᴏᴜʀ ᴍᴏᴠɪᴇ ʀᴇǫᴜᴇꜱᴛ,\nʀᴇǫᴜᴇꜱᴛ ʏᴏᴜʀ'ꜱ...",
+ show_alert=True,
+ )
+ except:
+ pass
+ if lang != "homepage":
+ search = f"{search} {lang}"
+ BUTTONS[key] = search
+
+ files, offset, total_results = await get_search_results(chat_id, search, offset=0, filter=True)
+ if not files:
+ await query.answer("🚫 ɴᴏ ꜰɪʟᴇꜱ ᴡᴇʀᴇ ꜰᴏᴜɴᴅ 🚫", show_alert=1)
+ return
+ temp.GETALL[key] = files
+ settings = await get_settings(message.chat.id)
+ pre = 'filep' if settings['file_secure'] else 'file'
+ if settings["button"]:
+ btn = [
+ [
+ InlineKeyboardButton(
+ text=f"📁 {get_size(file.file_size)} ▷ {' '.join(filter(lambda x: not x.startswith('[') and not x.startswith('@') and not x.startswith('www.'), file.file_name.split()))}", callback_data=f'{pre}#{file.file_id}'
+ ),
+ ]
+ for file in files
+ ]
+ btn.insert(0,
+ [
+ InlineKeyboardButton("⇈ ꜱᴇʟᴇᴄᴛ ᴏᴘᴛɪᴏɴꜱ ʜᴇʀᴇ ⇈", 'reqinfo')
+ ]
+ )
+ btn.insert(0,
+ [
+ InlineKeyboardButton(f'ǫᴜᴀʟɪᴛʏ', callback_data=f"qualities#{key}"),
+ InlineKeyboardButton("ʟᴀɴɢᴜᴀɢᴇ", callback_data=f"languages#{key}"),
+ InlineKeyboardButton("ꜱᴇᴀsᴏɴ", callback_data=f"seasons#{key}")
+ ]
+ )
+ btn.insert(0, [
+ InlineKeyboardButton("♨️ ꜱᴇɴᴅ ᴀʟʟ ꜰɪʟᴇꜱ ♨️", callback_data=f"sendfiles#{key}")
+ ])
+
+ else:
+ btn = []
+ btn.insert(0,
+ [
+ InlineKeyboardButton("⇈ ꜱᴇʟᴇᴄᴛ ᴏᴘᴛɪᴏɴꜱ ʜᴇʀᴇ ⇈", 'reqinfo')
+ ]
+ )
+ btn.insert(0,
+ [
+ InlineKeyboardButton(f'ǫᴜᴀʟɪᴛʏ', callback_data=f"qualities#{key}"),
+ InlineKeyboardButton("ʟᴀɴɢᴜᴀɢᴇ", callback_data=f"languages#{key}"),
+ InlineKeyboardButton("ꜱᴇᴀsᴏɴ", callback_data=f"seasons#{key}")
+ ]
+ )
+ btn.insert(0, [
+ InlineKeyboardButton("♨️ ꜱᴇɴᴅ ᴀʟʟ ꜰɪʟᴇꜱ ♨️", callback_data=f"sendfiles#{key}")
+ ])
+
+ if offset != "":
+ try:
+ if settings['max_btn']:
+ btn.append(
+ [InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(text=f"1/{math.ceil(int(total_results)/10)}",callback_data="pages"), InlineKeyboardButton(text="ɴᴇxᴛ ⋟",callback_data=f"next_{req}_{key}_{offset}")]
+ )
+
+ else:
+ btn.append(
+ [InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(text=f"1/{math.ceil(int(total_results)/int(MAX_B_TN))}",callback_data="pages"), InlineKeyboardButton(text="ɴᴇxᴛ ⋟",callback_data=f"next_{req}_{key}_{offset}")]
+ )
+ except KeyError:
+ await save_group_settings(query.message.chat.id, 'max_btn', True)
+ btn.append(
+ [InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(text=f"1/{math.ceil(int(total_results)/10)}",callback_data="pages"), InlineKeyboardButton(text="ɴᴇxᴛ ⋟",callback_data=f"next_{req}_{key}_{offset}")]
+ )
+ else:
+ btn.append(
+ [InlineKeyboardButton(text="↭ ɴᴏ ᴍᴏʀᴇ ᴘᴀɢᴇꜱ ᴀᴠᴀɪʟᴀʙʟᴇ ↭",callback_data="pages")]
+ )
+
+ if not settings["button"]:
+ cur_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ time_difference = timedelta(hours=cur_time.hour, minutes=cur_time.minute, seconds=(cur_time.second+(cur_time.microsecond/1000000))) - timedelta(hours=curr_time.hour, minutes=curr_time.minute, seconds=(curr_time.second+(curr_time.microsecond/1000000)))
+ remaining_seconds = "{:.2f}".format(time_difference.total_seconds())
+ cap = await get_cap(settings, remaining_seconds, files, query, total_results, search)
+ try:
+ await query.message.edit_text(text=cap, reply_markup=InlineKeyboardMarkup(btn), disable_web_page_preview=True)
+ except MessageNotModified:
+ pass
+ else:
+ try:
+ await query.edit_message_reply_markup(
+ reply_markup=InlineKeyboardMarkup(btn)
+ )
+ except MessageNotModified:
+ pass
+ await query.answer()
+
+
+
+@Client.on_callback_query(filters.regex(r"^seasons#"))
+async def seasons_cb_handler(client: Client, query: CallbackQuery):
+ try:
+ if int(query.from_user.id) not in [query.message.reply_to_message.from_user.id, 0]:
+ return await query.answer(
+ f"⚠️ ʜᴇʟʟᴏ {query.from_user.first_name},\nᴛʜɪꜱ ɪꜱ ɴᴏᴛ ʏᴏᴜʀ ᴍᴏᴠɪᴇ ʀᴇǫᴜᴇꜱᴛ,\nʀᴇǫᴜᴇꜱᴛ ʏᴏᴜʀ'ꜱ...",
+ show_alert=True,
+ )
+ except:
+ pass
+ _, key = query.data.split("#")
+ # if BUTTONS.get(key+"2")!=None:
+ # search = BUTTONS.get(key+"2")
+ # else:
+ # search = BUTTONS.get(key)
+ # BUTTONS[key+"2"] = search
+ search = FRESH.get(key)
+ BUTTONS[key] = None
+ search = search.replace(' ', '_')
+ btn = []
+ for i in range(0, len(SEASONS)-1, 2):
+ btn.append([
+ InlineKeyboardButton(
+ text=SEASONS[i].title(),
+ callback_data=f"fs#{SEASONS[i].lower()}#{key}"
+ ),
+ InlineKeyboardButton(
+ text=SEASONS[i+1].title(),
+ callback_data=f"fs#{SEASONS[i+1].lower()}#{key}"
+ ),
+ ])
+
+ btn.insert(
+ 0,
+ [
+ InlineKeyboardButton(
+ text="⇊ ꜱᴇʟᴇᴄᴛ ꜱᴇᴀꜱᴏɴ ⇊", callback_data="ident"
+ )
+ ],
+ )
+ req = query.from_user.id
+ offset = 0
+ btn.append([InlineKeyboardButton(text="↭ ʙᴀᴄᴋ ᴛᴏ ꜰɪʟᴇs ↭", callback_data=f"next_{req}_{key}_{offset}")])
+
+ await query.edit_message_reply_markup(InlineKeyboardMarkup(btn))
+
+
+@Client.on_callback_query(filters.regex(r"^fs#"))
+async def filter_seasons_cb_handler(client: Client, query: CallbackQuery):
+ _, seas, key = query.data.split("#")
+ curr_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ search = FRESH.get(key)
+ search = search.replace("_", " ")
+ sea = ""
+ season_search = ["s01","s02", "s03", "s04", "s05", "s06", "s07", "s08", "s09", "s10", "season 01","season 02","season 03","season 04","season 05","season 06","season 07","season 08","season 09","season 10", "season 1","season 2","season 3","season 4","season 5","season 6","season 7","season 8","season 9"]
+ for x in range (len(season_search)):
+ if season_search[x] in search:
+ sea = season_search[x]
+ break
+ if sea:
+ search = search.replace(sea, "")
+ else:
+ search = search
+
+ req = query.from_user.id
+ chat_id = query.message.chat.id
+ message = query.message
+ try:
+ if int(query.from_user.id) not in [query.message.reply_to_message.from_user.id, 0]:
+ return await query.answer(
+ f"⚠️ ʜᴇʟʟᴏ {query.from_user.first_name},\nᴛʜɪꜱ ɪꜱ ɴᴏᴛ ʏᴏᴜʀ ᴍᴏᴠɪᴇ ʀᴇǫᴜᴇꜱᴛ,\nʀᴇǫᴜᴇꜱᴛ ʏᴏᴜʀ'ꜱ...",
+ show_alert=True,
+ )
+ except:
+ pass
+
+ searchagn = search
+ search1 = search
+ search2 = search
+ search = f"{search} {seas}"
+ BUTTONS0[key] = search
+
+ files, _, _ = await get_search_results(chat_id, search, max_results=10)
+ files = [file for file in files if re.search(seas, file.file_name, re.IGNORECASE)]
+
+ seas1 = "s01" if seas == "season 1" else "s02" if seas == "season 2" else "s03" if seas == "season 3" else "s04" if seas == "season 4" else "s05" if seas == "season 5" else "s06" if seas == "season 6" else "s07" if seas == "season 7" else "s08" if seas == "season 8" else "s09" if seas == "season 9" else "s10" if seas == "season 10" else ""
+ search1 = f"{search1} {seas1}"
+ BUTTONS1[key] = search1
+ files1, _, _ = await get_search_results(chat_id, search1, max_results=10)
+ files1 = [file for file in files1 if re.search(seas1, file.file_name, re.IGNORECASE)]
+
+ if files1:
+ files.extend(files1)
+
+ seas2 = "season 01" if seas == "season 1" else "season 02" if seas == "season 2" else "season 03" if seas == "season 3" else "season 04" if seas == "season 4" else "season 05" if seas == "season 5" else "season 06" if seas == "season 6" else "season 07" if seas == "season 7" else "season 08" if seas == "season 8" else "season 09" if seas == "season 9" else "s010"
+ search2 = f"{search2} {seas2}"
+ BUTTONS2[key] = search2
+ files2, _, _ = await get_search_results(chat_id, search2, max_results=10)
+ files2 = [file for file in files2 if re.search(seas2, file.file_name, re.IGNORECASE)]
+
+ if files2:
+ files.extend(files2)
+
+ if not files:
+ await query.answer("🚫 ɴᴏ ꜰɪʟᴇꜱ ᴡᴇʀᴇ ꜰᴏᴜɴᴅ 🚫", show_alert=1)
+ return
+ temp.GETALL[key] = files
+ settings = await get_settings(message.chat.id)
+ pre = 'filep' if settings['file_secure'] else 'file'
+ if settings["button"]:
+ btn = [
+ [
+ InlineKeyboardButton(
+ text=f"📁 {get_size(file.file_size)} ▷ {' '.join(filter(lambda x: not x.startswith('[') and not x.startswith('@') and not x.startswith('www.'), file.file_name.split()))}", callback_data=f'{pre}#{file.file_id}'
+ ),
+ ]
+ for file in files
+ ]
+ btn.insert(0, [
+ InlineKeyboardButton("ꜱᴇɴᴅ ᴀʟʟ", callback_data=f"sendfiles#{key}"),
+ InlineKeyboardButton("ꜱᴇʟᴇᴄᴛ ᴀɢᴀɪɴ", callback_data=f"seasons#{key}")
+ ])
+ else:
+ btn = []
+ btn.insert(0,
+ [
+ InlineKeyboardButton("⇈ ꜱᴇʟᴇᴄᴛ ᴏᴘᴛɪᴏɴꜱ ʜᴇʀᴇ ⇈", 'reqinfo')
+ ]
+ )
+ btn.insert(0,
+ [
+ InlineKeyboardButton(f'ǫᴜᴀʟɪᴛʏ', callback_data=f"qualities#{key}"),
+ InlineKeyboardButton("ʟᴀɴɢᴜᴀɢᴇ", callback_data=f"languages#{key}"),
+ InlineKeyboardButton("ꜱᴇᴀsᴏɴ", callback_data=f"seasons#{key}")
+ ]
+ )
+ btn.insert(0, [
+ InlineKeyboardButton("♨️ ꜱᴇɴᴅ ᴀʟʟ ꜰɪʟᴇꜱ ♨️", callback_data=f"sendfiles#{key}")
+ ])
+
+ offset = 0
+
+ btn.append([
+ InlineKeyboardButton(
+ text="↭ ʙᴀᴄᴋ ᴛᴏ ꜰɪʟᴇs ↭",
+ callback_data=f"next_{req}_{key}_{offset}"
+ ),
+ ])
+
+ if not settings["button"]:
+ cur_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ time_difference = timedelta(hours=cur_time.hour, minutes=cur_time.minute, seconds=(cur_time.second+(cur_time.microsecond/1000000))) - timedelta(hours=curr_time.hour, minutes=curr_time.minute, seconds=(curr_time.second+(curr_time.microsecond/1000000)))
+ remaining_seconds = "{:.2f}".format(time_difference.total_seconds())
+ total_results = len(files)
+ cap = await get_cap(settings, remaining_seconds, files, query, total_results, search)
+ try:
+ await query.message.edit_text(text=cap, reply_markup=InlineKeyboardMarkup(btn), disable_web_page_preview=True)
+ except MessageNotModified:
+ pass
+ else:
+ try:
+ await query.edit_message_reply_markup(reply_markup=InlineKeyboardMarkup(btn))
+ except MessageNotModified:
+ pass
+ await query.answer()
+
+
+@Client.on_callback_query()
+async def cb_handler(client: Client, query: CallbackQuery):
+ lazyData = query.data
+ try:
+ link = await client.create_chat_invite_link(int(REQST_CHANNEL))
+ except:
+ pass
+ if query.data == "close_data":
+ await query.message.delete()
+ elif query.data == "gfiltersdeleteallconfirm":
+ await del_allg(query.message, 'gfilters')
+ await query.answer("ᴅᴏɴᴇ !")
+ return
+ elif query.data == "gfiltersdeleteallcancel":
+ await query.message.reply_to_message.delete()
+ await query.message.delete()
+ await query.answer("ᴘʀᴏᴄᴇꜱꜱ ᴄᴀɴᴄᴇʟʟᴇᴅ !")
+ return
+ elif query.data == "delallconfirm":
+ userid = query.from_user.id
+ chat_type = query.message.chat.type
+
+ if chat_type == enums.ChatType.PRIVATE:
+ grpid = await active_connection(str(userid))
+ if grpid is not None:
+ grp_id = grpid
+ try:
+ chat = await client.get_chat(grpid)
+ title = chat.title
+ except:
+ await query.message.edit_text("Mᴀᴋᴇ sᴜʀᴇ I'ᴍ ᴘʀᴇsᴇɴᴛ ɪɴ ʏᴏᴜʀ ɢʀᴏᴜᴘ!!", quote=True)
+ return await query.answer(MSG_ALRT)
+ else:
+ await query.message.edit_text(
+ "I'ᴍ ɴᴏᴛ ᴄᴏɴɴᴇᴄᴛᴇᴅ ᴛᴏ ᴀɴʏ ɢʀᴏᴜᴘs !\nCʜᴇᴄᴋ /connections ᴏʀ ᴄᴏɴɴᴇᴄᴛ ᴛᴏ ᴀɴʏ ɢʀᴏᴜᴘs.",
+ quote=True
+ )
+ return await query.answer(MSG_ALRT)
+
+ elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]:
+ grp_id = query.message.chat.id
+ title = query.message.chat.title
+
+ else:
+ return await query.answer(MSG_ALRT)
+
+ st = await client.get_chat_member(grp_id, userid)
+ if (st.status == enums.ChatMemberStatus.OWNER) or (str(userid) in ADMINS):
+ await del_all(query.message, grp_id, title)
+ else:
+ await query.answer("Yᴏᴜ ɴᴇᴇᴅ ᴛᴏ ʙᴇ Gʀᴏᴜᴘ Oᴡɴᴇʀ ᴏʀ ᴀɴ Aᴜᴛʜ Usᴇʀ ᴛᴏ ᴅᴏ ᴛʜᴀᴛ !", show_alert=True)
+ elif query.data == "delallcancel":
+ userid = query.from_user.id
+ chat_type = query.message.chat.type
+
+ if chat_type == enums.ChatType.PRIVATE:
+ await query.message.reply_to_message.delete()
+ await query.message.delete()
+
+ elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]:
+ grp_id = query.message.chat.id
+ st = await client.get_chat_member(grp_id, userid)
+ if (st.status == enums.ChatMemberStatus.OWNER) or (str(userid) in ADMINS):
+ await query.message.delete()
+ try:
+ await query.message.reply_to_message.delete()
+ except:
+ pass
+ else:
+ await query.answer("Tʜᴀᴛ's ɴᴏᴛ ғᴏʀ ʏᴏᴜ!!", show_alert=True)
+ elif "groupcb" in query.data:
+ await query.answer()
+
+ group_id = query.data.split(":")[1]
+
+ act = query.data.split(":")[2]
+ hr = await client.get_chat(int(group_id))
+ title = hr.title
+ user_id = query.from_user.id
+
+ if act == "":
+ stat = "ᴄᴏɴɴᴇᴄᴛ"
+ cb = "connectcb"
+ else:
+ stat = "ᴅɪꜱᴄᴏɴɴᴇᴄᴛ"
+ cb = "disconnect"
+
+ keyboard = InlineKeyboardMarkup([
+ [InlineKeyboardButton(f"{stat}", callback_data=f"{cb}:{group_id}"),
+ InlineKeyboardButton("ᴅᴇʟᴇᴛᴇ", callback_data=f"deletecb:{group_id}")],
+ [InlineKeyboardButton("ʙᴀᴄᴋ", callback_data="backcb")]
+ ])
+
+ await query.message.edit_text(
+ f"Gʀᴏᴜᴘ Nᴀᴍᴇ : **{title}**\nGʀᴏᴜᴘ ID : `{group_id}`",
+ reply_markup=keyboard,
+ parse_mode=enums.ParseMode.MARKDOWN
+ )
+ return await query.answer(MSG_ALRT)
+ elif "connectcb" in query.data:
+ await query.answer()
+
+ group_id = query.data.split(":")[1]
+
+ hr = await client.get_chat(int(group_id))
+
+ title = hr.title
+
+ user_id = query.from_user.id
+
+ mkact = await make_active(str(user_id), str(group_id))
+
+ if mkact:
+ await query.message.edit_text(
+ f"Cᴏɴɴᴇᴄᴛᴇᴅ ᴛᴏ **{title}**",
+ parse_mode=enums.ParseMode.MARKDOWN
+ )
+ else:
+ await query.message.edit_text('Sᴏᴍᴇ ᴇʀʀᴏʀ ᴏᴄᴄᴜʀʀᴇᴅ!!', parse_mode=enums.ParseMode.MARKDOWN)
+ return await query.answer(MSG_ALRT)
+ elif "disconnect" in query.data:
+ await query.answer()
+
+ group_id = query.data.split(":")[1]
+
+ hr = await client.get_chat(int(group_id))
+
+ title = hr.title
+ user_id = query.from_user.id
+
+ mkinact = await make_inactive(str(user_id))
+
+ if mkinact:
+ await query.message.edit_text(
+ f"Dɪsᴄᴏɴɴᴇᴄᴛᴇᴅ ғʀᴏᴍ **{title}**",
+ parse_mode=enums.ParseMode.MARKDOWN
+ )
+ else:
+ await query.message.edit_text(
+ f"Sᴏᴍᴇ ᴇʀʀᴏʀ ᴏᴄᴄᴜʀʀᴇᴅ!!",
+ parse_mode=enums.ParseMode.MARKDOWN
+ )
+ return await query.answer(MSG_ALRT)
+ elif "deletecb" in query.data:
+ await query.answer()
+
+ user_id = query.from_user.id
+ group_id = query.data.split(":")[1]
+
+ delcon = await delete_connection(str(user_id), str(group_id))
+
+ if delcon:
+ await query.message.edit_text(
+ "Sᴜᴄᴄᴇssғᴜʟʟʏ ᴅᴇʟᴇᴛᴇᴅ ᴄᴏɴɴᴇᴄᴛɪᴏɴ !"
+ )
+ else:
+ await query.message.edit_text(
+ f"Sᴏᴍᴇ ᴇʀʀᴏʀ ᴏᴄᴄᴜʀʀᴇᴅ!!",
+ parse_mode=enums.ParseMode.MARKDOWN
+ )
+ return await query.answer(MSG_ALRT)
+ elif query.data == "backcb":
+ await query.answer()
+
+ userid = query.from_user.id
+
+ groupids = await all_connections(str(userid))
+ if groupids is None:
+ await query.message.edit_text(
+ "Tʜᴇʀᴇ ᴀʀᴇ ɴᴏ ᴀᴄᴛɪᴠᴇ ᴄᴏɴɴᴇᴄᴛɪᴏɴs!! Cᴏɴɴᴇᴄᴛ ᴛᴏ sᴏᴍᴇ ɢʀᴏᴜᴘs ғɪʀsᴛ.",
+ )
+ return await query.answer(MSG_ALRT)
+ buttons = []
+ for groupid in groupids:
+ try:
+ ttl = await client.get_chat(int(groupid))
+ title = ttl.title
+ active = await if_active(str(userid), str(groupid))
+ act = " - ACTIVE" if active else ""
+ buttons.append(
+ [
+ InlineKeyboardButton(
+ text=f"{title}{act}", callback_data=f"groupcb:{groupid}:{act}"
+ )
+ ]
+ )
+ except:
+ pass
+ if buttons:
+ await query.message.edit_text(
+ "Yᴏᴜʀ ᴄᴏɴɴᴇᴄᴛᴇᴅ ɢʀᴏᴜᴘ ᴅᴇᴛᴀɪʟs ;\n\n",
+ reply_markup=InlineKeyboardMarkup(buttons)
+ )
+ elif "gfilteralert" in query.data:
+ grp_id = query.message.chat.id
+ i = query.data.split(":")[1]
+ keyword = query.data.split(":")[2]
+ reply_text, btn, alerts, fileid = await find_gfilter('gfilters', keyword)
+ if alerts is not None:
+ alerts = ast.literal_eval(alerts)
+ alert = alerts[int(i)]
+ alert = alert.replace("\\n", "\n").replace("\\t", "\t")
+ await query.answer(alert, show_alert=True)
+ elif "alertmessage" in query.data:
+ grp_id = query.message.chat.id
+ i = query.data.split(":")[1]
+ keyword = query.data.split(":")[2]
+ reply_text, btn, alerts, fileid = await find_filter(grp_id, keyword)
+ if alerts is not None:
+ alerts = ast.literal_eval(alerts)
+ alert = alerts[int(i)]
+ alert = alert.replace("\\n", "\n").replace("\\t", "\t")
+ await query.answer(alert, show_alert=True)
+
+ if query.data.startswith("file"):
+ clicked = query.from_user.id
+ try:
+ typed = query.from_user.id
+ except:
+ typed = query.from_user.id
+ ident, file_id = query.data.split("#")
+ files_ = await get_file_details(file_id)
+ if not files_:
+ return await query.answer('Nᴏ sᴜᴄʜ ғɪʟᴇ ᴇxɪsᴛ.')
+ files = files_[0]
+ title = files.file_name
+ size = get_size(files.file_size)
+ f_caption = files.caption
+ settings = await get_settings(query.message.chat.id)
+ if CUSTOM_FILE_CAPTION:
+ try:
+ f_caption = CUSTOM_FILE_CAPTION.format(file_name='' if title is None else title,
+ file_size='' if size is None else size,
+ file_caption='' if f_caption is None else f_caption)
+ except Exception as e:
+ logger.exception(e)
+ f_caption = f_caption
+ if f_caption is None:
+ f_caption = f"{files.file_name}"
+
+ try:
+ if not await db.has_premium_access(clicked) and settings['is_shortlink']: #Don't change Anything without my permission @CodeluffyTG
+ if clicked == query.from_user.id:
+ temp.SHORT[clicked] = query.message.chat.id
+ await query.answer(url=f"https://telegram.me/{temp.U_NAME}?start=short_{file_id}")
+ return
+ else:
+ await query.answer(f"Hᴇʏ {query.from_user.first_name},\nTʜɪs Is Nᴏᴛ Yᴏᴜʀ Mᴏᴠɪᴇ Rᴇǫᴜᴇsᴛ.\nRᴇǫᴜᴇsᴛ Yᴏᴜʀ's !", show_alert=True)
+ else:
+ if clicked == query.from_user.id:
+ await query.answer(url=f"https://telegram.me/{temp.U_NAME}?start={ident}_{file_id}")
+ return
+ else:
+ await query.answer(f"Hᴇʏ {query.from_user.first_name},\nTʜɪs Is Nᴏᴛ Yᴏᴜʀ Mᴏᴠɪᴇ Rᴇǫᴜᴇsᴛ.\nRᴇǫᴜᴇsᴛ Yᴏᴜʀ's !", show_alert=True)
+ except UserIsBlocked:
+ await query.answer('Uɴʙʟᴏᴄᴋ ᴛʜᴇ ʙᴏᴛ ᴍᴀʜɴ !', show_alert=True)
+ except PeerIdInvalid:
+ await query.answer(url=f"https://telegram.me/{temp.U_NAME}?start={ident}_{file_id}")
+ except Exception as e:
+ await query.answer(url=f"https://telegram.me/{temp.U_NAME}?start={ident}_{file_id}")
+
+ elif query.data.startswith("sendfiles"):
+ clicked = query.from_user.id
+ ident, key = query.data.split("#")
+ settings = await get_settings(query.message.chat.id)
+ try:
+ if not await db.has_premium_access(clicked) and settings['is_shortlink']: # Don't Change anything without my permission @CoderluffyTG
+ await query.answer(url=f"https://telegram.me/{temp.U_NAME}?start=sendfiles1_{key}")
+ return
+ else:
+ await query.answer(url=f"https://telegram.me/{temp.U_NAME}?start=allfiles_{key}")
+ return
+ except UserIsBlocked:
+ await query.answer('Uɴʙʟᴏᴄᴋ ᴛʜᴇ ʙᴏᴛ ᴍᴀʜɴ !', show_alert=True)
+ except PeerIdInvalid:
+ await query.answer(url=f"https://telegram.me/{temp.U_NAME}?start=sendfiles3_{key}")
+ except Exception as e:
+ logger.exception(e)
+ await query.answer(url=f"https://telegram.me/{temp.U_NAME}?start=sendfiles4_{key}")
+
+ elif query.data.startswith("del"):
+ ident, file_id = query.data.split("#")
+ files_ = await get_file_details(file_id)
+ if not files_:
+ return await query.answer('Nᴏ sᴜᴄʜ ғɪʟᴇ ᴇxɪsᴛ.')
+ files = files_[0]
+ title = files.file_name
+ size = get_size(files.file_size)
+ f_caption = files.caption
+ settings = await get_settings(query.message.chat.id)
+ if CUSTOM_FILE_CAPTION:
+ try:
+ f_caption = CUSTOM_FILE_CAPTION.format(file_name='' if title is None else title,
+ file_size='' if size is None else size,
+ file_caption='' if f_caption is None else f_caption)
+ except Exception as e:
+ logger.exception(e)
+ f_caption = f_caption
+ if f_caption is None:
+ f_caption = f"{files.file_name}"
+ await query.answer(url=f"https://telegram.me/{temp.U_NAME}?start=file_{file_id}")
+
+ elif query.data.startswith("checksub"):
+ if AUTH_CHANNEL and not await is_req_subscribed(client, query):
+ await query.answer("Jᴏɪɴ ᴏᴜʀ ᴜᴘᴅᴀᴛᴇꜱ ᴄʜᴀɴɴᴇʟ ᴍᴀʜɴ! 😒", show_alert=True)
+ return
+ ident, kk, file_id = query.data.split("#")
+ await query.answer(url=f"https://t.me/{temp.U_NAME}?start={kk}_{file_id}")
+
+ elif query.data == "pages":
+ await query.answer()
+
+ elif query.data.startswith("send_fsall"):
+ temp_var, ident, key, offset = query.data.split("#")
+ search = BUTTON0.get(key)
+ if not search:
+ await query.answer(script.OLD_ALRT_TXT.format(query.from_user.first_name),show_alert=True)
+ return
+ files, n_offset, total = await get_search_results(query.message.chat.id, search, offset=int(offset), filter=True)
+ await send_all(client, query.from_user.id, files, ident, query.message.chat.id, query.from_user.first_name, query)
+ search = BUTTONS1.get(key)
+ files, n_offset, total = await get_search_results(query.message.chat.id, search, offset=int(offset), filter=True)
+ await send_all(client, query.from_user.id, files, ident, query.message.chat.id, query.from_user.first_name, query)
+ search = BUTTONS2.get(key)
+ files, n_offset, total = await get_search_results(query.message.chat.id, search, offset=int(offset), filter=True)
+ await send_all(client, query.from_user.id, files, ident, query.message.chat.id, query.from_user.first_name, query)
+ await query.answer(f"ʜᴇʏ {query.from_user.first_name}, ᴀʟʟ ꜰɪʟᴇꜱ ᴏɴ ᴛʜɪꜱ ᴘᴀɢᴇ ʜᴀꜱ ʙᴇᴇɴ ꜱᴇɴᴛ ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ᴛᴏ ʏᴏᴜ ʙʏ ᴅᴍ !", show_alert=True)
+
+ elif query.data.startswith("send_fall"):
+ temp_var, ident, key, offset = query.data.split("#")
+ if BUTTONS.get(key)!=None:
+ search = BUTTONS.get(key)
+ else:
+ search = FRESH.get(key)
+ if not search:
+ await query.answer(script.OLD_ALRT_TXT.format(query.from_user.first_name),show_alert=True)
+ return
+ files, n_offset, total = await get_search_results(query.message.chat.id, search, offset=int(offset), filter=True)
+ await send_all(client, query.from_user.id, files, ident, query.message.chat.id, query.from_user.first_name, query)
+ await query.answer(f"ʜᴇʏ {query.from_user.first_name}, ᴀʟʟ ꜰɪʟᴇꜱ ᴏɴ ᴛʜɪꜱ ᴘᴀɢᴇ ʜᴀꜱ ʙᴇᴇɴ ꜱᴇɴᴛ ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ᴛᴏ ʏᴏᴜ ʙʏ ᴅᴍ !", show_alert=True)
+
+ elif query.data.startswith("killfilesdq"):
+ ident, keyword = query.data.split("#")
+ #await query.message.edit_text(f"Fetching Files for your query {keyword} on DB... Please wait...")
+ files, total = await get_bad_files(keyword)
+ await query.message.edit_text("ꜰɪʟᴇ ᴅᴇʟᴇᴛɪᴏɴ ᴘʀᴏᴄᴇꜱꜱ ᴡɪʟʟ ꜱᴛᴀʀᴛ ɪɴ 5 ꜱᴇᴄᴏɴᴅꜱ !")
+ await asyncio.sleep(5)
+ deleted = 0
+ async with lock:
+ try:
+ for file in files:
+ file_ids = file.file_id
+ file_name = file.file_name
+ result = await Media.collection.delete_one({
+ '_id': file_ids,
+ })
+ if result.deleted_count:
+ logger.info(f'ꜰɪʟᴇ ꜰᴏᴜɴᴅ ꜰᴏʀ ʏᴏᴜʀ ǫᴜᴇʀʏ {keyword}! ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ᴅᴇʟᴇᴛᴇᴅ {file_name} ꜰʀᴏᴍ ᴅᴀᴛᴀʙᴀꜱᴇ.')
+ deleted += 1
+ if deleted % 20 == 0:
+ await query.message.edit_text(f"ᴘʀᴏᴄᴇꜱꜱ ꜱᴛᴀʀᴛᴇᴅ ꜰᴏʀ ᴅᴇʟᴇᴛɪɴɢ ꜰɪʟᴇꜱ ꜰʀᴏᴍ ᴅʙ. ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ᴅᴇʟᴇᴛᴇᴅ {str(deleted)} ꜰɪʟᴇꜱ ꜰʀᴏᴍ ᴅʙ ꜰᴏʀ ʏᴏᴜʀ ǫᴜᴇʀʏ {keyword} !\n\nᴘʟᴇᴀꜱᴇ ᴡᴀɪᴛ...")
+ except Exception as e:
+ logger.exception(e)
+ await query.message.edit_text(f'Error: {e}')
+ else:
+ await query.message.edit_text(f"ᴘʀᴏᴄᴇꜱꜱ ᴄᴏᴍᴘʟᴇᴛᴇᴅ ꜰᴏʀ ꜰɪʟᴇ ᴅᴇʟᴇᴛᴀᴛɪᴏɴ !\n\nꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ᴅᴇʟᴇᴛᴇᴅ {str(deleted)} ꜰɪʟᴇꜱ ꜰʀᴏᴍ ᴅʙ ꜰᴏʀ ʏᴏᴜʀ ǫᴜᴇʀʏ {keyword}.")
+
+ elif query.data.startswith("opnsetgrp"):
+ ident, grp_id = query.data.split("#")
+ userid = query.from_user.id if query.from_user else None
+ st = await client.get_chat_member(grp_id, userid)
+ if (
+ st.status != enums.ChatMemberStatus.ADMINISTRATOR
+ and st.status != enums.ChatMemberStatus.OWNER
+ and str(userid) not in ADMINS
+ ):
+ await query.answer("ʏᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ʀɪɢʜᴛꜱ ᴛᴏ ᴅᴏ ᴛʜɪꜱ !", show_alert=True)
+ return
+ title = query.message.chat.title
+ settings = await get_settings(grp_id)
+ if settings is not None:
+ buttons = [
+ [
+ InlineKeyboardButton('ʀᴇꜱᴜʟᴛ ᴘᴀɢᴇ',
+ callback_data=f'setgs#button#{settings["button"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ʙᴜᴛᴛᴏɴ' if settings["button"] else 'ᴛᴇxᴛ',
+ callback_data=f'setgs#button#{settings["button"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜰɪʟᴇ ꜱᴇɴᴅ ᴍᴏᴅᴇ', callback_data=f'setgs#botpm#{settings["botpm"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ꜱᴛᴀʀᴛ' if settings["botpm"] else 'ᴀᴜᴛᴏ',
+ callback_data=f'setgs#botpm#{settings["botpm"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜰɪʟᴇ ꜱᴇᴄᴜʀᴇ',
+ callback_data=f'setgs#file_secure#{settings["file_secure"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["file_secure"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#file_secure#{settings["file_secure"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ɪᴍᴅʙ ᴘᴏꜱᴛᴇʀ', callback_data=f'setgs#imdb#{settings["imdb"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["imdb"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#imdb#{settings["imdb"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜱᴘᴇʟʟ ᴄʜᴇᴄᴋ',
+ callback_data=f'setgs#spell_check#{settings["spell_check"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["spell_check"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#spell_check#{settings["spell_check"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴡᴇʟᴄᴏᴍᴇ ᴍꜱɢ', callback_data=f'setgs#welcome#{settings["welcome"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["welcome"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#welcome#{settings["welcome"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴀᴜᴛᴏ ᴅᴇʟᴇᴛᴇ',
+ callback_data=f'setgs#auto_delete#{settings["auto_delete"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["auto_delete"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#auto_delete#{settings["auto_delete"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴀᴜᴛᴏ ꜰɪʟᴛᴇʀ',
+ callback_data=f'setgs#auto_ffilter#{settings["auto_ffilter"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["auto_ffilter"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#auto_ffilter#{settings["auto_ffilter"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴍᴀx ʙᴜᴛᴛᴏɴꜱ',
+ callback_data=f'setgs#max_btn#{settings["max_btn"]}#{str(grp_id)}'),
+ InlineKeyboardButton('10' if settings["max_btn"] else f'{MAX_B_TN}',
+ callback_data=f'setgs#max_btn#{settings["max_btn"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜱʜᴏʀᴛʟɪɴᴋ',
+ callback_data=f'setgs#is_shortlink#{settings["is_shortlink"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["is_shortlink"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#is_shortlink#{settings["is_shortlink"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('⇋ ᴄʟᴏꜱᴇ ꜱᴇᴛᴛɪɴɢꜱ ᴍᴇɴᴜ ⇋',
+ callback_data='close_data'
+ )
+ ]
+ ]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=f"ᴄʜᴀɴɢᴇ ʏᴏᴜʀ ꜱᴇᴛᴛɪɴɢꜱ ꜰᴏʀ {title} ᴀꜱ ʏᴏᴜ ᴡɪꜱʜ ⚙",
+ disable_web_page_preview=True,
+ parse_mode=enums.ParseMode.HTML
+ )
+ await query.message.edit_reply_markup(reply_markup)
+
+ elif query.data.startswith("opnsetpm"):
+ ident, grp_id = query.data.split("#")
+ userid = query.from_user.id if query.from_user else None
+ st = await client.get_chat_member(grp_id, userid)
+ if (
+ st.status != enums.ChatMemberStatus.ADMINISTRATOR
+ and st.status != enums.ChatMemberStatus.OWNER
+ and str(userid) not in ADMINS
+ ):
+ await query.answer("Yᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ sᴜғғɪᴄɪᴀɴᴛ ʀɪɢʜᴛs ᴛᴏ ᴅᴏ ᴛʜɪs !", show_alert=True)
+ return
+ title = query.message.chat.title
+ settings = await get_settings(grp_id)
+ btn2 = [[
+ InlineKeyboardButton("ᴄʜᴇᴄᴋ ᴍʏ ᴅᴍ 🗳️", url=f"telegram.me/{temp.U_NAME}")
+ ]]
+ reply_markup = InlineKeyboardMarkup(btn2)
+ await query.message.edit_text(f"ʏᴏᴜʀ sᴇᴛᴛɪɴɢs ᴍᴇɴᴜ ғᴏʀ {title} ʜᴀs ʙᴇᴇɴ sᴇɴᴛ ᴛᴏ ʏᴏᴜ ʙʏ ᴅᴍ.")
+ await query.message.edit_reply_markup(reply_markup)
+ if settings is not None:
+ buttons = [
+ [
+ InlineKeyboardButton('ʀᴇꜱᴜʟᴛ ᴘᴀɢᴇ',
+ callback_data=f'setgs#button#{settings["button"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ʙᴜᴛᴛᴏɴ' if settings["button"] else 'ᴛᴇxᴛ',
+ callback_data=f'setgs#button#{settings["button"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜰɪʟᴇ ꜱᴇɴᴅ ᴍᴏᴅᴇ', callback_data=f'setgs#botpm#{settings["botpm"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ꜱᴛᴀʀᴛ' if settings["botpm"] else 'ᴀᴜᴛᴏ',
+ callback_data=f'setgs#botpm#{settings["botpm"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜰɪʟᴇ ꜱᴇᴄᴜʀᴇ',
+ callback_data=f'setgs#file_secure#{settings["file_secure"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["file_secure"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#file_secure#{settings["file_secure"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ɪᴍᴅʙ ᴘᴏꜱᴛᴇʀ', callback_data=f'setgs#imdb#{settings["imdb"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["imdb"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#imdb#{settings["imdb"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜱᴘᴇʟʟ ᴄʜᴇᴄᴋ',
+ callback_data=f'setgs#spell_check#{settings["spell_check"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["spell_check"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#spell_check#{settings["spell_check"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴡᴇʟᴄᴏᴍᴇ ᴍꜱɢ', callback_data=f'setgs#welcome#{settings["welcome"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["welcome"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#welcome#{settings["welcome"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴀᴜᴛᴏ ᴅᴇʟᴇᴛᴇ',
+ callback_data=f'setgs#auto_delete#{settings["auto_delete"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["auto_delete"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#auto_delete#{settings["auto_delete"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴀᴜᴛᴏ ꜰɪʟᴛᴇʀ',
+ callback_data=f'setgs#auto_ffilter#{settings["auto_ffilter"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["auto_ffilter"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#auto_ffilter#{settings["auto_ffilter"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴍᴀx ʙᴜᴛᴛᴏɴꜱ',
+ callback_data=f'setgs#max_btn#{settings["max_btn"]}#{str(grp_id)}'),
+ InlineKeyboardButton('10' if settings["max_btn"] else f'{MAX_B_TN}',
+ callback_data=f'setgs#max_btn#{settings["max_btn"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜱʜᴏʀᴛʟɪɴᴋ',
+ callback_data=f'setgs#is_shortlink#{settings["is_shortlink"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["is_shortlink"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#is_shortlink#{settings["is_shortlink"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('⇋ ᴄʟᴏꜱᴇ ꜱᴇᴛᴛɪɴɢꜱ ᴍᴇɴᴜ ⇋',
+ callback_data='close_data'
+ )
+ ]
+ ]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await client.send_message(
+ chat_id=userid,
+ text=f"ᴄʜᴀɴɢᴇ ʏᴏᴜʀ ꜱᴇᴛᴛɪɴɢꜱ ꜰᴏʀ {title} ᴀꜱ ʏᴏᴜ ᴡɪꜱʜ ⚙",
+ reply_markup=reply_markup,
+ disable_web_page_preview=True,
+ parse_mode=enums.ParseMode.HTML,
+ reply_to_message_id=query.message.id
+ )
+
+ elif query.data.startswith("show_option"):
+ ident, from_user = query.data.split("#")
+ btn = [[
+ InlineKeyboardButton("⚠️ ᴜɴᴀᴠᴀɪʟᴀʙʟᴇ ⚠️", callback_data=f"unavailable#{from_user}"),
+ InlineKeyboardButton("🟢 ᴜᴘʟᴏᴀᴅᴇᴅ 🟢", callback_data=f"uploaded#{from_user}")
+ ],[
+ InlineKeyboardButton("♻️ ᴀʟʀᴇᴀᴅʏ ᴀᴠᴀɪʟᴀʙʟᴇ ♻️", callback_data=f"already_available#{from_user}")
+ ]]
+ btn2 = [[
+ InlineKeyboardButton("ᴠɪᴇᴡ ꜱᴛᴀᴛᴜꜱ", url=f"{query.message.link}")
+ ]]
+ if query.from_user.id in ADMINS:
+ user = await client.get_users(from_user)
+ reply_markup = InlineKeyboardMarkup(btn)
+ await query.message.edit_reply_markup(reply_markup)
+ await query.answer("Hᴇʀᴇ ᴀʀᴇ ᴛʜᴇ ᴏᴘᴛɪᴏɴs !")
+ else:
+ await query.answer("Yᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ sᴜғғɪᴄɪᴀɴᴛ ʀɪɢʜᴛs ᴛᴏ ᴅᴏ ᴛʜɪs !", show_alert=True)
+
+ elif query.data.startswith("unavailable"):
+ ident, from_user = query.data.split("#")
+ btn = [[
+ InlineKeyboardButton("⚠️ ᴜɴᴀᴠᴀɪʟᴀʙʟᴇ ⚠️", callback_data=f"unalert#{from_user}")
+ ]]
+ btn2 = [[
+ InlineKeyboardButton('ᴊᴏɪɴ ᴄʜᴀɴɴᴇʟ', url=link.invite_link),
+ InlineKeyboardButton("ᴠɪᴇᴡ ꜱᴛᴀᴛᴜꜱ", url=f"{query.message.link}")
+ ]]
+ if query.from_user.id in ADMINS:
+ user = await client.get_users(from_user)
+ reply_markup = InlineKeyboardMarkup(btn)
+ content = query.message.text
+ await query.message.edit_text(f"{content}")
+ await query.message.edit_reply_markup(reply_markup)
+ await query.answer("Sᴇᴛ ᴛᴏ Uɴᴀᴠᴀɪʟᴀʙʟᴇ !")
+ try:
+ await client.send_message(chat_id=int(from_user), text=f"Hᴇʏ {user.mention}, Sᴏʀʀʏ Yᴏᴜʀ ʀᴇᴏ̨ᴜᴇsᴛ ɪs ᴜɴᴀᴠᴀɪʟᴀʙʟᴇ. Sᴏ ᴏᴜʀ ᴍᴏᴅᴇʀᴀᴛᴏʀs ᴄᴀɴ'ᴛ ᴜᴘʟᴏᴀᴅ ɪᴛ.", reply_markup=InlineKeyboardMarkup(btn2))
+ except UserIsBlocked:
+ await client.send_message(chat_id=int(SUPPORT_CHAT_ID), text=f"Hᴇʏ {user.mention}, Sᴏʀʀʏ Yᴏᴜʀ ʀᴇᴏ̨ᴜᴇsᴛ ɪs ᴜɴᴀᴠᴀɪʟᴀʙʟᴇ. Sᴏ ᴏᴜʀ ᴍᴏᴅᴇʀᴀᴛᴏʀs ᴄᴀɴ'ᴛ ᴜᴘʟᴏᴀᴅ ɪᴛ.\n\nNᴏᴛᴇ: Tʜɪs ᴍᴇssᴀɢᴇ ɪs sᴇɴᴛ ᴛᴏ ᴛʜɪs ɢʀᴏᴜᴘ ʙᴇᴄᴀᴜsᴇ ʏᴏᴜ'ᴠᴇ ʙʟᴏᴄᴋᴇᴅ ᴛʜᴇ ʙᴏᴛ. Tᴏ sᴇɴᴅ ᴛʜɪs ᴍᴇssᴀɢᴇ ᴛᴏ ʏᴏᴜʀ PM, Mᴜsᴛ ᴜɴʙʟᴏᴄᴋ ᴛʜᴇ ʙᴏᴛ.", reply_markup=InlineKeyboardMarkup(btn2))
+ else:
+ await query.answer("Yᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ sᴜғғɪᴄɪᴀɴᴛ ʀɪɢʜᴛs ᴛᴏ ᴅᴏ ᴛʜɪs !", show_alert=True)
+
+ elif query.data.startswith("uploaded"):
+ ident, from_user = query.data.split("#")
+ btn = [[
+ InlineKeyboardButton("🟢 ᴜᴘʟᴏᴀᴅᴇᴅ 🟢", callback_data=f"upalert#{from_user}")
+ ]]
+ btn2 = [[
+ InlineKeyboardButton('ᴊᴏɪɴ ᴄʜᴀɴɴᴇʟ', url=link.invite_link),
+ InlineKeyboardButton("ᴠɪᴇᴡ ꜱᴛᴀᴛᴜꜱ", url=f"{query.message.link}")
+ ],[
+ InlineKeyboardButton("🔍 ꜱᴇᴀʀᴄʜ ʜᴇʀᴇ 🔎", url="https://t.me/MoviesLinkSearchBot2")
+ ]]
+ if query.from_user.id in ADMINS:
+ user = await client.get_users(from_user)
+ reply_markup = InlineKeyboardMarkup(btn)
+ content = query.message.text
+ await query.message.edit_text(f"{content}")
+ await query.message.edit_reply_markup(reply_markup)
+ await query.answer("Sᴇᴛ ᴛᴏ Uᴘʟᴏᴀᴅᴇᴅ !")
+ try:
+ await client.send_message(chat_id=int(from_user), text=f"Hᴇʏ {user.mention}, Yᴏᴜʀ ʀᴇᴏ̨ᴜᴇsᴛ ʜᴀs ʙᴇᴇɴ ᴜᴘʟᴏᴀᴅᴇᴅ ʙʏ ᴏᴜʀ ᴍᴏᴅᴇʀᴀᴛᴏʀs. Kɪɴᴅʟʏ sᴇᴀʀᴄʜ ɪɴ ᴏᴜʀ Gʀᴏᴜᴘ.", reply_markup=InlineKeyboardMarkup(btn2))
+ except UserIsBlocked:
+ await client.send_message(chat_id=int(SUPPORT_CHAT_ID), text=f"Hᴇʏ {user.mention}, Yᴏᴜʀ ʀᴇᴏ̨ᴜᴇsᴛ ʜᴀs ʙᴇᴇɴ ᴜᴘʟᴏᴀᴅᴇᴅ ʙʏ ᴏᴜʀ ᴍᴏᴅᴇʀᴀᴛᴏʀs. Kɪɴᴅʟʏ sᴇᴀʀᴄʜ ɪɴ ᴏᴜʀ Gʀᴏᴜᴘ.\n\nNᴏᴛᴇ: Tʜɪs ᴍᴇssᴀɢᴇ ɪs sᴇɴᴛ ᴛᴏ ᴛʜɪs ɢʀᴏᴜᴘ ʙᴇᴄᴀᴜsᴇ ʏᴏᴜ'ᴠᴇ ʙʟᴏᴄᴋᴇᴅ ᴛʜᴇ ʙᴏᴛ. Tᴏ sᴇɴᴅ ᴛʜɪs ᴍᴇssᴀɢᴇ ᴛᴏ ʏᴏᴜʀ PM, Mᴜsᴛ ᴜɴʙʟᴏᴄᴋ ᴛʜᴇ ʙᴏᴛ.", reply_markup=InlineKeyboardMarkup(btn2))
+ else:
+ await query.answer("Yᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ sᴜғғɪᴄɪᴀɴᴛ ʀɪɢᴛs ᴛᴏ ᴅᴏ ᴛʜɪs !", show_alert=True)
+
+ elif query.data.startswith("already_available"):
+ ident, from_user = query.data.split("#")
+ btn = [[
+ InlineKeyboardButton("♻️ ᴀʟʀᴇᴀᴅʏ ᴀᴠᴀɪʟᴀʙʟᴇ ♻️", callback_data=f"alalert#{from_user}")
+ ]]
+ btn2 = [[
+ InlineKeyboardButton('ᴊᴏɪɴ ᴄʜᴀɴɴᴇʟ', url=link.invite_link),
+ InlineKeyboardButton("ᴠɪᴇᴡ ꜱᴛᴀᴛᴜꜱ", url=f"{query.message.link}")
+ ],[
+ InlineKeyboardButton("🔍 ꜱᴇᴀʀᴄʜ ʜᴇʀᴇ 🔎", url="https://t.me/MoviesLinkSearchBot2")
+ ]]
+ if query.from_user.id in ADMINS:
+ user = await client.get_users(from_user)
+ reply_markup = InlineKeyboardMarkup(btn)
+ content = query.message.text
+ await query.message.edit_text(f"{content}")
+ await query.message.edit_reply_markup(reply_markup)
+ await query.answer("Sᴇᴛ ᴛᴏ Aʟʀᴇᴀᴅʏ Aᴠᴀɪʟᴀʙʟᴇ !")
+ try:
+ await client.send_message(chat_id=int(from_user), text=f"Hᴇʏ {user.mention}, Yᴏᴜʀ ʀᴇᴏ̨ᴜᴇsᴛ ɪs ᴀʟʀᴇᴀᴅʏ ᴀᴠᴀɪʟᴀʙʟᴇ ᴏɴ ᴏᴜʀ ʙᴏᴛ's ᴅᴀᴛᴀʙᴀsᴇ. Kɪɴᴅʟʏ sᴇᴀʀᴄʜ ɪɴ ᴏᴜʀ Gʀᴏᴜᴘ.", reply_markup=InlineKeyboardMarkup(btn2))
+ except UserIsBlocked:
+ await client.send_message(chat_id=int(SUPPORT_CHAT_ID), text=f"Hᴇʏ {user.mention}, Yᴏᴜʀ ʀᴇᴏ̨ᴜᴇsᴛ ɪs ᴀʟʀᴇᴀᴅʏ ᴀᴠᴀɪʟᴀʙʟᴇ ᴏɴ ᴏᴜʀ ʙᴏᴛ's ᴅᴀᴛᴀʙᴀsᴇ. Kɪɴᴅʟʏ sᴇᴀʀᴄʜ ɪɴ ᴏᴜʀ Gʀᴏᴜᴘ.\n\nNᴏᴛᴇ: Tʜɪs ᴍᴇssᴀɢᴇ ɪs sᴇɴᴛ ᴛᴏ ᴛʜɪs ɢʀᴏᴜᴘ ʙᴇᴄᴀᴜsᴇ ʏᴏᴜ'ᴠᴇ ʙʟᴏᴄᴋᴇᴅ ᴛʜᴇ ʙᴏᴛ. Tᴏ sᴇɴᴅ ᴛʜɪs ᴍᴇssᴀɢᴇ ᴛᴏ ʏᴏᴜʀ PM, Mᴜsᴛ ᴜɴʙʟᴏᴄᴋ ᴛʜᴇ ʙᴏᴛ.", reply_markup=InlineKeyboardMarkup(btn2))
+ else:
+ await query.answer("Yᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ sᴜғғɪᴄɪᴀɴᴛ ʀɪɢᴛs ᴛᴏ ᴅᴏ ᴛʜɪs !", show_alert=True)
+
+ elif query.data.startswith("alalert"):
+ ident, from_user = query.data.split("#")
+ if int(query.from_user.id) == int(from_user):
+ user = await client.get_users(from_user)
+ await query.answer(f"Hᴇʏ {user.first_name}, Yᴏᴜʀ Rᴇᴏ̨ᴜᴇsᴛ ɪs Aʟʀᴇᴀᴅʏ Aᴠᴀɪʟᴀʙʟᴇ !", show_alert=True)
+ else:
+ await query.answer("Yᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ sᴜғғɪᴄɪᴀɴᴛ ʀɪɢᴛs ᴛᴏ ᴅᴏ ᴛʜɪs !", show_alert=True)
+
+ elif query.data.startswith("upalert"):
+ ident, from_user = query.data.split("#")
+ if int(query.from_user.id) == int(from_user):
+ user = await client.get_users(from_user)
+ await query.answer(f"Hᴇʏ {user.first_name}, Yᴏᴜʀ Rᴇᴏ̨ᴜᴇsᴛ ɪs Uᴘʟᴏᴀᴅᴇᴅ !", show_alert=True)
+ else:
+ await query.answer("Yᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ sᴜғғɪᴄɪᴀɴᴛ ʀɪɢᴛs ᴛᴏ ᴅᴏ ᴛʜɪs !", show_alert=True)
+
+ elif query.data.startswith("unalert"):
+ ident, from_user = query.data.split("#")
+ if int(query.from_user.id) == int(from_user):
+ user = await client.get_users(from_user)
+ await query.answer(f"Hᴇʏ {user.first_name}, Yᴏᴜʀ Rᴇᴏ̨ᴜᴇsᴛ ɪs Uɴᴀᴠᴀɪʟᴀʙʟᴇ !", show_alert=True)
+ else:
+ await query.answer("Yᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ sᴜғғɪᴄɪᴀɴᴛ ʀɪɢᴛs ᴛᴏ ᴅᴏ ᴛʜɪs !", show_alert=True)
+
+ elif lazyData.startswith("generate_stream_link"):
+ _, file_id = lazyData.split(":")
+ try:
+ user_id = query.from_user.id
+ username = query.from_user.mention
+ log_msg = await client.send_cached_media(
+ chat_id=LOG_CHANNEL,
+ file_id=file_id,
+ )
+ fileName = {quote_plus(get_name(log_msg))}
+ lazy_stream = f"{URL}watch/{str(log_msg.id)}/{quote_plus(get_name(log_msg))}?hash={get_hash(log_msg)}"
+ lazy_download = f"{URL}{str(log_msg.id)}/{quote_plus(get_name(log_msg))}?hash={get_hash(log_msg)}"
+ hp_link = await get_shortlink(lazy_download)
+ ph_link = await get_shortlink(lazy_stream)
+ buttons = []
+ if await db.has_premium_access(user_id):
+ buttons = [[
+ InlineKeyboardButton("🚀 ꜰᴀꜱᴛ ᴅᴏᴡɴʟᴏᴀᴅ", url=lazy_download),
+ InlineKeyboardButton("ᴡᴀᴛᴄʜ ᴏɴʟɪɴᴇ 🧿", url=lazy_stream)
+ ],[
+ InlineKeyboardButton('📌 ᴊᴏɪɴ ᴜᴘᴅᴀᴛᴇꜱ ᴄʜᴀɴɴᴇʟ 📌', url='https://t.me/HP_MOVIES_WORLD')
+ ]]
+ else:
+ await query.answer("🚸 ɴᴏᴛᴇ :\nᴀᴅ-ꜰʀᴇᴇ ꜱᴇʀᴠɪᴄᴇ ɪꜱ ᴏɴʟʏ ꜰᴏʀ ᴘʀᴇᴍɪᴜᴍ ᴜꜱᴇʀꜱ.\n\nᴛᴏ ᴋɴᴏᴡ ᴍᴏʀᴇ ᴄʜᴇᴄᴋ ᴘʟᴀɴꜱ.", show_alert=True)
+ await query.message.reply_text(
+ text="‼️ ᴡᴀɴᴛ ᴛᴏ ʀᴇᴍᴏᴠᴇ ᴀᴅꜱ ?\n\n✅ ᴘᴜʀᴄʜᴀꜱᴇ ᴘʀᴇᴍɪᴜᴍ ᴀɴᴅ ᴇɴᴊᴏʏ ᴀᴅ-ꜰʀᴇᴇ ᴇxᴘᴇʀɪᴇɴᴄᴇ.",
+ quote=True,
+ disable_web_page_preview=True,
+ reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("💸 ᴄʜᴇᴄᴋᴏᴜᴛ ᴘʀᴇᴍɪᴜᴍ ᴘʟᴀɴꜱ 💸", callback_data='seeplans')]]))
+ buttons = [[
+ InlineKeyboardButton("🚀 ꜰᴀꜱᴛ ᴅᴏᴡɴʟᴏᴀᴅ", url=hp_link),
+ InlineKeyboardButton("ᴡᴀᴛᴄʜ ᴏɴʟɪɴᴇ 🧿", url=ph_link)
+ ],[
+ InlineKeyboardButton('❗ʜᴏᴡ ᴛᴏ ᴏᴘᴇɴ ʟɪɴᴋ❗', url=STREAMHTO)
+ ]]
+
+ query.message.reply_markup = query.message.reply_markup or []
+ query.message.reply_markup.inline_keyboard.pop(0)
+ query.message.reply_markup.inline_keyboard.insert(0, buttons)
+ await query.message.edit_reply_markup(InlineKeyboardMarkup(buttons))
+ await log_msg.reply_text(
+ text=f"#LinkGenrated\n\nIᴅ : {user_id}
\nUꜱᴇʀɴᴀᴍᴇ : {username}\n\nNᴀᴍᴇ : {fileName}",
+ quote=True,
+ disable_web_page_preview=True,
+ reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("🚀 ꜰᴀꜱᴛ ᴅᴏᴡɴʟᴏᴀᴅ", url=hp_link),
+ InlineKeyboardButton('ᴡᴀᴛᴄʜ ᴏɴʟɪɴᴇ 🧿', url=ph_link)]]))
+ except Exception as e:
+ print(e) # print the error message
+ await query.answer(f"⚠️ SOMETHING WENT WRONG \n\n{e}", show_alert=True)
+ return
+
+ # don't change anything without contacting me @creatorrio
+
+ elif query.data == "pagesn1":
+ await query.answer(text=script.PAGE_TXT, show_alert=True)
+
+ elif query.data == "reqinfo":
+ await query.answer(text=script.REQINFO, show_alert=True)
+
+ elif query.data == "select":
+ await query.answer(text=script.SELECT, show_alert=True)
+
+ elif query.data == "sinfo":
+ await query.answer(text=script.SINFO, show_alert=True)
+
+ elif query.data == "start":
+ buttons = [[
+ InlineKeyboardButton('☆ ᴀᴅᴅ ᴍᴇ ᴛᴏ ʏᴏᴜʀ ɢʀᴏᴜᴘ ☆', url=f'http://telegram.me/{temp.U_NAME}?startgroup=true')
+ ],[
+ InlineKeyboardButton('💸 ᴇᴀʀɴ ᴍᴏɴᴇʏ 💸', callback_data="shortlink_info"),
+ InlineKeyboardButton('• ᴜᴘᴅᴀᴛᴇꜱ •', callback_data='channels')
+ ],[
+ InlineKeyboardButton('• ᴄᴏᴍᴍᴀɴᴅꜱ •', callback_data='help'),
+ InlineKeyboardButton('• ᴀʙᴏᴜᴛ •', callback_data='about')
+ ],[
+ InlineKeyboardButton('✨ ʙᴜʏ ꜱᴜʙꜱᴄʀɪᴘᴛɪᴏɴ : ʀᴇᴍᴏᴠᴇ ᴀᴅꜱ ✨', callback_data="premium_info")
+ ]]
+
+ reply_markup = InlineKeyboardMarkup(buttons)
+ current_time = datetime.now(pytz.timezone(TIMEZONE))
+ curr_time = current_time.hour
+ if curr_time < 12:
+ gtxt = "ɢᴏᴏᴅ ᴍᴏʀɴɪɴɢ 👋"
+ elif curr_time < 17:
+ gtxt = "ɢᴏᴏᴅ ᴀғᴛᴇʀɴᴏᴏɴ 👋"
+ elif curr_time < 21:
+ gtxt = "ɢᴏᴏᴅ ᴇᴠᴇɴɪɴɢ 👋"
+ else:
+ gtxt = "ɢᴏᴏᴅ ɴɪɢʜᴛ 👋"
+ await query.message.edit_text(
+ text=script.START_TXT.format(query.from_user.mention, gtxt, temp.U_NAME, temp.B_NAME),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+ await query.answer(MSG_ALRT)
+
+ elif query.data == "purchase":
+ buttons = [[
+ InlineKeyboardButton('💵 ᴘᴀʏ ᴠɪᴀ ᴜᴘɪ ɪᴅ 💵', callback_data='upi_info')
+ ],[
+ InlineKeyboardButton('📸 ꜱᴄᴀɴ ǫʀ ᴄᴏᴅᴇ 📸', callback_data='qr_info')
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='premium_info')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.PURCHASE_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "upi_info":
+ buttons = [[
+ InlineKeyboardButton('📲 ꜱᴇɴᴅ ᴘᴀʏᴍᴇɴᴛ ꜱᴄʀᴇᴇɴꜱʜᴏᴛ ʜᴇʀᴇ', user_id=int(767250672))
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='purchase')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.UPI_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "qr_info":
+ buttons = [[
+ InlineKeyboardButton('📲 ꜱᴇɴᴅ ᴘᴀʏᴍᴇɴᴛ ꜱᴄʀᴇᴇɴꜱʜᴏᴛ ʜᴇʀᴇ', user_id=int(767250672))
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='purchase')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.QR_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "seeplans":
+ btn = [[
+ InlineKeyboardButton('📲 ꜱᴇɴᴅ ᴘᴀʏᴍᴇɴᴛ ꜱᴄʀᴇᴇɴꜱʜᴏᴛ', user_id=int(767250672))
+ ],[
+ InlineKeyboardButton('❌ ᴄʟᴏꜱᴇ ❌', callback_data='close_data')
+ ]]
+ reply_markup = InlineKeyboardMarkup(btn)
+ await query.message.reply_photo(
+ photo=(SUBSCRIPTION),
+ caption=script.PREPLANS_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ # Thanks to @CoderluffyTG for fixing this
+ elif query.data == "give_trial":
+ user_id = query.from_user.id
+ has_free_trial = await db.check_trial_status(user_id)
+ if has_free_trial:
+ await query.answer("🚸 ʏᴏᴜ'ᴠᴇ ᴀʟʀᴇᴀᴅʏ ᴄʟᴀɪᴍᴇᴅ ʏᴏᴜʀ ꜰʀᴇᴇ ᴛʀɪᴀʟ ᴏɴᴄᴇ !\n\n📌 ᴄʜᴇᴄᴋᴏᴜᴛ ᴏᴜʀ ᴘʟᴀɴꜱ ʙʏ : /plan", show_alert=True)
+ return
+ else:
+ await db.give_free_trial(user_id)
+ await query.message.reply_text(
+ text="🥳 ᴄᴏɴɢʀᴀᴛᴜʟᴀᴛɪᴏɴꜱ\n\n🎉 ʏᴏᴜ ᴄᴀɴ ᴜsᴇ ꜰʀᴇᴇ ᴛʀᴀɪʟ ꜰᴏʀ 5 ᴍɪɴᴜᴛᴇs ꜰʀᴏᴍ ɴᴏᴡ !",
+ quote=False,
+ disable_web_page_preview=True,
+ reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("💸 ᴄʜᴇᴄᴋᴏᴜᴛ ᴘʀᴇᴍɪᴜᴍ ᴘʟᴀɴꜱ 💸", callback_data='seeplans')]]))
+ return
+
+ elif query.data == "premium_info":
+ buttons = [[
+ InlineKeyboardButton('• ꜰʀᴇᴇ ᴛʀɪᴀʟ •', callback_data='free')
+ ],[
+ InlineKeyboardButton('• ʙʀᴏɴᴢᴇ •', callback_data='broze'),
+ InlineKeyboardButton('• ꜱɪʟᴠᴇʀ •', callback_data='silver')
+ ],[
+ InlineKeyboardButton('• ɢᴏʟᴅ •', callback_data='gold'),
+ InlineKeyboardButton('• ᴘʟᴀᴛɪɴᴜᴍ •', callback_data='platinum')
+ ],[
+ InlineKeyboardButton('• ᴅɪᴀᴍᴏɴᴅ •', callback_data='diamond'),
+ InlineKeyboardButton('• ᴏᴛʜᴇʀ •', callback_data='other')
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ᴛᴏ ʜᴏᴍᴇ ⇋', callback_data='start')
+ ]]
+
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.PLAN_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+ elif query.data == "free":
+ buttons = [[
+ InlineKeyboardButton('⚜️ ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ɢᴇᴛ ꜰʀᴇᴇ ᴛʀɪᴀʟ', callback_data="give_trial")
+ ],[
+ InlineKeyboardButton('⋞ ʙᴀᴄᴋ', callback_data='other'),
+ InlineKeyboardButton('1 / 7', callback_data='pagesn1'),
+ InlineKeyboardButton('ɴᴇxᴛ ⋟', callback_data='broze')
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='premium_info')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.FREE_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "broze":
+ buttons = [[
+ InlineKeyboardButton('🔐 ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ʙᴜʏ ᴘʀᴇᴍɪᴜᴍ', callback_data='purchase')
+ ],[
+ InlineKeyboardButton('⋞ ʙᴀᴄᴋ', callback_data='free'),
+ InlineKeyboardButton('2 / 7', callback_data='pagesn1'),
+ InlineKeyboardButton('ɴᴇxᴛ ⋟', callback_data='silver')
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='premium_info')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.BRONZE_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "silver":
+ buttons = [[
+ InlineKeyboardButton('🔐 ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ʙᴜʏ ᴘʀᴇᴍɪᴜᴍ', callback_data='purchase')
+ ],[
+ InlineKeyboardButton('⋞ ʙᴀᴄᴋ', callback_data='broze'),
+ InlineKeyboardButton('3 / 7', callback_data='pagesn1'),
+ InlineKeyboardButton('ɴᴇxᴛ ⋟', callback_data='gold')
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='premium_info')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.SILVER_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "gold":
+ buttons = [[
+ InlineKeyboardButton('🔐 ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ʙᴜʏ ᴘʀᴇᴍɪᴜᴍ', callback_data='purchase')
+ ],[
+ InlineKeyboardButton('⋞ ʙᴀᴄᴋ', callback_data='silver'),
+ InlineKeyboardButton('4 / 7', callback_data='pagesn1'),
+ InlineKeyboardButton('ɴᴇxᴛ ⋟', callback_data='platinum')
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='premium_info')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.GOLD_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "platinum":
+ buttons = [[
+ InlineKeyboardButton('🔐 ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ʙᴜʏ ᴘʀᴇᴍɪᴜᴍ', callback_data='purchase')
+ ],[
+ InlineKeyboardButton('⋞ ʙᴀᴄᴋ', callback_data='gold'),
+ InlineKeyboardButton('5 / 7', callback_data='pagesn1'),
+ InlineKeyboardButton('ɴᴇxᴛ ⋟', callback_data='diamond')
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='premium_info')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.PLATINUM_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+
+ elif query.data == "diamond":
+ buttons = [[
+ InlineKeyboardButton('🔐 ᴄʟɪᴄᴋ ʜᴇʀᴇ ᴛᴏ ʙᴜʏ ᴘʀᴇᴍɪᴜᴍ', callback_data='purchase')
+ ],[
+ InlineKeyboardButton('⋞ ʙᴀᴄᴋ', callback_data='platinum'),
+ InlineKeyboardButton('6 / 7', callback_data='pagesn1'),
+ InlineKeyboardButton('ɴᴇxᴛ ⋟', callback_data='other')
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='premium_info')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.DIAMOND_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "other":
+ buttons = [[
+ InlineKeyboardButton('☎️ ᴄᴏɴᴛᴀᴄᴛ ᴏᴡɴᴇʀ ᴛᴏ ᴋɴᴏᴡ ᴍᴏʀᴇ', user_id=int(767250672))
+ ],[
+ InlineKeyboardButton('⋞ ʙᴀᴄᴋ', callback_data='diamond'),
+ InlineKeyboardButton('7 / 7', callback_data='pagesn1'),
+ InlineKeyboardButton('ɴᴇxᴛ ⋟', callback_data='free')
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='premium_info')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.OTHER_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+
+ elif query.data == "channels":
+ buttons = [[
+ InlineKeyboardButton('⚜️ ᴜᴘᴅᴀᴛᴇꜱ ᴄʜᴀɴɴᴇʟ ⚜️', url='https://t.me/HP_MOVIES_WORLD')
+ ],[
+ InlineKeyboardButton('🔍 ɢʀᴏᴜᴘ¹', url='https://t.me/MoviesLinkSearchBot2'),
+ InlineKeyboardButton('ɢʀᴏᴜᴘ² 🔎', url='https://t.me/MoviesLinkSearchBot3')
+ ],[
+ InlineKeyboardButton('✉️ ʀᴇǫᴜᴇꜱᴛ ɢʀᴏᴜᴘ ✉️', url='https://t.me/HpMovieRequest')
+ ],[
+ InlineKeyboardButton('⇇ ʙᴀᴄᴋ', callback_data='start'),
+ InlineKeyboardButton('ꜱᴜᴘᴘᴏʀᴛ 👮', url='https://t.me/HpRequestBot')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.CHANNELS.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "users":
+ buttons = [[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='help')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.USERS_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "group":
+ buttons = [[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='help')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.GROUP_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "admic":
+ if query.from_user.id not in ADMINS:
+ return await query.answer("⚠️ ʏᴏᴜ'ʀᴇ ɴᴏᴛ ᴀ ʙᴏᴛ ᴀᴅᴍɪɴ !", show_alert=True)
+ buttons = [[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='help')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.ADMIC_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+
+ elif query.data == "help":
+ buttons = [[
+ InlineKeyboardButton('• ʙᴏᴛ ᴀᴅᴍɪɴ ᴄᴏᴍᴍᴀɴᴅꜱ •', callback_data='admic')
+ ], [
+ InlineKeyboardButton('• ᴜꜱᴇʀ •', callback_data='users'),
+ InlineKeyboardButton('• ɢʀᴏᴜᴘ •', callback_data='group')
+ ], [
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ᴛᴏ ʜᴏᴍᴇ ⇋', callback_data='start')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.HELP_TXT.format(query.from_user.mention),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+ elif query.data == "about":
+ buttons = [[
+ InlineKeyboardButton('‼️ ᴅɪꜱᴄʟᴀɪᴍᴇʀ ‼️', callback_data='disclaimer'),
+ ], [
+ InlineKeyboardButton ('• ᴄʀᴇᴅɪᴛꜱ ᴛᴏ ᴛʜᴇ ᴅᴇᴠᴇʟᴏᴘᴇʀꜱ •', callback_data='credits'),
+ ], [
+ InlineKeyboardButton('• ᴏᴡɴᴇʀ •', user_id=int(767250672)),
+ InlineKeyboardButton('• ꜱᴛᴀᴛꜱ •', callback_data='stats')
+ ], [
+ InlineKeyboardButton('🛰️ ʀᴇɴᴅᴇʀɪɴɢ ꜱᴛᴀᴛᴜꜱ ☁️',callback_data='rendr')
+ ], [
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ᴛᴏ ʜᴏᴍᴇ ⇋', callback_data='start')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.ABOUT_TXT.format(temp.B_NAME),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+ elif query.data == "rendr":
+ await query.answer("⚡️ ʟɪᴠᴇ sʏsᴛᴇᴍ sᴛᴀᴛᴜs ⚡️\n\n❂ ʀᴀᴍ ●●●●●●●◌◌◌\n✇ ᴄᴘᴜ ●●●●●●●◌◌◌\n✪ ᴅᴀᴛᴀ ᴛʀᴀꜰɪᴄs ●●●●◌◌◌◌◌◌ 🛰\n\nᴠ4.2 [sᴛᴀʙʟᴇ] """, show_alert=True)
+
+ elif query.data == "credits":
+ buttons = [[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ⇋', callback_data='about')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_text(
+ text=script.CREDITS_TXT,
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "stats":
+ buttons = [[
+ InlineKeyboardButton('⇇ ʙᴀᴄᴋ', callback_data='about'),
+ InlineKeyboardButton('⟲ ʀᴇғʀᴇsʜ', callback_data='rfrsh')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ total = await Media.count_documents()
+ users = await db.total_users_count()
+ chats = await db.total_chat_count()
+ monsize = await db.get_db_size()
+ free = 536870912 - monsize
+ monsize = get_size(monsize)
+ free = get_size(free)
+ await query.message.edit_text(
+ text=script.STATUS_TXT.format(total, users, chats, monsize, free),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+ elif query.data == "rfrsh":
+ await query.answer("ꜰᴇᴛᴄʜɪɴɢ ᴍᴏɴɢᴏ-ᴅʙ ᴅᴀᴛᴀʙᴀꜱᴇ...")
+ buttons = [[
+ InlineKeyboardButton('⇇ ʙᴀᴄᴋ', callback_data='about'),
+ InlineKeyboardButton('⟲ ʀᴇғʀᴇsʜ', callback_data='rfrsh')
+ ]]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ total = await Media.count_documents()
+ users = await db.total_users_count()
+ chats = await db.total_chat_count()
+ monsize = await db.get_db_size()
+ free = 536870912 - monsize
+ monsize = get_size(monsize)
+ free = get_size(free)
+ await query.message.edit_text(
+ text=script.STATUS_TXT.format(total, users, chats, monsize, free),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+ elif query.data == "shortlink_info":
+ btn = [[
+ InlineKeyboardButton("1 / 3", callback_data="pagesn1"),
+ InlineKeyboardButton("ɴᴇxᴛ ⋟", callback_data="shortlink_info2")
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ᴛᴏ ʜᴏᴍᴇ ⇋', callback_data='start')
+ ]]
+ reply_markup = InlineKeyboardMarkup(btn)
+ await query.message.edit_text(
+ text=(script.SHORTLINK_INFO),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+ elif query.data == "shortlink_info2":
+ btn = [[
+ InlineKeyboardButton("⋞ ʙᴀᴄᴋ", callback_data="shortlink_info"),
+ InlineKeyboardButton("2 / 3", callback_data="pagesn1"),
+ InlineKeyboardButton("ɴᴇxᴛ ⋟", callback_data="shortlink_info3")
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ᴛᴏ ʜᴏᴍᴇ ⇋', callback_data='start')
+ ]]
+ reply_markup = InlineKeyboardMarkup(btn)
+ await query.message.edit_text(
+ text=(script.SHORTLINK_INFO2),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+ elif query.data == "shortlink_info3":
+ btn = [[
+ InlineKeyboardButton("⋞ ʙᴀᴄᴋ", callback_data="shortlink_info2"),
+ InlineKeyboardButton("3 / 3", callback_data="pagesn1")
+ ],[
+ InlineKeyboardButton('⇋ ʙᴀᴄᴋ ᴛᴏ ʜᴏᴍᴇ ⇋', callback_data='start')
+ ]]
+ reply_markup = InlineKeyboardMarkup(btn)
+ await query.message.edit_text(
+ text=(script.SHORTLINK_INFO3),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+
+ elif query.data == "disclaimer":
+ btn = [[
+ InlineKeyboardButton("⇋ ʙᴀᴄᴋ ⇋", callback_data="about")
+ ]]
+ reply_markup = InlineKeyboardMarkup(btn)
+ await query.message.edit_text(
+ text=(script.DISCLAIMER_TXT),
+ reply_markup=reply_markup,
+ parse_mode=enums.ParseMode.HTML
+ )
+ elif query.data.startswith("setgs"):
+ ident, set_type, status, grp_id = query.data.split("#")
+ grpid = await active_connection(str(query.from_user.id))
+
+ if str(grp_id) != str(grpid):
+ await query.message.edit("Yᴏᴜʀ Aᴄᴛɪᴠᴇ Cᴏɴɴᴇᴄᴛɪᴏɴ Hᴀs Bᴇᴇɴ Cʜᴀɴɢᴇᴅ. Gᴏ Tᴏ /connections ᴀɴᴅ ᴄʜᴀɴɢᴇ ʏᴏᴜʀ ᴀᴄᴛɪᴠᴇ ᴄᴏɴɴᴇᴄᴛɪᴏɴ.")
+ return await query.answer(MSG_ALRT)
+
+ if set_type == 'is_shortlink' and query.from_user.id not in ADMINS:
+ return await query.answer(text=f"Hey {query.from_user.first_name}, You can't change shortlink settings for your group !\n\nIt's an admin only setting !", show_alert=True)
+
+ if status == "True":
+ await save_group_settings(grpid, set_type, False)
+ else:
+ await save_group_settings(grpid, set_type, True)
+
+ settings = await get_settings(grpid)
+
+ if settings is not None:
+ buttons = [
+ [
+ InlineKeyboardButton('ʀᴇꜱᴜʟᴛ ᴘᴀɢᴇ',
+ callback_data=f'setgs#button#{settings["button"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ʙᴜᴛᴛᴏɴ' if settings["button"] else 'ᴛᴇxᴛ',
+ callback_data=f'setgs#button#{settings["button"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜰɪʟᴇ ꜱᴇɴᴅ ᴍᴏᴅᴇ', callback_data=f'setgs#botpm#{settings["botpm"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ꜱᴛᴀʀᴛ' if settings["botpm"] else 'ᴀᴜᴛᴏ',
+ callback_data=f'setgs#botpm#{settings["botpm"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜰɪʟᴇ ꜱᴇᴄᴜʀᴇ',
+ callback_data=f'setgs#file_secure#{settings["file_secure"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["file_secure"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#file_secure#{settings["file_secure"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ɪᴍᴅʙ ᴘᴏꜱᴛᴇʀ', callback_data=f'setgs#imdb#{settings["imdb"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["imdb"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#imdb#{settings["imdb"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜱᴘᴇʟʟ ᴄʜᴇᴄᴋ',
+ callback_data=f'setgs#spell_check#{settings["spell_check"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["spell_check"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#spell_check#{settings["spell_check"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴡᴇʟᴄᴏᴍᴇ ᴍꜱɢ', callback_data=f'setgs#welcome#{settings["welcome"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["welcome"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#welcome#{settings["welcome"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴀᴜᴛᴏ ᴅᴇʟᴇᴛᴇ',
+ callback_data=f'setgs#auto_delete#{settings["auto_delete"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["auto_delete"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#auto_delete#{settings["auto_delete"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴀᴜᴛᴏ ꜰɪʟᴛᴇʀ',
+ callback_data=f'setgs#auto_ffilter#{settings["auto_ffilter"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["auto_ffilter"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#auto_ffilter#{settings["auto_ffilter"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ᴍᴀx ʙᴜᴛᴛᴏɴꜱ',
+ callback_data=f'setgs#max_btn#{settings["max_btn"]}#{str(grp_id)}'),
+ InlineKeyboardButton('10' if settings["max_btn"] else f'{MAX_B_TN}',
+ callback_data=f'setgs#max_btn#{settings["max_btn"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('ꜱʜᴏʀᴛʟɪɴᴋ',
+ callback_data=f'setgs#is_shortlink#{settings["is_shortlink"]}#{str(grp_id)}'),
+ InlineKeyboardButton('ᴇɴᴀʙʟᴇ' if settings["is_shortlink"] else 'ᴅɪꜱᴀʙʟᴇ',
+ callback_data=f'setgs#is_shortlink#{settings["is_shortlink"]}#{str(grp_id)}')
+ ],
+ [
+ InlineKeyboardButton('⇋ ᴄʟᴏꜱᴇ ꜱᴇᴛᴛɪɴɢꜱ ᴍᴇɴᴜ ⇋',
+ callback_data='close_data'
+ )
+ ]
+ ]
+ reply_markup = InlineKeyboardMarkup(buttons)
+ await query.message.edit_reply_markup(reply_markup)
+ await query.answer(MSG_ALRT)
+
+
+async def auto_filter(client, msg, spoll=False):
+ curr_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ # reqstr1 = msg.from_user.id if msg.from_user else 0
+ # reqstr = await client.get_users(reqstr1)
+
+ if not spoll:
+ message = msg
+ if message.text.startswith("/"): return # ignore commands
+ if re.findall("((^\/|^,|^!|^\.|^[\U0001F600-\U000E007F]).*)", message.text):
+ return
+ if len(message.text) < 100:
+ search = message.text
+ m=await message.reply_sticker("CAACAgQAAxkBAAEKSxplArIUActk4ORQuFn3DHFvBqQCOgACBQMAAnJxFyVYcSIunXgGjjAE",
+ reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(f'Seaching for {search} 🔎', url=f"https://t.me/HP_MOVIES_WORLD")]])
+ )
+ search = search.lower()
+ find = search.split(" ")
+ search = ""
+ removes = ["in","upload", "series", "full", "horror", "thriller", "mystery", "print", "file"]
+ for x in find:
+ if x in removes:
+ continue
+ else:
+ search = search + x + " "
+ search = re.sub(r"\b(pl(i|e)*?(s|z+|ease|se|ese|(e+)s(e)?)|((send|snd|giv(e)?|gib)(\sme)?)|movie(s)?|new|latest|bro|bruh|broh|helo|that|find|dubbed|link|venum|iruka|pannunga|pannungga|anuppunga|anupunga|anuppungga|anupungga|film|undo|kitti|kitty|tharu|kittumo|kittum|movie|any(one)|with\ssubtitle(s)?)", "", search, flags=re.IGNORECASE)
+ search = re.sub(r"\s+", " ", search).strip()
+ search = search.replace("-", " ")
+ search = search.replace(":","")
+ files, offset, total_results = await get_search_results(message.chat.id ,search, offset=0, filter=True)
+ settings = await get_settings(message.chat.id)
+ if not files:
+ await m.delete()
+ if settings["spell_check"]:
+ return await advantage_spell_chok(client, msg)
+ else:
+ # if NO_RESULTS_MSG:
+ # await client.send_message(chat_id=LOG_CHANNEL, text=(script.NORSLTS.format(reqstr.id, reqstr.mention, search)))
+ return
+ else:
+ return
+ else:
+ message = msg.message.reply_to_message # msg will be callback query
+ search, files, offset, total_results = spoll
+ m=await message.reply_sticker("CAACAgQAAxkBAAEKSxplArIUActk4ORQuFn3DHFvBqQCOgACBQMAAnJxFyVYcSIunXgGjjAE",
+ reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(f'Seaching for {search} 🔎', url=f"https://t.me/HP_MOVIES_WORLD")]])
+ )
+ settings = await get_settings(message.chat.id)
+ await msg.message.delete()
+ pre = 'filep' if settings['file_secure'] else 'file'
+ key = f"{message.chat.id}-{message.id}"
+ FRESH[key] = search
+ temp.GETALL[key] = files
+ temp.SHORT[message.from_user.id] = message.chat.id
+ if settings["button"]:
+ btn = [
+ [
+ InlineKeyboardButton(
+ text=f"📁 {get_size(file.file_size)} ▷ {' '.join(filter(lambda x: not x.startswith('[') and not x.startswith('@') and not x.startswith('www.'), file.file_name.split()))}", callback_data=f'{pre}#{file.file_id}'
+ ),
+ ]
+ for file in files
+ ]
+ btn.insert(0,
+ [
+ InlineKeyboardButton("⇈ ꜱᴇʟᴇᴄᴛ ᴏᴘᴛɪᴏɴꜱ ʜᴇʀᴇ ⇈", 'reqinfo')
+ ]
+ )
+ btn.insert(0,
+ [
+ InlineKeyboardButton(f'ǫᴜᴀʟɪᴛʏ', callback_data=f"qualities#{key}"),
+ InlineKeyboardButton("ʟᴀɴɢᴜᴀɢᴇ", callback_data=f"languages#{key}"),
+ InlineKeyboardButton("ꜱᴇᴀsᴏɴ", callback_data=f"seasons#{key}")
+ ]
+ )
+ btn.insert(0, [
+ InlineKeyboardButton("♨️ ꜱᴇɴᴅ ᴀʟʟ ꜰɪʟᴇꜱ ♨️", callback_data=f"sendfiles#{key}")
+ ])
+
+ else:
+ btn = []
+ btn.insert(0,
+ [
+ InlineKeyboardButton("⇈ ꜱᴇʟᴇᴄᴛ ᴏᴘᴛɪᴏɴꜱ ʜᴇʀᴇ ⇈", 'reqinfo')
+ ]
+ )
+ btn.insert(0,
+ [
+ InlineKeyboardButton(f'ǫᴜᴀʟɪᴛʏ', callback_data=f"qualities#{key}"),
+ InlineKeyboardButton("ʟᴀɴɢᴜᴀɢᴇ", callback_data=f"languages#{key}"),
+ InlineKeyboardButton("ꜱᴇᴀsᴏɴ", callback_data=f"seasons#{key}")
+ ]
+ )
+ btn.insert(0, [
+ InlineKeyboardButton("♨️ ꜱᴇɴᴅ ᴀʟʟ ꜰɪʟᴇꜱ ♨️", callback_data=f"sendfiles#{key}")
+ ])
+
+ if offset != "":
+ req = message.from_user.id if message.from_user else 0
+ try:
+ if settings['max_btn']:
+ btn.append(
+ [InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(text=f"1/{math.ceil(int(total_results)/10)}",callback_data="pages"), InlineKeyboardButton(text="ɴᴇxᴛ ⋟",callback_data=f"next_{req}_{key}_{offset}")]
+ )
+ else:
+ btn.append(
+ [InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(text=f"1/{math.ceil(int(total_results)/int(MAX_B_TN))}",callback_data="pages"), InlineKeyboardButton(text="ɴᴇxᴛ ⋟",callback_data=f"next_{req}_{key}_{offset}")]
+ )
+ except KeyError:
+ await save_group_settings(message.chat.id, 'max_btn', True)
+ btn.append(
+ [InlineKeyboardButton("ᴘᴀɢᴇ", callback_data="pages"), InlineKeyboardButton(text=f"1/{math.ceil(int(total_results)/10)}",callback_data="pages"), InlineKeyboardButton(text="ɴᴇxᴛ ⋟",callback_data=f"next_{req}_{key}_{offset}")]
+ )
+ else:
+ btn.append(
+ [InlineKeyboardButton(text="↭ ɴᴏ ᴍᴏʀᴇ ᴘᴀɢᴇꜱ ᴀᴠᴀɪʟᴀʙʟᴇ ↭",callback_data="pages")]
+ )
+ imdb = await get_poster(search, file=(files[0]).file_name) if settings["imdb"] else None
+ cur_time = datetime.now(pytz.timezone('Asia/Kolkata')).time()
+ time_difference = timedelta(hours=cur_time.hour, minutes=cur_time.minute, seconds=(cur_time.second+(cur_time.microsecond/1000000))) - timedelta(hours=curr_time.hour, minutes=curr_time.minute, seconds=(curr_time.second+(curr_time.microsecond/1000000)))
+ remaining_seconds = "{:.2f}".format(time_difference.total_seconds())
+ TEMPLATE = script.IMDB_TEMPLATE_TXT
+ if imdb:
+ cap = TEMPLATE.format(
+ qurey=search,
+ title=imdb['title'],
+ votes=imdb['votes'],
+ aka=imdb["aka"],
+ seasons=imdb["seasons"],
+ box_office=imdb['box_office'],
+ localized_title=imdb['localized_title'],
+ kind=imdb['kind'],
+ imdb_id=imdb["imdb_id"],
+ cast=imdb["cast"],
+ runtime=imdb["runtime"],
+ countries=imdb["countries"],
+ certificates=imdb["certificates"],
+ languages=imdb["languages"],
+ director=imdb["director"],
+ writer=imdb["writer"],
+ producer=imdb["producer"],
+ composer=imdb["composer"],
+ cinematographer=imdb["cinematographer"],
+ music_team=imdb["music_team"],
+ distributors=imdb["distributors"],
+ release_date=imdb['release_date'],
+ year=imdb['year'],
+ genres=imdb['genres'],
+ poster=imdb['poster'],
+ plot=imdb['plot'],
+ rating=imdb['rating'],
+ url=imdb['url'],
+ **locals()
+ )
+ temp.IMDB_CAP[message.from_user.id] = cap
+ if not settings["button"]:
+ cap+="\n\n📚 Your Requested Files 👇\n\n"
+ for file in files:
+ cap += f"\n 📁 {get_size(file.file_size)} ▷ {' '.join(filter(lambda x: not x.startswith('[') and not x.startswith('@') and not x.startswith('www.'), file.file_name.split()))}\n"
+ else:
+ if settings["button"]:
+ cap = f"🧿 ᴛɪᴛʟᴇ : {search}
\n📂 ᴛᴏᴛᴀʟ ꜰɪʟᴇꜱ : {total_results}
\n📝 ʀᴇǫᴜᴇsᴛᴇᴅ ʙʏ : {message.from_user.mention}\n⏰ ʀᴇsᴜʟᴛ ɪɴ : {remaining_seconds} Sᴇᴄᴏɴᴅs
\n⚜️ ᴘᴏᴡᴇʀᴇᴅ ʙʏ : 👇\n⚡ {message.chat.title} \n\n"
+ else:
+ cap = f"🧿 ᴛɪᴛʟᴇ : {search}
\n📂 ᴛᴏᴛᴀʟ ꜰɪʟᴇꜱ : {total_results}
\n📝 ʀᴇǫᴜᴇsᴛᴇᴅ ʙʏ : {message.from_user.mention}\n⏰ ʀᴇsᴜʟᴛ ɪɴ : {remaining_seconds} Sᴇᴄᴏɴᴅs
\n⚜️ ᴘᴏᴡᴇʀᴇᴅ ʙʏ : 👇\n⚡ {message.chat.title} \n\n"
+ # cap+="Hᴇʏ {message.from_user.mention}, Hᴇʀᴇ ɪs ᴛʜᴇ ʀᴇsᴜʟᴛ ғᴏʀ ʏᴏᴜʀ ᴏ̨ᴜᴇʀʏ {search} \n\n"
+ for file in files:
+ cap += f" 📁 {get_size(file.file_size)} ▷ {' '.join(filter(lambda x: not x.startswith('[') and not x.startswith('@') and not x.startswith('www.'), file.file_name.split()))}\n\n"
+
+ if imdb and imdb.get('poster'):
+ try:
+ hehe = await message.reply_photo(photo=imdb.get('poster'), caption=cap, reply_markup=InlineKeyboardMarkup(btn))
+ await m.delete()
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(300)
+ await hehe.delete()
+ await message.delete()
+ except KeyError:
+ await save_group_settings(message.chat.id, 'auto_delete', True)
+ await asyncio.sleep(300)
+ await hehe.delete()
+ await message.delete()
+ except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty):
+ pic = imdb.get('poster')
+ poster = pic.replace('.jpg', "._V1_UX360.jpg")
+ hmm = await message.reply_photo(photo=poster, caption=cap, reply_markup=InlineKeyboardMarkup(btn))
+ await m.delete()
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(300)
+ m=await message.reply_text("🔎")
+ await hmm.delete()
+ await message.delete()
+ except KeyError:
+ await save_group_settings(message.chat.id, 'auto_delete', True)
+ await asyncio.sleep(300)
+ await hmm.delete()
+ await message.delete()
+ except Exception as e:
+ logger.exception(e)
+ m=await message.reply_text("🔎")
+ fek = await message.reply_text(text=cap, reply_markup=InlineKeyboardMarkup(btn))
+ await m.delete()
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(300)
+ await fek.delete()
+ await message.delete()
+ except KeyError:
+ await save_group_settings(message.chat.id, 'auto_delete', True)
+ await asyncio.sleep(300)
+ await fek.delete()
+ await message.delete()
+ else:
+ fuk = await message.reply_text(text=cap, reply_markup=InlineKeyboardMarkup(btn), disable_web_page_preview=True)
+ await m.delete()
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(300)
+ await fuk.delete()
+ await message.delete()
+ except KeyError:
+ await save_group_settings(message.chat.id, 'auto_delete', True)
+ await asyncio.sleep(300)
+ await fuk.delete()
+ await message.delete()
+
+async def advantage_spell_chok(client, msg):
+ mv_id = msg.id
+ mv_rqst = msg.text
+ reqstr1 = msg.from_user.id if msg.from_user else 0
+ reqstr = await client.get_users(reqstr1)
+ settings = await get_settings(msg.chat.id)
+ find = mv_rqst.split(" ")
+ query = ""
+ removes = ["in","upload", "series", "full", "horror", "thriller", "mystery", "print", "file"]
+ for x in find:
+ if x in removes:
+ continue
+ else:
+ query = query + x + " "
+ query = re.sub(r"\b(pl(i|e)*?(s|z+|ease|se|ese|(e+)s(e)?)|((send|snd|giv(e)?|gib)(\sme)?)|movie(s)?|new|latest|bro|bruh|broh|helo|that|find|dubbed|link|venum|iruka|pannunga|pannungga|anuppunga|anupunga|anuppungga|anupungga|film|undo|kitti|kitty|tharu|kittumo|kittum|movie|any(one)|with\ssubtitle(s)?)", "", query, flags=re.IGNORECASE)
+ query = re.sub(r"\s+", " ", query).strip() + "movie"
+ try:
+ g_s = await search_gagala(query)
+ g_s += await search_gagala(msg.text)
+ gs_parsed = []
+ if not g_s:
+ reqst_gle = query.replace(" ", "+")
+ button = [[
+ InlineKeyboardButton("📝 ʀᴇǫᴜᴇꜱᴛ ʜᴇʀᴇ", url=f"https://t.me/HpMovieRequest")
+ ]]
+ if NO_RESULTS_MSG:
+ await client.send_message(chat_id=LOG_CHANNEL, text=(script.NORSLTS.format(reqstr.id, reqstr.mention, mv_rqst)))
+ k = await msg.reply_text(
+ text=script.I_CUDNT.format(mv_rqst),
+ reply_markup=InlineKeyboardMarkup(button)
+ )
+ await asyncio.sleep(30)
+ await k.delete()
+ return
+ regex = re.compile(r".*(imdb|wikipedia).*", re.IGNORECASE) # look for imdb / wiki results
+ gs = list(filter(regex.match, g_s))
+ gs_parsed = [re.sub(
+ r'\b(\-([a-zA-Z-\s])\-\simdb|(\-\s)?imdb|(\-\s)?wikipedia|\(|\)|\-|reviews|full|all|episode(s)?|film|movie|series)',
+ '', i, flags=re.IGNORECASE) for i in gs]
+ if not gs_parsed:
+ reg = re.compile(r"watch(\s[a-zA-Z0-9_\s\-\(\)]*)*\|.*",
+ re.IGNORECASE) # match something like Watch Niram | Amazon Prime
+ for mv in g_s:
+ match = reg.match(mv)
+ if match:
+ gs_parsed.append(match.group(1))
+ movielist = []
+ gs_parsed = list(dict.fromkeys(gs_parsed)) # removing duplicates https://stackoverflow.com/a/7961425
+ if len(gs_parsed) > 3:
+ gs_parsed = gs_parsed[:3]
+ if gs_parsed:
+ for mov in gs_parsed:
+ imdb_s = await get_poster(mov.strip(), bulk=True) # searching each keyword in imdb
+ if imdb_s:
+ movielist += [movie.get('title') for movie in imdb_s]
+ movielist += [(re.sub(r'(\-|\(|\)|_)', '', i, flags=re.IGNORECASE)).strip() for i in gs_parsed]
+ movielist = list(dict.fromkeys(movielist)) # removing duplicates
+ if not movielist:
+ reqst_gle = query.replace(" ", "+")
+ button = [[
+ InlineKeyboardButton("📝 ʀᴇǫᴜᴇꜱᴛ ʜᴇʀᴇ", url=f"https://t.me/HpMovieRequest")
+ ]]
+ if NO_RESULTS_MSG:
+ await client.send_message(chat_id=LOG_CHANNEL, text=(script.NORSLTS.format(reqstr.id, reqstr.mention, mv_rqst)))
+ k = await msg.reply_text(
+ text=script.I_CUDNT.format(mv_rqst),
+ reply_markup=InlineKeyboardMarkup(button)
+ )
+ await asyncio.sleep(30)
+ await k.delete()
+ return
+ SPELL_CHECK[mv_id] = movielist
+ btn = [[
+ InlineKeyboardButton(
+ text=movie.strip(),
+ callback_data=f"spolling#{reqstr1}#{k}",
+ )
+ ] for k, movie in enumerate(movielist)]
+ btn.append([InlineKeyboardButton(text="↭ ᴄʟᴏꜱᴇ ↭", callback_data=f'spol#{reqstr1}#close_spellcheck')])
+ spell_check_del = await msg.reply_text(
+ text=script.CUDNT_FND.format(mv_rqst),
+ reply_markup=InlineKeyboardMarkup(btn)
+ )
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(60)
+ await spell_check_del.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(60)
+ await spell_check_del.delete()
+ except:
+ try:
+ movies = await get_poster(mv_rqst, bulk=True)
+ except Exception as e:
+ logger.exception(e)
+ reqst_gle = mv_rqst.replace(" ", "+")
+ button = [[
+ InlineKeyboardButton("📝 ʀᴇǫᴜᴇꜱᴛ ʜᴇʀᴇ", url=f"https://t.me/HpMovieRequest")
+ ]]
+ if NO_RESULTS_MSG:
+ await client.send_message(chat_id=LOG_CHANNEL, text=(script.NORSLTS.format(reqstr.id, reqstr.mention, mv_rqst)))
+ k = await msg.reply_text(
+ text=script.I_CUDNT.format(mv_rqst),
+ reply_markup=InlineKeyboardMarkup(button)
+ )
+ await asyncio.sleep(30)
+ await k.delete()
+ return
+ movielist = []
+ if not movies:
+ reqst_gle = mv_rqst.replace(" ", "+")
+ button = [[
+ InlineKeyboardButton("📝 ʀᴇǫᴜᴇꜱᴛ ʜᴇʀᴇ", url=f"https://t.me/HpMovieRequest")
+ ]]
+ if NO_RESULTS_MSG:
+ await client.send_message(chat_id=LOG_CHANNEL, text=(script.NORSLTS.format(reqstr.id, reqstr.mention, mv_rqst)))
+ k = await msg.reply_text(
+ text=script.I_CUDNT.format(mv_rqst),
+ reply_markup=InlineKeyboardMarkup(button)
+ )
+ await asyncio.sleep(30)
+ await k.delete()
+ return
+ movielist += [movie.get('title') for movie in movies]
+ movielist += [f"{movie.get('title')} {movie.get('year')}" for movie in movies]
+ SPELL_CHECK[mv_id] = movielist
+ btn = [
+ [
+ InlineKeyboardButton(
+ text=movie_name.strip(),
+ callback_data=f"spol#{reqstr1}#{k}",
+ )
+ ]
+ for k, movie_name in enumerate(movielist)
+ ]
+ btn.append([InlineKeyboardButton(text="↭ ᴄʟᴏꜱᴇ ↭", callback_data=f'spol#{reqstr1}#close_spellcheck')])
+ spell_check_del = await msg.reply_text(
+ text=script.CUDNT_FND.format(mv_rqst),
+ reply_markup=InlineKeyboardMarkup(btn)
+ )
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await spell_check_del.delete()
+ except KeyError:
+ grpid = await active_connection(str(msg.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(msg.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await spell_check_del.delete()
+
+
+async def manual_filters(client, message, text=False):
+ settings = await get_settings(message.chat.id)
+ group_id = message.chat.id
+ name = text or message.text
+ reply_id = message.reply_to_message.id if message.reply_to_message else message.id
+ keywords = await get_filters(group_id)
+ for keyword in reversed(sorted(keywords, key=len)):
+ pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])"
+ if re.search(pattern, name, flags=re.IGNORECASE):
+ reply_text, btn, alert, fileid = await find_filter(group_id, keyword)
+
+ if reply_text:
+ reply_text = reply_text.replace("\\n", "\n").replace("\\t", "\t")
+
+ if btn is not None:
+ try:
+ if fileid == "None":
+ if btn == "[]":
+ joelkb = await client.send_message(
+ group_id,
+ reply_text,
+ disable_web_page_preview=True,
+ protect_content=True if settings["file_secure"] else False,
+ reply_to_message_id=reply_id
+ )
+ try:
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+ else:
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_ffilter', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+
+ else:
+ button = eval(btn)
+ joelkb = await client.send_message(
+ group_id,
+ reply_text,
+ disable_web_page_preview=True,
+ reply_markup=InlineKeyboardMarkup(button),
+ protect_content=True if settings["file_secure"] else False,
+ reply_to_message_id=reply_id
+ )
+ try:
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+ else:
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_ffilter', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+
+ elif btn == "[]":
+ joelkb = await client.send_cached_media(
+ group_id,
+ fileid,
+ caption=reply_text or "",
+ protect_content=True if settings["file_secure"] else False,
+ reply_to_message_id=reply_id
+ )
+ try:
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+ else:
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_ffilter', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+
+ else:
+ button = eval(btn)
+ joelkb = await message.reply_cached_media(
+ fileid,
+ caption=reply_text or "",
+ reply_markup=InlineKeyboardMarkup(button),
+ reply_to_message_id=reply_id
+ )
+ try:
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+ else:
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_ffilter', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+
+ except Exception as e:
+ logger.exception(e)
+ break
+ else:
+ return False
+
+async def global_filters(client, message, text=False):
+ settings = await get_settings(message.chat.id)
+ group_id = message.chat.id
+ name = text or message.text
+ reply_id = message.reply_to_message.id if message.reply_to_message else message.id
+ keywords = await get_gfilters('gfilters')
+ for keyword in reversed(sorted(keywords, key=len)):
+ pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])"
+ if re.search(pattern, name, flags=re.IGNORECASE):
+ reply_text, btn, alert, fileid = await find_gfilter('gfilters', keyword)
+
+ if reply_text:
+ reply_text = reply_text.replace("\\n", "\n").replace("\\t", "\t")
+
+ if btn is not None:
+ try:
+ if fileid == "None":
+ if btn == "[]":
+ joelkb = await client.send_message(
+ group_id,
+ reply_text,
+ disable_web_page_preview=True,
+ reply_to_message_id=reply_id
+ )
+ manual = await manual_filters(client, message)
+ if manual == False:
+ settings = await get_settings(message.chat.id)
+ try:
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+ else:
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_ffilter', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ else:
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+
+ else:
+ button = eval(btn)
+ joelkb = await client.send_message(
+ group_id,
+ reply_text,
+ disable_web_page_preview=True,
+ reply_markup=InlineKeyboardMarkup(button),
+ reply_to_message_id=reply_id
+ )
+ manual = await manual_filters(client, message)
+ if manual == False:
+ settings = await get_settings(message.chat.id)
+ try:
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+ else:
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_ffilter', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ else:
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+
+ elif btn == "[]":
+ joelkb = await client.send_cached_media(
+ group_id,
+ fileid,
+ caption=reply_text or "",
+ reply_to_message_id=reply_id
+ )
+ manual = await manual_filters(client, message)
+ if manual == False:
+ settings = await get_settings(message.chat.id)
+ try:
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+ else:
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_ffilter', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ else:
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+
+ else:
+ button = eval(btn)
+ joelkb = await message.reply_cached_media(
+ fileid,
+ caption=reply_text or "",
+ reply_markup=InlineKeyboardMarkup(button),
+ reply_to_message_id=reply_id
+ )
+ manual = await manual_filters(client, message)
+ if manual == False:
+ settings = await get_settings(message.chat.id)
+ try:
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+ else:
+ try:
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await asyncio.sleep(600)
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_ffilter', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_ffilter']:
+ await auto_filter(client, message)
+ else:
+ try:
+ if settings['auto_delete']:
+ await joelkb.delete()
+ except KeyError:
+ grpid = await active_connection(str(message.from_user.id))
+ await save_group_settings(grpid, 'auto_delete', True)
+ settings = await get_settings(message.chat.id)
+ if settings['auto_delete']:
+ await joelkb.delete()
+
+
+ except Exception as e:
+ logger.exception(e)
+ break
+ else:
+ return False