diff --git a/Readme.md b/Readme.md index f8392e3..dd41660 100644 --- a/Readme.md +++ b/Readme.md @@ -1,18 +1,18 @@ # Adv Auto Filter Bot V2

- - + + - - + +

-__This Is Just An Simple Advance Auto Filter Bot Complete Rewritten Version Of [Adv-Filter-Bot](https://github.com/AlbertEinsteinTG/Adv-Auto-Filter-Bot)..__ +__This Is Just An Simple Advance Auto Filter Bot Complete Rewritten Version Of [Adv-Filter-Bot](https://github.com/CrazyBotsz/Adv-Auto-Filter-Bot)..__ __Just Sent Any Text As Query It Will Search For All Connected Chat's Files In Its MongoDB And Reply You With The Message Link As A Button__ @@ -82,8 +82,8 @@ You can deploy this bot anywhere.
Deploy To VPS

-git clone https://github.com/AlbertEinsteinTG/Adv-Auto-Filter-Bot-V2/tree/blob/main
-cd Adv-Auto-Filter-Bot-ReMaster
+git clone https://github.com/CrazyBotsz/Adv-Auto-Filter-Bot-V2
+cd Adv-Auto-Filter-Bot-V2
 pip3 install -r requirements.txt
 # Change The Vars Of bot/__init__.py File Accordingly
 python3 -m bot
@@ -99,7 +99,7 @@ Do Fork And Star The Repository If You Liked It.
 
 ## Disclaimer
 [![GNU Affero General Public License v3.0](https://www.gnu.org/graphics/agplv3-155x51.png)](https://www.gnu.org/licenses/agpl-3.0.en.html#header)    
-Licensed under [GNU AGPL v3.0.](https://github.com/AlbertEinsteinTG/Adv-Auto-Filter-Bot-V2/blob/main/LICENSE)
+Licensed under [GNU AGPL v3.0.](https://github.com/CrazyBotsz/Adv-Auto-Filter-Bot-V2/blob/main/LICENSE)
 Selling The Codes To Other People For Money Is *Strictly Prohibited*.
 
 
@@ -107,3 +107,4 @@ Selling The Codes To Other People For Money Is *Strictly Prohibited*.
 
  - Thanks To Dan For His Awsome [Libary](https://github.com/pyrogram/pyrogram)
  - Thanks To SpEcHiDe For His Awesome [DeleteMessagesRoBot](https://github.com/SpEcHiDe/DeleteMessagesRoBot)
+ - [Thanks To Me πŸ‘€](https://github.com/AlbertEinsteinTG)
diff --git a/bot/__init__.py b/bot/__init__.py
index 23d2a30..3cc958d 100644
--- a/bot/__init__.py
+++ b/bot/__init__.py
@@ -21,7 +21,7 @@
 
 USER_SESSION = os.environ.get("USER_SESSION")
 
-VERIFY = {}
+CHAT_DETAILS = {}
 
 logging.basicConfig(
     level=logging.INFO,
diff --git a/bot/bot.py b/bot/bot.py
index e90f1f0..1af901a 100644
--- a/bot/bot.py
+++ b/bot/bot.py
@@ -20,7 +20,7 @@ def __init__(self):
             plugins={
                 "root": "bot/plugins"
             },
-            workers=4,
+            workers=400,
             bot_token=BOT_TOKEN,
             sleep_threshold=10
         )
diff --git a/bot/database/database.py b/bot/database/database.py
index dcf5e7f..356997d 100644
--- a/bot/database/database.py
+++ b/bot/database/database.py
@@ -1,21 +1,14 @@
+import os
 import motor.motor_asyncio # pylint: disable=import-error
 from bot import DB_URI
 
-class Singleton(type):
-    __instances__ = {}
+DB_NAME = os.environ.get("DB_NAME", "Adv_Auto_Filter")
 
-    def __call__(cls, *args, **kwargs):
-        if cls not in cls.__instances__:
-            cls.__instances__[cls] = super(Singleton, cls).__call__(*args, **kwargs)
-
-        return cls.__instances__[cls]
-
-
-class Database(metaclass=Singleton):
+class Database:
 
     def __init__(self):
         self._client = motor.motor_asyncio.AsyncIOMotorClient(DB_URI)
-        self.db = self._client["Adv_Auto_Filter"]
+        self.db = self._client[DB_NAME]
         self.col = self.db["Main"]
         self.acol = self.db["Active_Chats"]
         self.fcol = self.db["Filter_Collection"]
@@ -446,7 +439,7 @@ async def get_filters(self, group_id: int, keyword: str):
         filters = []
                 
         pipeline= {
-            '$text':{'$search': keyword}
+            'group_id': int(group_id), '$text':{'$search': keyword}
         }
         
         
@@ -484,7 +477,7 @@ async def get_file(self, unique_id: str):
             file_id = file.get("file_id")
             file_name = file.get("file_name")
             file_type = file.get("file_type")
-            file_caption = file.get("caption")
+            file_caption = file.get("file_caption")
         return file_id, file_name, file_caption, file_type
 
 
@@ -502,4 +495,3 @@ async def tf_count(self, group_id: int):
         """
         return await self.fcol.count_documents({"group_id": group_id})
 
-
diff --git a/bot/plugins/Callbacks/About Btn/__init__.py b/bot/plugins/Callbacks/About Btn/__init__.py
new file mode 100644
index 0000000..5195b22
--- /dev/null
+++ b/bot/plugins/Callbacks/About Btn/__init__.py	
@@ -0,0 +1,14 @@
+from .. import (
+    FIND,
+    
+    recacher,
+    admin_list,
+    Database,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK,
+    remove_emoji,
+    time_formatter,
+    gen_invite_links,
+)
+from .... import start_uptime
\ No newline at end of file
diff --git a/bot/plugins/Callbacks/About Btn/abt_main_cb.py b/bot/plugins/Callbacks/About Btn/abt_main_cb.py
new file mode 100644
index 0000000..55f6f6f
--- /dev/null
+++ b/bot/plugins/Callbacks/About Btn/abt_main_cb.py	
@@ -0,0 +1,62 @@
+import re
+import time
+
+from pyrogram import Client, filters
+from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
+
+from . import (
+    CHAT_DETAILS,
+    admin_list,
+    time_formatter,
+    start_uptime
+)
+
+@Client.on_callback_query(filters.regex(r"about\((.+)\)"), group=2)
+async def cb_about(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Showing About Section In Bot Setting Menu
+    """
+    global CHAT_DETAILS
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    text=f"Bot's Status\n"
+    text+=f"\nBot's Uptime: {time_formatter(time.time() - start_uptime)}\n"
+    text+=f"\nBot Funtion: Auto Filter Files\n"
+    text+=f"""\nBot Support: @CrazyBotszGrp\n"""
+    text+="""\nSource Code: Source"""
+
+    buttons = [
+        [
+            InlineKeyboardButton
+                (
+                    "My Dev ⚑", url="https://t.me/AlbertEinstein_TG"
+                ),
+                
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data="settings"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "Close πŸ”", callback_data="close"
+                )
+        ]
+    ]
+    
+    reply_markup = InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text, reply_markup=reply_markup, parse_mode="html"
+    )
diff --git a/bot/plugins/Callbacks/Channels Btn/__init__.py b/bot/plugins/Callbacks/Channels Btn/__init__.py
new file mode 100644
index 0000000..a4f0a15
--- /dev/null
+++ b/bot/plugins/Callbacks/Channels Btn/__init__.py	
@@ -0,0 +1,14 @@
+from .. import (
+    FIND,
+    
+    recacher,
+    
+    admin_list,
+    Database,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK,
+    remove_emoji,
+    time_formatter,
+    gen_invite_links,
+)
\ No newline at end of file
diff --git a/bot/plugins/Callbacks/Channels Btn/chnl_main_cb.py b/bot/plugins/Callbacks/Channels Btn/chnl_main_cb.py
new file mode 100644
index 0000000..02d0adb
--- /dev/null
+++ b/bot/plugins/Callbacks/Channels Btn/chnl_main_cb.py	
@@ -0,0 +1,359 @@
+import re
+import time
+import asyncio
+
+from pyrogram import Client, filters
+from pyrogram.errors import FloodWait, UserNotParticipant
+from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
+
+from . import (
+    FIND, 
+    recacher,
+    Database,
+    admin_list,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK, 
+    remove_emoji,
+    gen_invite_links,
+)
+
+db = Database()
+
+@Client.on_callback_query(filters.regex(r"channel_list\((.+)\)"), group=2)
+async def cb_channel_list(bot, update: CallbackQuery):    
+    """
+    A Callback Funtion For Displaying All Channel List And Providing A Menu To Navigate
+    To Every COnnect Chats For Furthur Control
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    chat_name = remove_emoji(update.message.chat.title)
+    chat_name = chat_name.encode('ascii', 'ignore').decode('ascii')[:35]
+    user_id = update.from_user.id
+
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    chat_id =  re.findall(r"channel_list\((.+)\)", query_data)[0]
+    
+    text = "Semms Like You Dont Have Any Channel Connected...\n\nConnect To Any Chat To Continue With This Settings..."
+    
+    db_list = await db.find_chat(int(chat_id))
+    
+    channel_id_list = []
+    channel_name_list = []
+    
+    if db_list:
+        for x in db_list["chat_ids"]:
+            channel_id = x["chat_id"]
+            channel_name = x["chat_name"]
+            
+            try:
+                if (channel_id == None or channel_name == None):
+                    continue
+            except:
+                break
+            
+            channel_name = remove_emoji(channel_name).encode('ascii', 'ignore').decode('ascii')[:35]
+            channel_id_list.append(channel_id)
+            channel_name_list.append(channel_name)
+        
+    buttons = []
+
+    # For Future Update (Little Help NeededπŸ˜ͺ)
+    # buttons.append([
+    #     InlineKeyboardButton
+    #         (
+    #             "Global Connections", callback_data=f"global({chat_id})"
+    #         )
+    # ])
+
+
+    buttons.append(
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data="settings"
+                ),
+            
+            InlineKeyboardButton
+                (
+                    "Close πŸ”", callback_data="close"
+                )
+        ]
+    ) 
+
+    if channel_name_list:
+        
+        text=f"List Of Connected Channels With {chat_name} With There Settings..\n"
+    
+        for x in range(1, (len(channel_name_list)+1)):
+            text+=f"\n{x}. {channel_name_list[x-1]}\n"
+    
+        text += "\nChoose Appropriate Buttons To Navigate Through Respective Channels"
+    
+        
+        btn_key = [
+            "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣", "πŸ”Ÿ", 
+            "1️⃣1️⃣", "1️⃣2️⃣", "1️⃣3️⃣", "1️⃣4️⃣", "1️⃣5️⃣", "1️⃣6️⃣", "1️⃣7️⃣", 
+            "1️⃣8️⃣", "1️⃣9️⃣", "2️⃣0️⃣" # Just In Case πŸ˜‚πŸ€£
+        ]
+    
+        for i in range(1, (len(channel_name_list) + 1)): # Append The Index Number of Channel In Just A Single Line
+            if i == 1:
+                buttons.insert(0,
+                    [
+                    InlineKeyboardButton
+                        (
+                            btn_key[i-1], callback_data=f"info({channel_id_list[i-1]}|{channel_name_list[i-1]})"
+                        )
+                    ]
+                )
+        
+            else:
+                buttons[0].append(
+                    InlineKeyboardButton
+                        (
+                            btn_key[i-1], callback_data=f"info({channel_id_list[i-1]}|{channel_name_list[i-1]})"
+                        )
+                )
+    
+    
+    reply_markup=InlineKeyboardMarkup(buttons)
+
+    await update.message.edit_text(
+            text = text,
+            reply_markup=reply_markup,
+            parse_mode="html"
+        )
+
+
+
+@Client.on_callback_query(filters.regex(r"info\((.+)\)"), group=2)
+async def cb_info(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Displaying Details Of The Connected Chat And Provide
+    Ability To Connect / Disconnect / Delete / Delete Filters of That Specific Chat
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    channel_id, channel_name = re.findall(r"info\((.+)\)", query_data)[0].split("|", 1)
+    
+    f_count = await db.cf_count(chat_id, int(channel_id)) 
+    active_chats = await db.find_active(chat_id)
+
+    if active_chats: # Checks for active chats connected to a chat
+        dicts = active_chats["chats"]
+        db_cids = [ int(x["chat_id"]) for x in dicts ]
+        
+        if int(channel_id) in db_cids:
+            active_chats = True
+            status = "Connected"
+            
+        else:
+            active_chats = False
+            status = "Disconnected"
+            
+    else:
+        active_chats = False
+        status = "Disconnected"
+
+    text=f"Info About {channel_name}\n"
+    text+=f"\nChannel Name: {channel_name}\n"
+    text+=f"\nChannel ID: {channel_id}\n"
+    text+=f"\nChannel Files: {f_count}\n"
+    text+=f"\nCurrent Status: {status}\n"
+
+
+    if active_chats:
+        buttons = [
+                    [
+                        InlineKeyboardButton
+                            (
+                                "🚨 Disconnect 🚨", callback_data=f"warn({channel_id}|{channel_name}|disconnect)"
+                            ),
+                        
+                        InlineKeyboardButton
+                            (
+                                "Delete ❌", callback_data=f"warn({channel_id}|{channel_name}|c_delete)"
+                            )
+                    ]
+        ]
+
+    else:
+        buttons = [ 
+                    [
+                        InlineKeyboardButton
+                            (
+                                "πŸ’  Connect πŸ’ ", callback_data=f"warn({channel_id}|{channel_name}|connect)"
+                            ),
+                        
+                        InlineKeyboardButton
+                            (
+                                "Delete ❌", callback_data=f"warn({channel_id}|{channel_name}|c_delete)"
+                            )
+                    ]
+        ]
+
+    buttons.append(
+            [
+                InlineKeyboardButton
+                    (
+                        "Delete Filters ⚠", callback_data=f"warn({channel_id}|{channel_name}|f_delete)"
+                    )
+            ]
+    )
+    
+    buttons.append(
+            [
+                InlineKeyboardButton
+                    (
+                        "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
+                    )
+            ]
+    )
+
+    reply_markup = InlineKeyboardMarkup(buttons)
+        
+    await update.message.edit_text(
+            text, reply_markup=reply_markup, parse_mode="html"
+        )
+
+
+# 
+    # @Client.on_callback_query(filters.regex(r"^global\((.+)\)"), group=2)
+    # async def cb_global_chats(bot, update:CallbackQuery):
+    #     """
+    #     A Callback Funtion For Displaying Details Of All The Connected Chat And Provide
+    #     Ability To Connect, Disconnect, Delete, Delete Filters of, All Connected Chat In
+    #     1 Go
+    #     """
+    #     global CHAT_DETAILS
+        
+    #     chat_id = update.message.chat.id
+    #     chat_name = update.message.chat.title
+    #     user_id = update.from_user.id
+        
+    #     chat_dict = CHAT_DETAILS.get(str(chat_id))
+    #     chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    #     if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+    #         chat_admins = await admin_list(chat_id, bot, update)
+
+    #     if user_id not in chat_admins:
+    #         return
+        
+    #     f_count = await db.tf_count(chat_id) 
+    #     connected_chats = await db.find_chat(chat_id)
+    #     active_chats = await db.find_active(chat_id)
+        
+    #     db_cids = None
+    #     db_cnames = None
+    #     total_chats = 0
+        
+    #     if connected_chats: # Checks for active chats connected to a chat
+    #         dicts = connected_chats["chat_ids"]
+    #         adicts = active_chats["chats"]
+    #         adb_cids = [ int(x["chat_id"]) for x in adicts ]
+    #         db_cids = []
+    #         db_cnames = []
+    #         for x in dicts:
+    #             cid = x["chat_id"]
+    #             cname = x["chat_name"]
+    #             print(cname)
+                
+    #             db_cids.append(cid)
+    #             if cid in adb_cids:
+    #                 cname + " (A)"
+    #             db_cnames.append(cname)
+
+    #             print(db_cnames)
+        
+    #         total_chats = len(db_cids)
+
+    #     text=f"Info About All Connected Of {chat_name}\n"
+    #     text+=f"\nTotal Connected Chats: {total_chats}\n"
+        
+    #     text+=f"\nChannel Names:\n"
+        
+    #     for y in db_cnames:
+    #         text+=f"\n                   {y}"
+            
+    #     text+=f"\nChannel ID's:\n"
+        
+    #     for z in db_cids:
+    #         text+=f"\n                 {z}"
+        
+    #     text+=f"\nTotal Files In DB: {f_count}\n"
+
+
+
+    #     buttons = [ 
+    #                 [
+    #                     InlineKeyboardButton
+    #                         (
+    #                             "πŸ’  Connect All πŸ’ ", callback_data=f"warn({chat_id}|conn|gcmds)"
+    #                         ),
+                        
+    #                     InlineKeyboardButton
+    #                         (
+    #                             "🚨 Disconnect All 🚨", callback_data=f"warn({chat_id}|disconn|gcmds)"
+    #                         )
+    #                 ]
+    #     ]
+
+
+    #     buttons.append(
+    #             [                    
+    #                 InlineKeyboardButton
+    #                     (
+    #                         "Delete All Chats ❌", callback_data=f"warn({chat_id}|c_delete|gcmds)"
+    #                     )
+    #             ]
+    #     )
+
+
+    #     buttons.append(
+    #             [
+    #                 InlineKeyboardButton
+    #                     (
+    #                         "Delete All Filters ⚠", callback_data=f"warn({chat_id}|f_delete|gcmds)"
+    #                     )
+    #             ]
+    #     )
+        
+    #     buttons.append(
+    #             [
+    #                 InlineKeyboardButton
+    #                     (
+    #                         "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
+    #                     )
+    #             ]
+    #     )
+
+    #     reply_markup = InlineKeyboardMarkup(buttons)
+            
+    #     await update.message.edit_text(
+    #             text, reply_markup=reply_markup, parse_mode="html"
+    #         )
+
diff --git a/bot/plugins/Callbacks/Channels Btn/chnl_sub_cb.py b/bot/plugins/Callbacks/Channels Btn/chnl_sub_cb.py
new file mode 100644
index 0000000..dfb8a7f
--- /dev/null
+++ b/bot/plugins/Callbacks/Channels Btn/chnl_sub_cb.py	
@@ -0,0 +1,428 @@
+import re
+import time
+import asyncio
+
+from pyrogram import Client, filters
+from pyrogram.errors import FloodWait, UserNotParticipant
+from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
+
+from . import (
+    FIND, 
+    recacher,
+    Database,
+    admin_list,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK, 
+    remove_emoji,
+    gen_invite_links,
+)
+
+db = Database()
+
+
+@Client.on_callback_query(filters.regex(r"^connect\((.+)\)"), group=2)
+async def cb_connect(bot, update: CallbackQuery):
+    """
+    A Callback Funtion Helping The user To Make A Chat Active Chat Which Will
+    Make The Bot To Fetch Results From This Channel Too
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    channel_id, channel_name = re.findall(r"connect\((.+)\)", query_data)[0].split("|", 1)
+    channel_id = int(channel_id)
+    
+    f_count = await db.cf_count(chat_id, channel_id)
+    
+    add_active = await db.update_active(chat_id, channel_id, channel_name)
+    
+    if not add_active:
+        await update.answer(f"{channel_name} Is Aldready in Active Connection", show_alert=True)
+        return
+
+    text= f"Sucessfully Connected To {channel_name}\n"
+    text+=f"\nInfo About {channel_name}\n"
+    text+=f"\nChannel Name: {channel_name}\n"
+    text+=f"\nChannel ID: {channel_id}\n"
+    text+=f"\nChannel Files: {f_count}\n"
+    text+=f"\nCurrent Status: Connected\n"
+
+    buttons = [
+                [
+                    InlineKeyboardButton
+                        (
+                            "🚨 Disconnect 🚨", callback_data=f"warn({channel_id}|{channel_name}|disconnect)"
+                        ),
+                    
+                    InlineKeyboardButton
+                        (
+                            "Delete ❌", callback_data=f"warn({channel_id}|{channel_name}|c_delete)"
+                        )
+                ]
+    ]
+    
+    buttons.append(
+            [
+                InlineKeyboardButton
+                    (
+                        "Delete Filters ⚠", callback_data=f"warn({channel_id}|{channel_name}|f_delete)"
+                    )
+            ]
+    )
+    
+    buttons.append(
+            [
+                InlineKeyboardButton
+                    (
+                        "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
+                    )
+            ]
+    )
+    await recacher(chat_id, False, True, bot, update)
+    
+    reply_markup = InlineKeyboardMarkup(buttons)
+        
+    await update.message.edit_text(
+            text, reply_markup=reply_markup, parse_mode="html"
+        )
+
+
+
+@Client.on_callback_query(filters.regex(r"disconnect\((.+)\)"), group=2)
+async def cb_disconnect(bot, update: CallbackQuery):
+    """
+    A Callback Funtion Helping The user To Make A Chat inactive Chat Which Will
+    Make The Bot To Avoid Fetching Results From This Channel
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    channel_id, channel_name = re.findall(r"connect\((.+)\)", query_data)[0].split("|", 1)
+    
+    f_count = await db.cf_count(chat_id, int(channel_id))
+    
+    remove_active = await db.del_active(chat_id, int(channel_id))
+    
+    if not remove_active:
+        await update.answer("Couldnt Full Fill YOur Request...\n Report This @CrazyBotszGrp Along With Bot's Log", show_alert=True)
+        return
+    
+    text= f"Sucessfully Disconnected From {channel_name}\n"
+    text+=f"\nInfo About {channel_name}\n"
+    text+=f"\nChannel Name: {channel_name}\n"
+    text+=f"\nChannel ID: {channel_id}\n"
+    text+=f"\nChannel Files: {f_count}\n"
+    text+=f"\nCurrent Status: Disconnected\n"
+    
+    buttons = [ 
+                [
+                    InlineKeyboardButton
+                        (
+                            "πŸ’  Connect πŸ’ ", callback_data=f"warn({channel_id}|{channel_name}|connect)"
+                        ),
+                    
+                    InlineKeyboardButton
+                        (
+                            "Delete ❌", callback_data=f"warn({channel_id}|{channel_name}|c_delete)"
+                        )
+                ]
+    ]
+    
+    buttons.append(
+            [
+                InlineKeyboardButton
+                    (
+                        "Delete Filters ⚠", callback_data=f"warn({channel_id}|{channel_name}|f_delete)"
+                    )
+            ]
+    )
+    
+    buttons.append(
+            [
+                InlineKeyboardButton
+                    (
+                        "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
+                    )
+            ]
+    )
+    
+    reply_markup = InlineKeyboardMarkup(buttons)
+    
+    await recacher(chat_id, False, True, bot, update)
+
+    await update.message.edit_text(
+            text, reply_markup=reply_markup, parse_mode="html"
+        )
+
+
+
+@Client.on_callback_query(filters.regex(r"c_delete\((.+)\)"), group=2)
+async def cb_channel_delete(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Delete A Channel Connection From A Group Chat History
+    Along With All Its Filter Files
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    channel_id, channel_name = re.findall(r"c_delete\((.+)\)", query_data)[0].split("|", 1)
+    channel_id = int(channel_id)
+    
+    c_delete = await db.del_chat(chat_id, channel_id)
+    a_delete = await db.del_active(chat_id, channel_id) # pylint: disable=unused-variable
+    f_delete = await db.del_filters(chat_id, channel_id)
+
+    if (c_delete and f_delete ):
+        text=f"{channel_name} [ {channel_id} ] Has Been Sucessfully Deleted And All Its Files Were Cleared From DB...."
+
+    else:
+        text=f"Couldn't Delete Channel And All Its Files From DB Sucessfully....\nPlease Try Again After Sometimes...Also Make Sure To Check The Logs..!!"
+        await update.answer(text=text, show_alert=True)
+
+    buttons = [
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
+                ),
+                
+            InlineKeyboardButton
+                (
+                    "Close πŸ”", callback_data="close"
+                )
+        ]
+    ]
+
+    await recacher(chat_id, True, True, bot, update)
+    
+    reply_markup=InlineKeyboardMarkup(buttons)
+
+    await update.message.edit_text(
+        text, reply_markup=reply_markup, parse_mode="html"
+    )
+
+
+
+@Client.on_callback_query(filters.regex(r"f_delete\((.+)\)"), group=2)
+async def cb_filters_delete(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Delete A Specific Channel's Filters Connected To A Group
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    channel_id, channel_name = re.findall(r"f_delete\((.+)\)", query_data)[0].split("|", 1)
+
+    f_delete = await db.del_filters(chat_id, int(channel_id))
+
+    if not f_delete:
+        text="Oops..!!\n\nEncountered Some Error While Deleteing Filters....\nPlease Check The Logs...."
+        await update.answer(text=text, show_alert=True)
+        return
+
+    text =f"All Filters Of {channel_id}[{channel_name}] Has Been Deleted Sucessfully From My DB.."
+
+    buttons=[
+        [
+            InlineKeyboardButton
+                (
+                    "Back", callback_data="settings"
+                ),
+            
+            InlineKeyboardButton
+                (
+                    "Close", callback_data="close"
+                )
+        ]
+    ]
+
+    reply_markup = InlineKeyboardMarkup(buttons)
+
+    await update.message.edit_text(
+        text, reply_markup=reply_markup, parse_mode="html"
+    )
+    
+
+#
+    # @Client.on_callback_query(filters.regex(r"^gcmds\((.)\)"), group=2)
+    # async def cb_gcmds(bot, update: CallbackQuery):
+    #     """
+    #     A Callback Funtion to Connect, Disconnect, Delete, Delete Filters of, 
+    #     All Connected Chat in 1 GO
+    #     """
+    #     global CHAT_DETAILS
+    #     query_data = update.data
+    #     chat_id = update.message.chat.id
+    #     chat_name = update.message.chat.title
+    #     user_id = update.from_user.id
+        
+    #     print(user_id)
+            
+    #     chat_dict = CHAT_DETAILS.get(str(chat_id))
+    #     chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    #     if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+    #         chat_admins = await admin_list(chat_id, bot, update)
+
+    #     if user_id not in chat_admins:
+    #         print(user_id)
+    #         print(chat_admins)
+    #         return
+        
+    #     chat_id, action = re.findall(r"gcmds\((.)\)", query_data)[0].split("|", 1)
+        
+    #     if action == "conn":
+    #         await db.add_all_chat_as_active(chat_id)
+    #         await update.answer("Sucessfully Made All Chat Connection Active.....")
+        
+    #     elif action == "disconn":
+    #         await db.delall_active(chat_id)
+    #         await update.answer("Sucessfully Disabled All Active Chats.....")
+
+    #     elif action == "c_delete":
+    #         await db.delete_all(chat_id)
+    #         await update.answer("Sucessfully Deleted All Data About This Group From DB")
+        
+    #     elif action == "f_delete":
+    #         await db.delall_filters(chat_id)
+    #         await update.answer("Sucessfully Deleted All Files Connected With This Chat...")
+        
+
+        
+    #     f_count = await db.tf_count(chat_id) 
+    #     connected_chats = await db.find_chat(chat_id)
+    #     active_chats = await db.find_active(chat_id)
+        
+    #     db_cids = None
+    #     db_cnames = None
+    #     total_chats = 0
+        
+    #     if connected_chats: # Checks for active chats connected to a chat
+    #         dicts = connected_chats["chat_ids"]
+    #         adicts = active_chats["chats"]
+    #         adb_cids = [ int(x["chat_id"]) for x in adicts ]
+    #         db_cids = []
+    #         db_cnames = []
+    #         for x in dicts:
+    #             cid = x["chat_id"]
+    #             cname = x["chat_name"]
+                
+    #             db_cids.append(cid)
+    #             if cid in adb_cids:
+    #                 cname + " (A)"
+    #             db_cnames.append(db_cnames)
+        
+    #         total_chats = len(db_cids)
+
+    #     text=f"Info About All Connected Of {chat_name}\n"
+    #     text+=f"\nTotal Connected Chats: {total_chats}"
+        
+    #     text+=f"\nChannel Names:\n"
+        
+    #     for ch in db_cnames:
+    #         text+=f"                   {ch}\n"
+            
+    #     text+=f"\nChannel ID's:\n"
+        
+    #     for ch in db_cnames:
+    #         text+=f"\n                 {ch}\n"
+        
+    #     text+=f"\nTotal Files In DB: {f_count}\n"
+
+
+
+    #     buttons = [ 
+    #                 [
+    #                     InlineKeyboardButton
+    #                         (
+    #                             "πŸ’  Connect All πŸ’ ", callback_data=f"warn({chat_id}|conn|gcmds)"
+    #                         ),
+                        
+    #                     InlineKeyboardButton
+    #                         (
+    #                             "🚨 Disconnect All 🚨", callback_data=f"warn({chat_id}|disconn|gcmds)"
+    #                         )
+    #                 ]
+    #     ]
+
+
+    #     buttons.append(
+    #             [                    
+    #                 InlineKeyboardButton
+    #                     (
+    #                         "Delete All Chats ❌", callback_data=f"warn({chat_id}|c_delete|gcmds)"
+    #                     )
+    #             ]
+    #     )
+
+
+    #     buttons.append(
+    #             [
+    #                 InlineKeyboardButton
+    #                     (
+    #                         "Delete All Filters ⚠", callback_data=f"warn({chat_id}|f_delete|gcmds)"
+    #                     )
+    #             ]
+    #     )
+        
+    #     buttons.append(
+    #             [
+    #                 InlineKeyboardButton
+    #                     (
+    #                         "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
+    #                     )
+    #             ]
+    #     )
+
+    #     reply_markup = InlineKeyboardMarkup(buttons)
+            
+    #     await update.message.edit_text(
+    #             text, reply_markup=reply_markup, parse_mode="html"
+    #         )
+
diff --git a/bot/plugins/Callbacks/Configure Btn/__init__.py b/bot/plugins/Callbacks/Configure Btn/__init__.py
new file mode 100644
index 0000000..ac2f88d
--- /dev/null
+++ b/bot/plugins/Callbacks/Configure Btn/__init__.py	
@@ -0,0 +1,14 @@
+from .. import (
+    FIND,
+    
+    recacher,
+    
+    admin_list,
+    Database,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK,
+    remove_emoji,
+    time_formatter,
+    gen_invite_links,
+)
diff --git a/bot/plugins/Callbacks/Configure Btn/config_main_cb.py b/bot/plugins/Callbacks/Configure Btn/config_main_cb.py
new file mode 100644
index 0000000..9fd569a
--- /dev/null
+++ b/bot/plugins/Callbacks/Configure Btn/config_main_cb.py	
@@ -0,0 +1,142 @@
+import re
+import time
+import asyncio
+
+from pyrogram import Client, filters
+from pyrogram.errors import FloodWait, UserNotParticipant
+from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
+
+from . import (
+    FIND,
+    admin_list,
+    Database,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK,
+    remove_emoji,
+    time_formatter,
+    gen_invite_links,
+)
+
+db = Database()
+
+
+@Client.on_callback_query(filters.regex(r"config\((.+)\)"), group=2)
+async def cb_config(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Chaning The Number Of Total Pages / 
+    Total Results / Results Per pages / Enable or Diable Invite Link /
+    Enable or Disable PM File Chat
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    chat_name = remove_emoji(update.message.chat.title)
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    chat_id = re.findall(r"config\((.+)\)", query_data)[0]
+    
+    settings = await db.find_chat(int(chat_id))
+    
+    mp_count = settings["configs"]["max_pages"]
+    mf_count = settings["configs"]["max_results"]
+    mr_count = settings["configs"]["max_per_page"]
+    show_invite = settings["configs"]["show_invite_link"]
+    pm_file_chat  = settings["configs"].get("pm_fchat", False)
+    accuracy_point = settings["configs"].get("accuracy", 0.80)
+    
+    text=f"Configure Your {chat_name} Group's Filter Settings...\n"
+    
+    text+=f"\n{chat_name} Current Settings:\n"
+
+    text+=f"\n - Max Filter: {mf_count}\n"
+    
+    text+=f"\n - Max Pages: {mp_count}\n"
+    
+    text+=f"\n - Max Filter Per Page: {mr_count}\n"
+
+    text+=f"\n - Accuracy Percentage: {accuracy_point}\n"
+    
+    text+=f"\n - Show Invitation Link: {show_invite}\n"
+    
+    text+=f"\n - Provide File In Bot PM: {pm_file_chat}\n"
+    
+    text+="\nAdjust Above Value Using Buttons Below... "
+    buttons=[
+        [
+            InlineKeyboardButton
+                (
+                    "Filter Per Page", callback_data=f"mr_count({mr_count}|{chat_id})"
+                ), 
+    
+            InlineKeyboardButton
+                (
+                    "Max Pages",       callback_data=f"mp_count({mp_count}|{chat_id})"
+                )
+        ]
+    ]
+
+
+    buttons.append(
+        [
+            InlineKeyboardButton
+                (
+                    "Total Filter Count", callback_data=f"mf_count({mf_count}|{chat_id})"
+                )
+        ]
+    )
+
+
+    buttons.append(
+        [                
+             InlineKeyboardButton
+                (
+                    "Show Invite Links", callback_data=f"show_invites({show_invite}|{chat_id})"
+                ),
+
+            InlineKeyboardButton
+                (
+                    "Bot File Chat", callback_data=f"inPM({pm_file_chat}|{chat_id})"
+                )
+        ]
+    )
+
+
+    buttons.append(
+        [
+            InlineKeyboardButton
+                (
+                    "Result's Accuracy", callback_data=f"accuracy({accuracy_point}|{chat_id})"
+                )
+        ]
+    )
+
+
+    buttons.append(
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data=f"settings"
+                )
+        ]
+    )
+    
+    
+    reply_markup=InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text, 
+        reply_markup=reply_markup, 
+        parse_mode="html"
+    )
+
+
diff --git a/bot/plugins/Callbacks/Configure Btn/config_sub_cb.py b/bot/plugins/Callbacks/Configure Btn/config_sub_cb.py
new file mode 100644
index 0000000..24d4293
--- /dev/null
+++ b/bot/plugins/Callbacks/Configure Btn/config_sub_cb.py	
@@ -0,0 +1,463 @@
+import re
+import time
+import asyncio
+
+from pyrogram import Client, filters
+from pyrogram.errors import FloodWait, UserNotParticipant
+from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
+
+from . import (
+    FIND, 
+    recacher,
+    Database,
+    admin_list,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK, 
+    remove_emoji,
+    gen_invite_links,
+)
+
+db = Database()
+
+
+@Client.on_callback_query(filters.regex(r"mr_count\((.+)\)"), group=2)
+async def cb_max_buttons(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Changing The Count Of Result To Be Shown Per Page
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    chat_name = remove_emoji(update.message.chat.title)
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    count, chat_id = re.findall(r"mr_count\((.+)\)", query_data)[0].split("|", 1)
+
+    text = f"Choose Your Desired 'Max Filter Count Per Page' For Every Filter Results Shown In {chat_name}"
+
+    buttons = [
+        [
+            InlineKeyboardButton
+                (
+                    "5 Filters", callback_data=f"set(per_page|5|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "10 Filters", callback_data=f"set(per_page|10|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "15 Filters", callback_data=f"set(per_page|15|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "20 Filters", callback_data=f"set(per_page|20|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "25 Filters", callback_data=f"set(per_page|25|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "30 Filters", callback_data=f"set(per_page|30|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data=f"config({chat_id})"
+                )
+        ]
+    ]
+
+    reply_markup = InlineKeyboardMarkup(buttons)
+
+    await update.message.edit_text(
+        text, reply_markup=reply_markup, parse_mode="html"
+    )
+
+
+
+@Client.on_callback_query(filters.regex(r"mp_count\((.+)\)"), group=2)
+async def cb_max_page(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Changing The Count Of Maximum Result Pages To Be Shown
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    chat_name = remove_emoji(update.message.chat.title)
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    count, chat_id = re.findall(r"mp_count\((.+)\)", query_data)[0].split("|", 1)
+    
+    text = f"Choose Your Desired 'Max Filter Page Count' For Every Filter Results Shown In {chat_name}"
+    
+    buttons = [
+
+        [
+            InlineKeyboardButton
+                (
+                    "2 Pages", callback_data=f"set(pages|2|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "4 Pages", callback_data=f"set(pages|4|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "6 Pages", callback_data=f"set(pages|6|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "8 Pages", callback_data=f"set(pages|8|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "10 Pages", callback_data=f"set(pages|10|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data=f"config({chat_id})"
+                )
+        ]
+
+    ]
+    
+    reply_markup = InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text, reply_markup=reply_markup, parse_mode="html"
+    )
+
+
+
+@Client.on_callback_query(filters.regex(r"mf_count\((.+)\)"), group=2)
+async def cb_max_results(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Changing The Count Of Maximum Files TO Be Fetched From Database
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    chat_name = remove_emoji(update.message.chat.title)
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    count, chat_id = re.findall(r"mf_count\((.+)\)", query_data)[0].split("|", 1)
+
+    text = f"Choose Your Desired 'Max Filter' To Be Fetched From DB For Every Filter Results Shown In {chat_name}"
+
+    buttons = [
+
+        [
+            InlineKeyboardButton
+                (
+                    "50 Results", callback_data=f"set(results|50|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "100 Results", callback_data=f"set(results|100|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "150 Results", callback_data=f"set(results|150|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "200 Results", callback_data=f"set(results|200|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "250 Results", callback_data=f"set(results|250|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "300 Results", callback_data=f"set(results|300|{chat_id}|{count})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data=f"config({chat_id})"
+                )
+        ]
+    ]
+
+    reply_markup = InlineKeyboardMarkup(buttons)
+
+    await update.message.edit_text(
+        text, reply_markup=reply_markup, parse_mode="html"
+    )
+
+
+
+@Client.on_callback_query(filters.regex(r"show_invites\((.+)\)"), group=2)
+async def cb_show_invites(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Enabling Or Diabling Invite Link Buttons
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    value, chat_id = re.findall(r"show_invites\((.+)\)", query_data)[0].split("|", 1)
+    
+    value = True if value=="True" else False
+    
+    if value:
+        buttons= [
+            [
+                InlineKeyboardButton
+                    (
+                        "Disable ❌", callback_data=f"set(showInv|False|{chat_id}|{value})"
+                    )
+            ],
+            [
+                InlineKeyboardButton
+                    (
+                        "Back πŸ”™", callback_data=f"config({chat_id})"
+                    )
+            ]
+        ]
+    
+    else:
+        buttons =[
+            [
+                InlineKeyboardButton
+                    (
+                        "Enable βœ”", callback_data=f"set(showInv|True|{chat_id}|{value})"
+                    )
+            ],
+            [
+                InlineKeyboardButton
+                    (
+                        "Back πŸ”™", callback_data=f"config({chat_id})"
+                    )
+            ]
+        ]
+    
+    text=f"This Config Will Help You To Show Invitation Link Of All Active Chats Along With The Filter Results For The Users To Join....."
+    
+    reply_markup=InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text,
+        reply_markup=reply_markup,
+        parse_mode="html"
+    )
+
+
+
+@Client.on_callback_query(filters.regex(r"inPM\((.+)\)"), group=2)
+async def cb_pm_file(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Enabling Or Diabling File Transfer Through Bot PM
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    value, chat_id = re.findall(r"inPM\((.+)\)", query_data)[0].split("|", 1)
+
+    value = True if value=="True" else False
+    
+    if value:
+        buttons= [
+            [
+                InlineKeyboardButton
+                    (
+                        "Disable ❎", callback_data=f"set(inPM|False|{chat_id}|{value})"
+                    )
+            ],
+            [
+                InlineKeyboardButton
+                    (
+                        "Back πŸ”™", callback_data=f"config({chat_id})"
+                    )
+            ]
+        ]
+    
+    else:
+        buttons =[
+            [
+                InlineKeyboardButton
+                    (
+                        "Enable βœ…", callback_data=f"set(inPM|True|{chat_id}|{value})"
+                    )
+            ],
+            [
+                InlineKeyboardButton
+                    (
+                        "Back πŸ”™", callback_data=f"config({chat_id})"
+                    )
+            ]
+        ]
+    
+    text=f"This Config Will Help You To Enable/Disable File Transfer Through Bot PM Without Redirecting Them To Channel...."
+    
+    reply_markup=InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text,
+        reply_markup=reply_markup,
+        parse_mode="html"
+    )
+
+
+
+@Client.on_callback_query(filters.regex(r"accuracy\((.+)\)"), group=2)
+async def cb_accuracy(bot, update: CallbackQuery):
+    """
+    A Callaback Funtion to control the accuracy of matching results
+    that the bot should return for a query....
+    """
+    global CHAT_DETAILS
+    chat_id = update.message.chat.id
+    chat_name = update.message.chat.title
+    user_id = update.from_user.id
+    query_data = update.data
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+    
+    if user_id not in chat_admins:
+        return
+
+    val, chat_id = re.findall(r"accuracy\((.+)\)", query_data)[0].split("|", 1)
+    
+    text = f"Choose Your Desired 'Accuracy Perceentage' For Every Filter Results Shown In {chat_name}\n\n"
+    text+= f"NB: Higher The Value Better Matching Results Will Be Provided... And If Value Is Lower It Will Show More Results \
+        Which Is Fimilary To Query Search (Wont Be Accurate)...."
+
+    buttons = [
+        [
+            InlineKeyboardButton
+                (
+                    "100 %", callback_data=f"set(accuracy|1.00|{chat_id}|{val})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "80 %", callback_data=f"set(accuracy|0.80|{chat_id}|{val})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "65 %", callback_data=f"set(accuracy|0.65|{chat_id}|{val})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "60 %", callback_data=f"set(accuracy|0.60|{chat_id}|{val})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "55 %", callback_data=f"set(accuracy|0.55|{chat_id}|{val})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "50 %", callback_data=f"set(accuracy|0.50|{chat_id}|{val})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data=f"config({chat_id})"
+                )
+        ]
+    ]
+
+    reply_markup = InlineKeyboardMarkup(buttons)
+
+    await update.message.edit_text(
+        text, reply_markup=reply_markup, parse_mode="html"
+    )
+
diff --git a/bot/plugins/Callbacks/Status Btn/__init__.py b/bot/plugins/Callbacks/Status Btn/__init__.py
new file mode 100644
index 0000000..ac2f88d
--- /dev/null
+++ b/bot/plugins/Callbacks/Status Btn/__init__.py	
@@ -0,0 +1,14 @@
+from .. import (
+    FIND,
+    
+    recacher,
+    
+    admin_list,
+    Database,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK,
+    remove_emoji,
+    time_formatter,
+    gen_invite_links,
+)
diff --git a/bot/plugins/Callbacks/Status Btn/status_main_cb.py b/bot/plugins/Callbacks/Status Btn/status_main_cb.py
new file mode 100644
index 0000000..f07eeed
--- /dev/null
+++ b/bot/plugins/Callbacks/Status Btn/status_main_cb.py	
@@ -0,0 +1,72 @@
+import re
+import time
+import asyncio
+
+from pyrogram import Client, filters
+from pyrogram.errors import FloodWait, UserNotParticipant
+from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
+
+from . import (
+    FIND, 
+    recacher,
+    Database,
+    admin_list,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK, 
+    remove_emoji,
+    gen_invite_links,
+)
+
+db = Database()
+
+@Client.on_callback_query(filters.regex(r"status\((.+)\)"), group=2)
+async def cb_status(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Showing Overall Status Of A Group
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    chat_name = remove_emoji(update.message.chat.title)
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+    
+    chat_id = re.findall(r"status\((.+)\)", query_data)[0]
+    
+    total_filters, total_chats, total_achats = await db.status(chat_id)
+    
+    text = f"Status Of {chat_name}\n"
+    text += f"\nTotal Connected Chats: {total_chats}\n"
+    text += f"\nTotal Active Chats: {total_achats}\n"
+    text += f"\nTotal Filters: {total_filters}"
+    
+    buttons = [
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data="settings"
+                ),
+            
+            InlineKeyboardButton
+                (
+                    "Close πŸ”", callback_data="close"
+                )
+        ]
+    ]
+    
+    reply_markup = InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text, reply_markup=reply_markup, parse_mode="html"
+    )
+
+
diff --git a/bot/plugins/Callbacks/Types Btn/__init__.py b/bot/plugins/Callbacks/Types Btn/__init__.py
new file mode 100644
index 0000000..a4f0a15
--- /dev/null
+++ b/bot/plugins/Callbacks/Types Btn/__init__.py	
@@ -0,0 +1,14 @@
+from .. import (
+    FIND,
+    
+    recacher,
+    
+    admin_list,
+    Database,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK,
+    remove_emoji,
+    time_formatter,
+    gen_invite_links,
+)
\ No newline at end of file
diff --git a/bot/plugins/Callbacks/Types Btn/typs_main_cb.py b/bot/plugins/Callbacks/Types Btn/typs_main_cb.py
new file mode 100644
index 0000000..53826fd
--- /dev/null
+++ b/bot/plugins/Callbacks/Types Btn/typs_main_cb.py	
@@ -0,0 +1,231 @@
+import re
+import time
+import asyncio
+
+from pyrogram import Client, filters
+from pyrogram.errors import FloodWait, UserNotParticipant
+from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
+
+from . import (
+    FIND, 
+    recacher,
+    Database,
+    admin_list,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK, 
+    remove_emoji,
+    gen_invite_links,
+)
+
+db = Database()
+
+
+@Client.on_callback_query(filters.regex(r"types\((.+)\)"), group=2)
+async def cb_types(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Changing The Result Types To Be Shown In While Sending Results
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    chat_name = remove_emoji(update.message.chat.title)
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    chat_id = re.findall(r"types\((.+)\)", query_data)[0]
+    
+    _types = await db.find_chat(int(chat_id))
+    
+    text=f"Filter Types Enabled/Disbled In {chat_name}\n"
+    
+    _types = _types["types"]
+    vid = _types["video"]
+    doc = _types["document"]
+    aud = _types["audio"]
+    
+    buttons = []
+    
+    if vid:
+        text+="\nVideo Index: Enabled\n"
+        v_e = "βœ…"
+        vcb_data = f"toggle({chat_id}|video|False)"
+    
+    else:
+        text+="\nVideo Index: Disabled\n"
+        v_e="❎"
+        vcb_data = f"toggle({chat_id}|video|True)"
+
+    if doc:
+        text+="\nDocument Index: Enabled\n"
+        d_e = "βœ…"
+        dcb_data = f"toggle({chat_id}|document|False)"
+
+    else:
+        text+="\nDocument Index: Disabled\n"
+        d_e="❎"
+        dcb_data = f"toggle({chat_id}|document|True)"
+
+    if aud:
+        text+="\nAudio Index: Enabled\n"
+        a_e = "βœ…"
+        acb_data = f"toggle({chat_id}|audio|False)"
+
+    else:
+        text+="\nAudio Index: Disabled\n"
+        a_e="❎"
+        acb_data = f"toggle({chat_id}|audio|True)"
+
+    
+    text+="\nBelow Buttons Will Toggle Respective Media Types As Enabled Or Disabled....\n"
+    text+="This Will Take Into Action As Soon As You Change Them...."
+    
+    buttons.append([InlineKeyboardButton(f"Video Index: {v_e}", callback_data=vcb_data)])
+    buttons.append([InlineKeyboardButton(f"Audio Index: {a_e}", callback_data=acb_data)])
+    buttons.append([InlineKeyboardButton(f"Document Index: {d_e}", callback_data=dcb_data)])
+    
+    buttons.append(
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data=f"settings"
+                )
+        ]
+    )
+    
+    reply_markup = InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text,
+        reply_markup=reply_markup, 
+        parse_mode="html"
+    )
+
+
+
+@Client.on_callback_query(filters.regex(r"toggle\((.+)\)"), group=2)
+async def cb_toggle(bot, update: CallbackQuery):
+    """
+    A Callback Funtion Support handler For types()
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+    chat_id, types, val = re.findall(r"toggle\((.+)\)", query_data)[0].split("|", 2)
+    
+    _types = await db.find_chat(int(chat_id))
+    
+    _types = _types["types"]
+    vid = _types["video"]
+    doc = _types["document"]
+    aud = _types["audio"]
+    
+    if types == "video":
+        vid = True if val=="True" else False
+    elif types == "audio":
+        aud = True if val=="True" else False
+    elif types == "document":
+        doc = True if val=="True" else False
+    
+        
+    settings = {
+        "video": vid,
+        "audio": aud,
+        "document": doc
+    }
+
+    process = await db.update_settings(chat_id, settings)
+    
+    if process:
+        await update.answer(text="Filter Types Updated Sucessfully", show_alert=True)
+    
+    else:
+        text="Something Wrong Please Check Bot Log For More Information...."
+        await update.answer(text, show_alert=True)
+        return
+    
+    _types = await db.find_chat(int(chat_id))
+    
+    text =f"Filter Types Enabled In {update.message.chat.title}\n"
+    
+    _types = _types["types"]
+    vid = _types["video"]
+    doc = _types["document"]
+    aud = _types["audio"]
+    
+    buttons = []
+    
+    if vid:
+        text+="\nVideo Index: Enabled\n"
+        v_e = "βœ…"
+        vcb_data = f"toggle({chat_id}|video|False)"
+    
+    else:
+        text+="\nVideo Index: Disabled\n"
+        v_e="❎"
+        vcb_data = f"toggle({chat_id}|video|True)"
+
+    if doc:
+        text+="\nDocument Index: Enabled\n"
+        d_e = "βœ…"
+        dcb_data = f"toggle({chat_id}|document|False)"
+
+    else:
+        text+="\nDocument Index: Disabled\n"
+        d_e="❎"
+        dcb_data = f"toggle({chat_id}|document|True)"
+
+    if aud:
+        text+="\nAudio Index: Enabled\n"
+        a_e = "βœ…"
+        acb_data = f"toggle({chat_id}|audio|False)"
+
+    else:
+        text+="\nAudio Index: Disabled\n"
+        a_e="❎"
+        acb_data = f"toggle({chat_id}|audio|True)"
+
+    
+    text+="\nBelow Buttons Will Toggle Respective Media Types As Enabled Or Disabled....\n"
+    text+="This Will Take Into Action As Soon As You Change Them...."
+    
+    buttons.append([InlineKeyboardButton(f"Video Index : {v_e}", callback_data=vcb_data)])
+    buttons.append([InlineKeyboardButton(f"Audio Index : {a_e}", callback_data=acb_data)])
+    buttons.append([InlineKeyboardButton(f"Document Index : {d_e}", callback_data=dcb_data)])
+    
+    buttons.append(
+        [
+            InlineKeyboardButton
+                (
+                    "πŸ”™ Back", callback_data=f"settings"
+                )
+        ]
+    )
+    
+    reply_markup = InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text,
+        reply_markup=reply_markup, 
+        parse_mode="html"
+    )
+
diff --git a/bot/plugins/Callbacks/__init__.py b/bot/plugins/Callbacks/__init__.py
new file mode 100644
index 0000000..7bdf284
--- /dev/null
+++ b/bot/plugins/Callbacks/__init__.py
@@ -0,0 +1,13 @@
+
+from .. import (
+    FIND,
+    recacher,
+    admin_list,
+    Database,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK,
+    remove_emoji,
+    time_formatter,
+    gen_invite_links,
+)
diff --git a/bot/plugins/Callbacks/af_main_cb.py b/bot/plugins/Callbacks/af_main_cb.py
new file mode 100644
index 0000000..d2e274c
--- /dev/null
+++ b/bot/plugins/Callbacks/af_main_cb.py
@@ -0,0 +1,485 @@
+import re
+import time
+import asyncio
+
+from pyrogram import Client, filters
+from pyrogram.errors import FloodWait, UserNotParticipant
+from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
+ 
+from . import (
+    FIND, 
+    recacher,
+    Database,
+    admin_list,
+    ACTIVE_CHATS,
+    CHAT_DETAILS,
+    INVITE_LINK, 
+    remove_emoji,
+    gen_invite_links,
+)
+
+
+db = Database()
+
+
+
+@Client.on_callback_query(filters.regex(r"navigate\((.+)\)"), group=2)
+async def cb_navg(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For The Next Button Appearing In Results
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    index_val, btn, query = re.findall(r"navigate\((.+)\)", query_data)[0].split("|", 2)
+    try:
+        ruser_id = update.message.reply_to_message.from_user.id
+    except Exception as e:
+        print(e)
+        ruser_id = None
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    # Make Admin's ID List
+    if ( chat_dict or chat_admins ) == None: 
+        chat_admins = await admin_list(chat_id, bot, update)
+    
+    # Checks if user is same as requested user or is admin
+    if not ((user_id == ruser_id) or (user_id in chat_admins)):
+        await update.answer("Nice Try ;)",show_alert=True)
+        return
+
+
+    if btn == "next":
+        index_val = int(index_val) + 1
+    elif btn == "back":
+        index_val = int(index_val) - 1
+    
+    achats = ACTIVE_CHATS[str(chat_id)]
+    configs = await db.find_chat(chat_id)
+    pm_file_chat = configs["configs"]["pm_fchat"]
+    show_invite = configs["configs"]["show_invite_link"]
+    
+    # show_invite = (False if pm_file_chat == True else show_invite) # turn show_invite to False if pm_file_chat is True
+
+    results = FIND.get(query).get("results")
+    leng = FIND.get(query).get("total_len")
+    max_pages = FIND.get(query).get("max_pages")
+    
+    try:
+        temp_results = results[index_val].copy()
+    except IndexError:
+        return # Quick FixπŸƒπŸƒ
+    except Exception as e:
+        print(e)
+        return
+
+    if ((index_val + 1 )== max_pages) or ((index_val + 1) == len(results)): # Max Pages
+        temp_results.append([
+            InlineKeyboardButton("βͺ Back", callback_data=f"navigate({index_val}|back|{query})")
+        ])
+
+    elif int(index_val) == 0:
+        pass
+
+    else:
+        temp_results.append([
+            InlineKeyboardButton("βͺ Back", callback_data=f"navigate({index_val}|back|{query})"),
+            InlineKeyboardButton("Next ⏩", callback_data=f"navigate({index_val}|next|{query})")
+        ])
+
+    if not int(index_val) == 0:    
+        temp_results.append([
+            InlineKeyboardButton(f"πŸ”° Page {index_val + 1}/{len(results) if len(results) < max_pages else max_pages} πŸ”°", callback_data="ignore")
+        ])
+    
+    if show_invite and int(index_val) !=0 :
+        
+        ibuttons = []
+        achatId = []
+        await gen_invite_links(configs, chat_id, bot, update)
+        
+        for x in achats["chats"] if isinstance(achats, dict) else achats:
+            achatId.append(int(x["chat_id"])) if isinstance(x, dict) else achatId.append(x)
+        
+        for y in INVITE_LINK.get(str(chat_id)):
+            
+            chat_id = int(y["chat_id"])
+            
+            if chat_id not in achatId:
+                continue
+            
+            chat_name = y["chat_name"]
+            invite_link = y["invite_link"]
+            
+            if ((len(ibuttons)%2) == 0):
+                ibuttons.append(
+                    [
+                        InlineKeyboardButton
+                            (
+                                f"⚜ {chat_name} ⚜", url=invite_link
+                            )
+                    ]
+                )
+
+            else:
+                ibuttons[-1].append(
+                    InlineKeyboardButton
+                        (
+                            f"⚜ {chat_name} ⚜", url=invite_link
+                        )
+                )
+            
+        for x in ibuttons:
+            temp_results.insert(0, x)
+        ibuttons = None
+        achatId = None
+    
+    reply_markup = InlineKeyboardMarkup(temp_results)
+    
+    text=f"Found {leng} Results For Your Query: {query}"
+        
+    try:
+        await update.message.edit(
+                text,
+                reply_markup=reply_markup,
+                parse_mode="html"
+        )
+        
+    except FloodWait as f: # Flood Wait Caused By Spamming Next/Back Buttons
+        await asyncio.sleep(f.x)
+        await update.message.edit(
+                text,
+                reply_markup=reply_markup,
+                parse_mode="html"
+        )
+
+
+
+@Client.on_callback_query(filters.regex(r"settings"), group=2)
+async def cb_settings(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Back Button in /settings Command
+    """
+    global CHAT_DETAILS
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins: # Check If User Is Admin
+        return
+
+    bot_status = await bot.get_me()
+    bot_fname= bot_status.first_name
+    
+    text =f"{bot_fname}'s Auto Filter Settings Pannel.....\n"
+    text+=f"\nYou Can Use This Menu To Change Connectivity And Know Status Of Your Every Connected Channel, Change Filter Types, Configure Filter Results And To Know Status Of Your Group..."
+    
+    buttons = [
+        [
+            InlineKeyboardButton
+                (
+                    "Channels", callback_data=f"channel_list({chat_id})"
+                ), 
+            
+            InlineKeyboardButton
+                (
+                    "Filter Types", callback_data=f"types({chat_id})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "Configure πŸ› ", callback_data=f"config({chat_id})"
+                )
+        ], 
+        [
+            InlineKeyboardButton
+                (
+                    "Status", callback_data=f"status({chat_id})"
+                ),
+            
+            InlineKeyboardButton
+                (
+                    "About", callback_data=f"about({chat_id})"
+                )
+        ],
+        [
+            InlineKeyboardButton
+                (
+                    "Close πŸ”", callback_data="close"
+                )
+        ]
+    ]
+
+    reply_markup = InlineKeyboardMarkup(buttons)
+
+    await update.message.edit_text(
+        text, 
+        reply_markup=reply_markup, 
+        parse_mode="html"
+        )
+
+
+
+@Client.on_callback_query(filters.regex(r"warn\((.+)\)"), group=2)
+async def cb_warn(bot, update: CallbackQuery):
+    """
+    A Callback Funtion For Acknowledging User's About What Are They Upto
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    chat_name = remove_emoji(update.message.chat.title)
+    chat_name = chat_name.encode('ascii', 'ignore').decode('ascii')[:35]
+    user_id = update.from_user.id
+
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+    
+    channel_id, channel_name, action = re.findall(r"warn\((.+)\)", query_data)[0].split("|", 2)
+    
+    if action == "connect":
+        text=f"Are You Sure You Want To Enable Connection With {channel_name}..???\n"
+        text+=f"\nThis Will Show File Links From {channel_name} While Showing Results..."
+
+
+    elif action == "disconnect":
+        text=f"Are You Sure You Want To Disable {channel_name} Connection With The Group???....\n"
+        text+=f"\nThe DB Files Will Still Be There And You Can Connect Back To This Channel Anytime From Settings Menu Without Adding Files To DB Again...\n"
+        text+=f"\nThis Disabling Just Hide Results From The Filter Results..."
+
+
+    elif action == "c_delete":
+        text=f"Are You Sure You Want To Disconnect {channel_name} From This Group??\n"
+        text+=f"\nThis Will Delete Channel And All Its Files From DB Too....!!\n"
+        text+=f"\nYou Need To Add Channel Again If You Need To Shows It Result..."
+        text+=f"\nProTip: Make Use Of Disconnect Button To Disable {channel_name} Results Temporarily...."
+
+
+    elif action=="f_delete":
+        text=f"Are You Sure That You Want To Clear All Filter From This Chat {channel_name}???\n"
+        text+=f"\nThis Will Erase All Files From DB.."
+
+
+    elif action == "gcmds" and channel_name == "conn":
+        text=f"Are You Sure You Want To Enable All Connection Of {chat_name}..???\n"
+        text+=f"\nThis Will Show File In The Results From All Chat Connections Of {chat_name}..."
+
+
+    elif action == "gcmds" and channel_name == "disconn":
+        text=f"Are You Sure You Want To Disable All Connection Of {chat_name}....???\n"
+        text+=f"\nThe DB Files Will Still Be There And You Can Connect Back To All Channel Anytime From Settings Menu Without Adding Files To DB Again...\n"
+        text+=f"\nThis Disabling Will No Longer Show Results To Any Query Unless You Enable Back Them..."
+    
+    
+    elif action == "gcmds" and channel_name == "c_delete":
+        text=f"Are You Sure You Want To Disconnect ALl COnnected Chats Of  {chat_name} ....???\n"
+        text+=f"\nThis Will Delete All Connected Channel And All Its Files From DB Too....!!\n"
+        text+=f"\nYou Need To Add Channel Again If You Need To Shows It's Results Again.....\n"
+        text+=f"\nProTip: Make Use Of Disconnect Button To Disable All Chat Results Temporarily...."
+
+
+    elif action == "gcmds" and channel_name == "f_delete":
+        text=f"Are You Sure That You Want To Clear All Filters Of {chat_name}....???\n"
+        text+=f"\nThis Will Erase All Files Of {chat_name} From DB.."
+    
+    
+    buttons = [
+        [
+            InlineKeyboardButton
+                (
+                    "Yes", callback_data=f"{action}({channel_id}|{channel_name})"
+                ), 
+            
+            InlineKeyboardButton
+                (
+                    "No", callback_data="close"
+                )
+        ]
+    ]
+    
+    reply_markup = InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text,
+        reply_markup=reply_markup,
+        parse_mode="html"
+    )
+
+
+
+@Client.on_callback_query(filters.regex(r"set\((.+)\)"), group=2)
+async def cb_set(bot, update: CallbackQuery):
+    """
+    A Callback Funtion Support For config()
+    """
+    global CHAT_DETAILS
+    query_data = update.data
+    chat_id = update.message.chat.id
+    user_id = update.from_user.id
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
+        return
+
+
+    action, val, chat_id, curr_val = re.findall(r"set\((.+)\)", query_data)[0].split("|", 3)
+
+    try:
+        val, chat_id, curr_val = float(val), int(chat_id), float(curr_val)
+    except:
+        chat_id = int(chat_id)
+    
+    if val == curr_val:
+        await update.answer("New Value Cannot Be Old Value...Please Choose Different Value...!!!", show_alert=True)
+        return
+    
+    prev = await db.find_chat(chat_id)
+
+    accuracy = float(prev["configs"].get("accuracy", 0.80))
+    max_pages = int(prev["configs"].get("max_pages"))
+    max_results = int(prev["configs"].get("max_results"))
+    max_per_page = int(prev["configs"].get("max_per_page"))
+    pm_file_chat = True if prev["configs"].get("pm_fchat") == (True or "True") else False
+    show_invite_link = True if prev["configs"].get("show_invite_link") == (True or "True") else False
+    
+    if action == "accuracy": # Scophisticated way πŸ˜‚πŸ€£
+        accuracy = val
+    
+    elif action == "pages":
+        max_pages = int(val)
+        
+    elif action == "results":
+        max_results = int(val)
+        
+    elif action == "per_page":
+        max_per_page = int(val)
+
+    elif action =="showInv":
+        show_invite_link = True if val=="True" else False
+
+    elif action == "inPM":
+        pm_file_chat = True if val=="True" else False
+        
+
+    new = dict(
+        accuracy=accuracy,
+        max_pages=max_pages,
+        max_results=max_results,
+        max_per_page=max_per_page,
+        pm_fchat=pm_file_chat,
+        show_invite_link=show_invite_link
+    )
+    
+    append_db = await db.update_configs(chat_id, new)
+    
+    if not append_db:
+        text="Something Wrong Please Check Bot Log For More Information...."
+        await update.answer(text=text, show_alert=True)
+        return
+    
+    text=f"Your Request Was Updated Sucessfully....\nNow All Upcoming Results Will Show According To This Settings..."
+        
+    buttons = [
+        [
+            InlineKeyboardButton
+                (
+                    "Back πŸ”™", callback_data=f"config({chat_id})"
+                ),
+            
+            InlineKeyboardButton
+                (
+                    "Close πŸ”", callback_data="close"
+                )
+        ]
+    ]
+    
+    reply_markup=InlineKeyboardMarkup(buttons)
+    
+    await update.message.edit_text(
+        text, reply_markup=reply_markup, parse_mode="html"
+    )
+
+
+
+@Client.on_callback_query(filters.regex(r"^(start|help|about|close)$"), group=2)
+async def callback_data(bot, update: CallbackQuery):
+
+    query_data = update.data
+
+    if query_data == "start":
+        buttons = [[
+            InlineKeyboardButton('My Dev πŸ‘¨β€πŸ”¬', url='https://t.me/CrazyBotsz'),
+            InlineKeyboardButton('Source Code 🧾', url ='https://github.com/CrazyBotsz/Adv-Auto-Filter-Bot-V2')
+        ],[
+            InlineKeyboardButton('Support πŸ› ', url='https://t.me/CrazyBotszGrp')
+        ],[
+            InlineKeyboardButton('Help βš™', callback_data="help")
+        ]]
+    
+        reply_markup = InlineKeyboardMarkup(buttons)
+        
+        await update.message.edit_text(
+            Translation.START_TEXT.format(update.from_user.mention),
+            reply_markup=reply_markup,
+            parse_mode="html",
+            disable_web_page_preview=True
+        )
+
+
+    elif query_data == "help":
+        buttons = [[
+            InlineKeyboardButton('Home ⚑', callback_data='start'),
+            InlineKeyboardButton('About 🚩', callback_data='about')
+        ],[
+            InlineKeyboardButton('Close πŸ”', callback_data='close')
+        ]]
+    
+        reply_markup = InlineKeyboardMarkup(buttons)
+        
+        await update.message.edit_text(
+            Translation.HELP_TEXT,
+            reply_markup=reply_markup,
+            parse_mode="html",
+            disable_web_page_preview=True
+        )
+
+
+    elif query_data == "about": 
+        buttons = [[
+            InlineKeyboardButton('Home ⚑', callback_data='start'),
+            InlineKeyboardButton('Close πŸ”', callback_data='close')
+        ]]
+        
+        reply_markup = InlineKeyboardMarkup(buttons)
+        
+        await update.message.edit_text(
+            Translation.ABOUT_TEXT,
+            reply_markup=reply_markup,
+            parse_mode="html"
+        )
+
+
+    elif query_data == "close":
+        await update.message.delete()
+        
diff --git a/bot/plugins/__init__.py b/bot/plugins/__init__.py
new file mode 100644
index 0000000..1778cb8
--- /dev/null
+++ b/bot/plugins/__init__.py
@@ -0,0 +1,5 @@
+from .. import CHAT_DETAILS
+from .auto_filter import ACTIVE_CHATS, INVITE_LINK, FIND, recacher, gen_invite_links
+from .settings import remove_emoji
+from .utils import time_formatter, admin_list
+from ..database import Database
diff --git a/bot/plugins/auto_filter.py b/bot/plugins/auto_filter.py
index c524842..4f1d25c 100644
--- a/bot/plugins/auto_filter.py
+++ b/bot/plugins/auto_filter.py
@@ -55,7 +55,7 @@ async def auto_filter(bot, update):
     max_per_page = configs["configs"]["max_per_page"] # maximum buttom per page 
     show_invite = configs["configs"]["show_invite_link"] # should or not show active chat invite link
     
-    show_invite = (False if pm_file_chat == True else show_invite) # turn show_invite to False if pm_file_chat is True
+    # show_invite = (False if pm_file_chat == True else show_invite) # turn show_invite to False if pm_file_chat is True
     
     filters = await db.get_filters(group_id, query)
     
@@ -64,6 +64,25 @@ async def auto_filter(bot, update):
             file_name = filter.get("file_name")
             file_type = filter.get("file_type")
             file_link = filter.get("file_link")
+            file_size = int(filter.get("file_size", "0"))
+            
+            # from B to MiB
+            
+            if file_size < 1024:
+                file_size = f"[{file_size} B]"
+            elif file_size < (1024**2):
+                file_size = f"[{str(round(file_size/1024, 2))} KiB] "
+            elif file_size < (1024**3):
+                file_size = f"[{str(round(file_size/(1024**2), 2))} MiB] "
+            elif file_size < (1024**4):
+                file_size = f"[{str(round(file_size/(1024**3), 2))} GiB] "
+            
+            
+            file_size = "" if file_size == ("[0 B]") else file_size
+            
+            # add emoji down below inside " " if you want..
+            button_text = f"{file_size}{file_name}"
+            
             
             if file_type == "video":
                 if allow_video: 
@@ -102,7 +121,7 @@ async def auto_filter(bot, update):
             
             results.append(
                 [
-                    InlineKeyboardButton(file_name, url=file_link)
+                    InlineKeyboardButton(button_text, url=file_link)
                 ]
             )
         
@@ -174,8 +193,9 @@ async def auto_filter(bot, update):
                 
             for x in ibuttons:
                 result[0].insert(0, x) #Insert invite link buttons at first of page
-                
-            ibuttons = None # Free Up Memory...
+            
+            # Free Up Memory...
+            ibuttons = None
             achatId = None
             
             
diff --git a/bot/plugins/callback.py b/bot/plugins/callback.py
deleted file mode 100644
index eefa58d..0000000
--- a/bot/plugins/callback.py
+++ /dev/null
@@ -1,1710 +0,0 @@
-import re
-import time
-import asyncio
-
-from pyrogram import Client, filters
-from pyrogram.errors import FloodWait, UserNotParticipant
-from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
-
-from bot import start_uptime, Translation, VERIFY # pylint: disable=import-error
-from bot.plugins.auto_filter import ( # pylint: disable=import-error
-    FIND, 
-    INVITE_LINK, 
-    ACTIVE_CHATS,
-    recacher,
-    gen_invite_links
-    )
-from bot.plugins.settings import( # pylint: disable=import-error
-    remove_emoji
-)
-from bot.database import Database # pylint: disable=import-error
-
-db = Database()
-
-
-@Client.on_callback_query(filters.regex(r"navigate\((.+)\)"), group=2)
-async def cb_navg(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For The Next Button Appearing In Results
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    index_val, btn, query = re.findall(r"navigate\((.+)\)", query_data)[0].split("|", 2)
-    try:
-        ruser_id = update.message.reply_to_message.from_user.id
-    except Exception as e:
-        print(e)
-        ruser_id = None
-    
-    admin_list = VERIFY.get(str(chat_id))
-    if admin_list == None: # Make Admin's ID List
-        
-        admin_list = []
-        
-        async for x in bot.iter_chat_members(chat_id=chat_id, filter="administrators"):
-            admin_id = x.user.id 
-            admin_list.append(admin_id)
-            
-        admin_list.append(None) # Just For Anonymous Admin....
-        VERIFY[str(chat_id)] = admin_list
-    
-    if not ((user_id == ruser_id) or (user_id in admin_list)): # Checks if user is same as requested user or is admin
-        await update.answer("Nice Try ;)",show_alert=True)
-        return
-
-
-    if btn == "next":
-        index_val = int(index_val) + 1
-    elif btn == "back":
-        index_val = int(index_val) - 1
-    
-    achats = ACTIVE_CHATS[str(chat_id)]
-    configs = await db.find_chat(chat_id)
-    pm_file_chat = configs["configs"]["pm_fchat"]
-    show_invite = configs["configs"]["show_invite_link"]
-    show_invite = (False if pm_file_chat == True else show_invite)
-    
-    results = FIND.get(query).get("results")
-    leng = FIND.get(query).get("total_len")
-    max_pages = FIND.get(query).get("max_pages")
-    
-    try:
-        temp_results = results[index_val].copy()
-    except IndexError:
-        return # Quick FixπŸƒπŸƒ
-    except Exception as e:
-        print(e)
-        return
-
-    if ((index_val + 1 )== max_pages) or ((index_val + 1) == len(results)): # Max Pages
-        temp_results.append([
-            InlineKeyboardButton("βͺ Back", callback_data=f"navigate({index_val}|back|{query})")
-        ])
-
-    elif int(index_val) == 0:
-        pass
-
-    else:
-        temp_results.append([
-            InlineKeyboardButton("βͺ Back", callback_data=f"navigate({index_val}|back|{query})"),
-            InlineKeyboardButton("Next ⏩", callback_data=f"navigate({index_val}|next|{query})")
-        ])
-
-    if not int(index_val) == 0:    
-        temp_results.append([
-            InlineKeyboardButton(f"πŸ”° Page {index_val + 1}/{len(results) if len(results) < max_pages else max_pages} πŸ”°", callback_data="ignore")
-        ])
-    
-    if show_invite and int(index_val) !=0 :
-        
-        ibuttons = []
-        achatId = []
-        await gen_invite_links(configs, chat_id, bot, update)
-        
-        for x in achats["chats"] if isinstance(achats, dict) else achats:
-            achatId.append(int(x["chat_id"])) if isinstance(x, dict) else achatId.append(x)
-        
-        for y in INVITE_LINK.get(str(chat_id)):
-            
-            chat_id = int(y["chat_id"])
-            
-            if chat_id not in achatId:
-                continue
-            
-            chat_name = y["chat_name"]
-            invite_link = y["invite_link"]
-            
-            if ((len(ibuttons)%2) == 0):
-                ibuttons.append(
-                    [
-                        InlineKeyboardButton
-                            (
-                                f"⚜ {chat_name} ⚜", url=invite_link
-                            )
-                    ]
-                )
-
-            else:
-                ibuttons[-1].append(
-                    InlineKeyboardButton
-                        (
-                            f"⚜ {chat_name} ⚜", url=invite_link
-                        )
-                )
-            
-        for x in ibuttons:
-            temp_results.insert(0, x)
-        ibuttons = None
-        achatId = None
-    
-    reply_markup = InlineKeyboardMarkup(temp_results)
-    
-    text=f"Found {leng} Results For Your Query: {query}"
-        
-    try:
-        await update.message.edit(
-                text,
-                reply_markup=reply_markup,
-                parse_mode="html"
-        )
-        
-    except FloodWait as f: # Flood Wait Caused By Spamming Next/Back Buttons
-        await asyncio.sleep(f.x)
-        await update.message.edit(
-                text,
-                reply_markup=reply_markup,
-                parse_mode="html"
-        )
-
-
-
-@Client.on_callback_query(filters.regex(r"settings"), group=2)
-async def cb_settings(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Back Button in /settings Command
-    """
-    global VERIFY
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)): # Check If User Is Admin
-        return
-
-    bot_status = await bot.get_me()
-    bot_fname= bot_status.first_name
-    
-    text =f"{bot_fname}'s Settings Pannel.....\n"
-    text+=f"\nYou Can Use This Menu To Change Connectivity And Know Status Of Your Every Connected Channel, Change Filter Types, Configure Filter Results And To Know Status Of Your Group..."
-    
-    buttons = [
-        [
-            InlineKeyboardButton
-                (
-                    "Channels", callback_data=f"channel_list({chat_id})"
-                ), 
-            
-            InlineKeyboardButton
-                (
-                    "Filter Types", callback_data=f"types({chat_id})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "Configure πŸ› ", callback_data=f"config({chat_id})"
-                )
-        ], 
-        [
-            InlineKeyboardButton
-                (
-                    "Status", callback_data=f"status({chat_id})"
-                ),
-            
-            InlineKeyboardButton
-                (
-                    "About", callback_data=f"about({chat_id})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "Close πŸ”", callback_data="close"
-                )
-        ]
-    ]
-
-    reply_markup = InlineKeyboardMarkup(buttons)
-
-    await update.message.edit_text(
-        text, 
-        reply_markup=reply_markup, 
-        parse_mode="html"
-        )
-
-
-
-@Client.on_callback_query(filters.regex(r"warn\((.+)\)"), group=2)
-async def cb_warn(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Acknowledging User's About What Are They Upto
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    chat_name = remove_emoji(update.message.chat.title)
-    chat_name = chat_name.encode('ascii', 'ignore').decode('ascii')[:35]
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-    
-    channel_id, channel_name, action = re.findall(r"warn\((.+)\)", query_data)[0].split("|", 2)
-    
-    if action == "connect":
-        text=f"Are You Sure You Want To Enable Connection With {channel_name}..???\n"
-        text+=f"\nThis Will Show File Links From {channel_name} While Showing Results..."
-    
-    elif action == "disconnect":
-        text=f"Are You Sure You Want To Disable {channel_name} Connection With The Group???....\n"
-        text+=f"\nThe DB Files Will Still Be There And You Can Connect Back To This Channel Anytime From Settings Menu Without Adding Files To DB Again...\n"
-        text+=f"\nThis Disabling Just Hide Results From The Filter Results..."
-    
-    elif action == "c_delete":
-        text=f"Are You Sure You Want To Disconnect {channel_name} From This Group??\n"
-        text+=f"\nThis Will Delete Channel And All Its Files From DB Too....!!\n"
-        text+=f"\nYou Need To Add Channel Again If You Need To Shows It Result..."
-        
-    
-    elif action=="f_delete":
-        text=f"Are You Sure That You Want To Clear All Filter From This Chat {channel_name}???\n"
-        text+=f"\nThis Will Erase All Files From DB.."
-        
-    buttons = [
-        [
-            InlineKeyboardButton
-                (
-                    "Yes", callback_data=f"{action}({channel_id}|{channel_name})"
-                ), 
-            
-            InlineKeyboardButton
-                (
-                    "No", callback_data="close"
-                )
-        ]
-    ]
-    
-    reply_markup = InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text,
-        reply_markup=reply_markup,
-        parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"channel_list\((.+)\)"), group=2)
-async def cb_channel_list(bot, update: CallbackQuery):    
-    """
-    A Callback Funtion For Displaying All Channel List And Providing A Menu To Navigate
-    To Every COnnect Chats For Furthur Control
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    chat_name = remove_emoji(update.message.chat.title)
-    chat_name = chat_name.encode('ascii', 'ignore').decode('ascii')[:35]
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-        
-    chat_id =  re.findall(r"channel_list\((.+)\)", query_data)[0]
-    
-    text = "Semms Like You Dont Have Any Channel Connected...\n\nConnect To Any Chat To Continue With This Settings..."
-    
-    db_list = await db.find_chat(int(chat_id))
-    
-    channel_id_list = []
-    channel_name_list = []
-    
-    if db_list:
-        for x in db_list["chat_ids"]:
-            channel_id = x["chat_id"]
-            channel_name = x["chat_name"]
-            
-            try:
-                if (channel_id == None or channel_name == None):
-                    continue
-            except:
-                break
-            
-            channel_name = remove_emoji(channel_name).encode('ascii', 'ignore').decode('ascii')[:35]
-            channel_id_list.append(channel_id)
-            channel_name_list.append(channel_name)
-        
-    buttons = []
-
-    buttons.append(
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data="settings"
-                ),
-            
-            InlineKeyboardButton
-                (
-                    "Close πŸ”", callback_data="close"
-                )
-        ]
-    ) 
-
-    if channel_name_list:
-        
-        text=f"List Of Connected Channels With {chat_name} With There Settings..\n"
-    
-        for x in range(1, (len(channel_name_list)+1)):
-            text+=f"\n{x}. {channel_name_list[x-1]}\n"
-    
-        text += "\nChoose Appropriate Buttons To Navigate Through Respective Channels"
-    
-        
-        btn_key = [
-            "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣", "πŸ”Ÿ", 
-            "1️⃣1️⃣", "1️⃣2️⃣", "1️⃣3️⃣", "1️⃣4️⃣", "1️⃣5️⃣", "1️⃣6️⃣", "1️⃣7️⃣", 
-            "1️⃣8️⃣", "1️⃣9️⃣", "2️⃣0️⃣" # Just In Case πŸ˜‚πŸ€£
-        ]
-    
-        for i in range(1, (len(channel_name_list) + 1)): # Append The Index Number of Channel In Just A Single Line
-            if i == 1:
-                buttons.insert(0,
-                    [
-                    InlineKeyboardButton
-                        (
-                            btn_key[i-1], callback_data=f"info({channel_id_list[i-1]}|{channel_name_list[i-1]})"
-                        )
-                    ]
-                )
-        
-            else:
-                buttons[0].append(
-                    InlineKeyboardButton
-                        (
-                            btn_key[i-1], callback_data=f"info({channel_id_list[i-1]}|{channel_name_list[i-1]})"
-                        )
-                )
-    
-    reply_markup=InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-            text = text,
-            reply_markup=reply_markup,
-            parse_mode="html"
-        )
-
-
-
-@Client.on_callback_query(filters.regex(r"info\((.+)\)"), group=2)
-async def cb_info(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Displaying Details Of The Connected Chat And Provide
-    Ability To Connect / Disconnect / Delete / Delete Filters of That Specific Chat
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    channel_id, channel_name = re.findall(r"info\((.+)\)", query_data)[0].split("|", 1)
-    
-    f_count = await db.cf_count(chat_id, int(channel_id)) 
-    active_chats = await db.find_active(chat_id)
-
-    if active_chats: # Checks for active chats connected to a chat
-        dicts = active_chats["chats"]
-        db_cids = [ int(x["chat_id"]) for x in dicts ]
-        
-        if int(channel_id) in db_cids:
-            active_chats = True
-            status = "Connected"
-            
-        else:
-            active_chats = False
-            status = "Disconnected"
-            
-    else:
-        active_chats = False
-        status = "Disconnected"
-
-    text=f"Info About {channel_name}\n"
-    text+=f"\nChannel Name: {channel_name}\n"
-    text+=f"\nChannel ID: {channel_id}\n"
-    text+=f"\nChannel Files: {f_count}\n"
-    text+=f"\nCurrent Status: {status}\n"
-
-
-    if active_chats:
-        buttons = [
-                    [
-                        InlineKeyboardButton
-                            (
-                                "🚨 Disconnect 🚨", callback_data=f"warn({channel_id}|{channel_name}|disconnect)"
-                            ),
-                        
-                        InlineKeyboardButton
-                            (
-                                "Delete ❌", callback_data=f"warn({channel_id}|{channel_name}|c_delete)"
-                            )
-                    ]
-        ]
-
-    else:
-        buttons = [ 
-                    [
-                        InlineKeyboardButton
-                            (
-                                "πŸ’  Connect πŸ’ ", callback_data=f"warn({channel_id}|{channel_name}|connect)"
-                            ),
-                        
-                        InlineKeyboardButton
-                            (
-                                "Delete ❌", callback_data=f"warn({channel_id}|{channel_name}|c_delete)"
-                            )
-                    ]
-        ]
-
-    buttons.append(
-            [
-                InlineKeyboardButton
-                    (
-                        "Delete Filters ⚠", callback_data=f"warn({channel_id}|{channel_name}|f_delete)"
-                    )
-            ]
-    )
-    
-    buttons.append(
-            [
-                InlineKeyboardButton
-                    (
-                        "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
-                    )
-            ]
-    )
-
-    reply_markup = InlineKeyboardMarkup(buttons)
-        
-    await update.message.edit_text(
-            text, reply_markup=reply_markup, parse_mode="html"
-        )
-
-
-
-@Client.on_callback_query(filters.regex(r"^connect\((.+)\)"), group=2)
-async def cb_connect(bot, update: CallbackQuery):
-    """
-    A Callback Funtion Helping The user To Make A Chat Active Chat Which Will
-    Make The Bot To Fetch Results From This Channel Too
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    channel_id, channel_name = re.findall(r"connect\((.+)\)", query_data)[0].split("|", 1)
-    channel_id = int(channel_id)
-    
-    f_count = await db.cf_count(chat_id, channel_id)
-    
-    add_active = await db.update_active(chat_id, channel_id, channel_name)
-    
-    if not add_active:
-        await update.answer(f"{channel_name} Is Aldready in Active Connection", show_alert=True)
-        return
-
-    text= f"Sucessfully Connected To {channel_name}\n"
-    text+=f"\nInfo About {channel_name}\n"
-    text+=f"\nChannel Name: {channel_name}\n"
-    text+=f"\nChannel ID: {channel_id}\n"
-    text+=f"\nChannel Files: {f_count}\n"
-    text+=f"\nCurrent Status: Connected\n"
-
-    buttons = [
-                [
-                    InlineKeyboardButton
-                        (
-                            "🚨 Disconnect 🚨", callback_data=f"warn({channel_id}|{channel_name}|disconnect)"
-                        ),
-                    
-                    InlineKeyboardButton
-                        (
-                            "Delete ❌", callback_data=f"warn({channel_id}|{channel_name}|c_delete)"
-                        )
-                ]
-    ]
-    
-    buttons.append(
-            [
-                InlineKeyboardButton
-                    (
-                        "Delete Filters ⚠", callback_data=f"warn({channel_id}|{channel_name}|f_delete)"
-                    )
-            ]
-    )
-    
-    buttons.append(
-            [
-                InlineKeyboardButton
-                    (
-                        "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
-                    )
-            ]
-    )
-    await recacher(chat_id, False, True, bot, update)
-    
-    reply_markup = InlineKeyboardMarkup(buttons)
-        
-    await update.message.edit_text(
-            text, reply_markup=reply_markup, parse_mode="html"
-        )
-
-
-
-@Client.on_callback_query(filters.regex(r"disconnect\((.+)\)"), group=2)
-async def cb_disconnect(bot, update: CallbackQuery):
-    """
-    A Callback Funtion Helping The user To Make A Chat inactive Chat Which Will
-    Make The Bot To Avoid Fetching Results From This Channel
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    channel_id, channel_name = re.findall(r"connect\((.+)\)", query_data)[0].split("|", 1)
-    
-    f_count = await db.cf_count(chat_id, int(channel_id))
-    
-    remove_active = await db.del_active(chat_id, int(channel_id))
-    
-    if not remove_active:
-        await update.answer("Couldnt Full Fill YOur Request...\n Report This @CrazyBotszGrp Along With Bot's Log", show_alert=True)
-        return
-    
-    text= f"Sucessfully Disconnected From {channel_name}\n"
-    text+=f"\nInfo About {channel_name}\n"
-    text+=f"\nChannel Name: {channel_name}\n"
-    text+=f"\nChannel ID: {channel_id}\n"
-    text+=f"\nChannel Files: {f_count}\n"
-    text+=f"\nCurrent Status: Disconnected\n"
-    
-    buttons = [ 
-                [
-                    InlineKeyboardButton
-                        (
-                            "πŸ’  Connect πŸ’ ", callback_data=f"warn({channel_id}|{channel_name}|connect)"
-                        ),
-                    
-                    InlineKeyboardButton
-                        (
-                            "Delete ❌", callback_data=f"warn({channel_id}|{channel_name}|c_delete)"
-                        )
-                ]
-    ]
-    
-    buttons.append(
-            [
-                InlineKeyboardButton
-                    (
-                        "Delete Filters ⚠", callback_data=f"warn({channel_id}|{channel_name}|f_delete)"
-                    )
-            ]
-    )
-    
-    buttons.append(
-            [
-                InlineKeyboardButton
-                    (
-                        "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
-                    )
-            ]
-    )
-    
-    reply_markup = InlineKeyboardMarkup(buttons)
-    
-    await recacher(chat_id, False, True, bot, update)
-
-    await update.message.edit_text(
-            text, reply_markup=reply_markup, parse_mode="html"
-        )
-
-
-
-@Client.on_callback_query(filters.regex(r"c_delete\((.+)\)"), group=2)
-async def cb_channel_delete(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Delete A Channel Connection From A Group Chat History
-    Along With All Its Filter Files
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    channel_id, channel_name = re.findall(r"c_delete\((.+)\)", query_data)[0].split("|", 1)
-    channel_id = int(channel_id)
-    
-    c_delete = await db.del_chat(chat_id, channel_id)
-    a_delete = await db.del_active(chat_id, channel_id) # pylint: disable=unused-variable
-    f_delete = await db.del_filters(chat_id, channel_id)
-
-    if (c_delete and f_delete ):
-        text=f"{channel_name} [ {channel_id} ] Has Been Sucessfully Deleted And All Its Files Were Cleared From DB...."
-
-    else:
-        text=f"Couldn't Delete Channel And All Its Files From DB Sucessfully....\nPlease Try Again After Sometimes...Also Make Sure To Check The Logs..!!"
-        await update.answer(text=text, show_alert=True)
-
-    buttons = [
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data=f"channel_list({chat_id})"
-                ),
-                
-            InlineKeyboardButton
-                (
-                    "Close πŸ”", callback_data="close"
-                )
-        ]
-    ]
-
-    await recacher(chat_id, True, True, bot, update)
-    
-    reply_markup=InlineKeyboardMarkup(buttons)
-
-    await update.message.edit_text(
-        text, reply_markup=reply_markup, parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"f_delete\((.+)\)"), group=2)
-async def cb_filters_delete(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Delete A Specific Channel's Filters Connected To A Group
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    channel_id, channel_name = re.findall(r"f_delete\((.+)\)", query_data)[0].split("|", 1)
-
-    f_delete = await db.del_filters(chat_id, int(channel_id))
-
-    if not f_delete:
-        text="Oops..!!\n\nEncountered Some Error While Deleteing Filters....\nPlease Check The Logs...."
-        await update.answer(text=text, show_alert=True)
-        return
-
-    text =f"All Filters Of {channel_id}[{channel_name}] Has Been Deleted Sucessfully From My DB.."
-
-    buttons=[
-        [
-            InlineKeyboardButton
-                (
-                    "Back", callback_data="settings"
-                ),
-            
-            InlineKeyboardButton
-                (
-                    "Close", callback_data="close"
-                )
-        ]
-    ]
-
-    reply_markup = InlineKeyboardMarkup(buttons)
-
-    await update.message.edit_text(
-        text, reply_markup=reply_markup, parse_mode="html"
-    )
-    
-
-
-@Client.on_callback_query(filters.regex(r"types\((.+)\)"), group=2)
-async def cb_types(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Changing The Result Types To Be Shown In While Sending Results
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    chat_name = remove_emoji(update.message.chat.title)
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    chat_id = re.findall(r"types\((.+)\)", query_data)[0]
-    
-    _types = await db.find_chat(int(chat_id))
-    
-    text=f"Filter Types Enabled/Disbled In {chat_name}\n"
-    
-    _types = _types["types"]
-    vid = _types["video"]
-    doc = _types["document"]
-    aud = _types["audio"]
-    
-    buttons = []
-    
-    if vid:
-        text+="\nVideo Index: Enabled\n"
-        v_e = "βœ…"
-        vcb_data = f"toggle({chat_id}|video|False)"
-    
-    else:
-        text+="\nVideo Index: Disabled\n"
-        v_e="❎"
-        vcb_data = f"toggle({chat_id}|video|True)"
-
-    if doc:
-        text+="\nDocument Index: Enabled\n"
-        d_e = "βœ…"
-        dcb_data = f"toggle({chat_id}|document|False)"
-
-    else:
-        text+="\nDocument Index: Disabled\n"
-        d_e="❎"
-        dcb_data = f"toggle({chat_id}|document|True)"
-
-    if aud:
-        text+="\nAudio Index: Enabled\n"
-        a_e = "βœ…"
-        acb_data = f"toggle({chat_id}|audio|False)"
-
-    else:
-        text+="\nAudio Index: Disabled\n"
-        a_e="❎"
-        acb_data = f"toggle({chat_id}|audio|True)"
-
-    
-    text+="\nBelow Buttons Will Toggle Respective Media Types As Enabled Or Disabled....\n"
-    text+="This Will Take Into Action As Soon As You Change Them...."
-    
-    buttons.append([InlineKeyboardButton(f"Video Index: {v_e}", callback_data=vcb_data)])
-    buttons.append([InlineKeyboardButton(f"Audio Index: {a_e}", callback_data=acb_data)])
-    buttons.append([InlineKeyboardButton(f"Document Index: {d_e}", callback_data=dcb_data)])
-    
-    buttons.append(
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data=f"settings"
-                )
-        ]
-    )
-    
-    reply_markup = InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text,
-        reply_markup=reply_markup, 
-        parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"toggle\((.+)\)"), group=2)
-async def cb_toggle(bot, update: CallbackQuery):
-    """
-    A Callback Funtion Support handler For types()
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    chat_id, types, val = re.findall(r"toggle\((.+)\)", query_data)[0].split("|", 2)
-    
-    _types = await db.find_chat(int(chat_id))
-    
-    _types = _types["types"]
-    vid = _types["video"]
-    doc = _types["document"]
-    aud = _types["audio"]
-    
-    if types == "video":
-        vid = True if val=="True" else False
-    elif types == "audio":
-        aud = True if val=="True" else False
-    elif types == "document":
-        doc = True if val=="True" else False
-    
-        
-    settings = {
-        "video": vid,
-        "audio": aud,
-        "document": doc
-    }
-
-    process = await db.update_settings(chat_id, settings)
-    
-    if process:
-        await update.answer(text="Filter Types Updated Sucessfully", show_alert=True)
-    
-    else:
-        text="Something Wrong Please Check Bot Log For More Information...."
-        await update.answer(text, show_alert=True)
-        return
-    
-    _types = await db.find_chat(int(chat_id))
-    
-    text =f"Filter Types Enabled In {update.message.chat.title}\n"
-    
-    _types = _types["types"]
-    vid = _types["video"]
-    doc = _types["document"]
-    aud = _types["audio"]
-    
-    buttons = []
-    
-    if vid:
-        text+="\nVideo Index: Enabled\n"
-        v_e = "βœ…"
-        vcb_data = f"toggle({chat_id}|video|False)"
-    
-    else:
-        text+="\nVideo Index: Disabled\n"
-        v_e="❎"
-        vcb_data = f"toggle({chat_id}|video|True)"
-
-    if doc:
-        text+="\nDocument Index: Enabled\n"
-        d_e = "βœ…"
-        dcb_data = f"toggle({chat_id}|document|False)"
-
-    else:
-        text+="\nDocument Index: Disabled\n"
-        d_e="❎"
-        dcb_data = f"toggle({chat_id}|document|True)"
-
-    if aud:
-        text+="\nAudio Index: Enabled\n"
-        a_e = "βœ…"
-        acb_data = f"toggle({chat_id}|audio|False)"
-
-    else:
-        text+="\nAudio Index: Disabled\n"
-        a_e="❎"
-        acb_data = f"toggle({chat_id}|audio|True)"
-
-    
-    text+="\nBelow Buttons Will Toggle Respective Media Types As Enabled Or Disabled....\n"
-    text+="This Will Take Into Action As Soon As You Change Them...."
-    
-    buttons.append([InlineKeyboardButton(f"Video Index : {v_e}", callback_data=vcb_data)])
-    buttons.append([InlineKeyboardButton(f"Audio Index : {a_e}", callback_data=acb_data)])
-    buttons.append([InlineKeyboardButton(f"Document Index : {d_e}", callback_data=dcb_data)])
-    
-    buttons.append(
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data=f"settings"
-                )
-        ]
-    )
-    
-    reply_markup = InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text,
-        reply_markup=reply_markup, 
-        parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"config\((.+)\)"), group=2)
-async def cb_config(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Chaning The Number Of Total Pages / 
-    Total Results / Results Per pages / Enable or Diable Invite Link /
-    Enable or Disable PM File Chat
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    chat_name = remove_emoji(update.message.chat.title)
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    chat_id = re.findall(r"config\((.+)\)", query_data)[0]
-    
-    settings = await db.find_chat(int(chat_id))
-    
-    mp_count = settings["configs"]["max_pages"]
-    mf_count = settings["configs"]["max_results"]
-    mr_count = settings["configs"]["max_per_page"]
-    show_invite = settings["configs"]["show_invite_link"]
-    pm_file_chat  = settings["configs"].get("pm_fchat", False)
-    accuracy_point = settings["configs"].get("accuracy", 0.80)
-    
-    text=f"Configure Your {chat_name} Group's Filter Settings...\n"
-    
-    text+=f"\n{chat_name} Current Settings:\n"
-
-    text+=f"\n - Max Filter: {mf_count}\n"
-    
-    text+=f"\n - Max Pages: {mp_count}\n"
-    
-    text+=f"\n - Max Filter Per Page: {mr_count}\n"
-
-    text+=f"\n - Accuracy Percentage: {accuracy_point}\n"
-    
-    text+=f"\n - Show Invitation Link: {show_invite}\n"
-    
-    text+=f"\n - Provide File In Bot PM: {pm_file_chat}\n"
-    
-    text+="\nAdjust Above Value Using Buttons Below... "
-    buttons=[
-        [
-            InlineKeyboardButton
-                (
-                    "Filter Per Page", callback_data=f"mr_count({mr_count}|{chat_id})"
-                ), 
-    
-            InlineKeyboardButton
-                (
-                    "Max Pages",       callback_data=f"mp_count({mp_count}|{chat_id})"
-                )
-        ]
-    ]
-
-
-    buttons.append(
-        [
-            InlineKeyboardButton
-                (
-                    "Total Filter Count", callback_data=f"mf_count({mf_count}|{chat_id})"
-                )
-        ]
-    )
-
-
-    buttons.append(
-        [                
-             InlineKeyboardButton
-                (
-                    "Show Invite Links", callback_data=f"show_invites({show_invite}|{chat_id})"
-                ),
-
-            InlineKeyboardButton
-                (
-                    "Bot File Chat", callback_data=f"inPM({pm_file_chat}|{chat_id})"
-                )
-        ]
-    )
-
-
-    buttons.append(
-        [
-            InlineKeyboardButton
-                (
-                    "Result's Accuracy", callback_data=f"accuracy({accuracy_point}|{chat_id})"
-                )
-        ]
-    )
-
-
-    buttons.append(
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data=f"settings"
-                )
-        ]
-    )
-    
-    
-    reply_markup=InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text, 
-        reply_markup=reply_markup, 
-        parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"mr_count\((.+)\)"), group=2)
-async def cb_max_buttons(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Changing The Count Of Result To Be Shown Per Page
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    chat_name = remove_emoji(update.message.chat.title)
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    count, chat_id = re.findall(r"mr_count\((.+)\)", query_data)[0].split("|", 1)
-
-    text = f"Choose Your Desired 'Max Filter Count Per Page' For Every Filter Results Shown In {chat_name}"
-
-    buttons = [
-        [
-            InlineKeyboardButton
-                (
-                    "5 Filters", callback_data=f"set(per_page|5|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "10 Filters", callback_data=f"set(per_page|10|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "15 Filters", callback_data=f"set(per_page|15|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "20 Filters", callback_data=f"set(per_page|20|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "25 Filters", callback_data=f"set(per_page|25|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "30 Filters", callback_data=f"set(per_page|30|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data=f"config({chat_id})"
-                )
-        ]
-    ]
-
-    reply_markup = InlineKeyboardMarkup(buttons)
-
-    await update.message.edit_text(
-        text, reply_markup=reply_markup, parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"mp_count\((.+)\)"), group=2)
-async def cb_max_page(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Changing The Count Of Maximum Result Pages To Be Shown
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    chat_name = remove_emoji(update.message.chat.title)
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    count, chat_id = re.findall(r"mp_count\((.+)\)", query_data)[0].split("|", 1)
-    
-    text = f"Choose Your Desired 'Max Filter Page Count' For Every Filter Results Shown In {chat_name}"
-    
-    buttons = [
-
-        [
-            InlineKeyboardButton
-                (
-                    "2 Pages", callback_data=f"set(pages|2|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "4 Pages", callback_data=f"set(pages|4|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "6 Pages", callback_data=f"set(pages|6|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "8 Pages", callback_data=f"set(pages|8|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "10 Pages", callback_data=f"set(pages|10|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data=f"config({chat_id})"
-                )
-        ]
-
-    ]
-    
-    reply_markup = InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text, reply_markup=reply_markup, parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"mf_count\((.+)\)"), group=2)
-async def cb_max_results(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Changing The Count Of Maximum Files TO Be Fetched From Database
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    chat_name = remove_emoji(update.message.chat.title)
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    count, chat_id = re.findall(r"mf_count\((.+)\)", query_data)[0].split("|", 1)
-
-    text = f"Choose Your Desired 'Max Filter' To Be Fetched From DB For Every Filter Results Shown In {chat_name}"
-
-    buttons = [
-
-        [
-            InlineKeyboardButton
-                (
-                    "50 Results", callback_data=f"set(results|50|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "100 Results", callback_data=f"set(results|100|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "150 Results", callback_data=f"set(results|150|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "200 Results", callback_data=f"set(results|200|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "250 Results", callback_data=f"set(results|250|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "300 Results", callback_data=f"set(results|300|{chat_id}|{count})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data=f"config({chat_id})"
-                )
-        ]
-    ]
-
-    reply_markup = InlineKeyboardMarkup(buttons)
-
-    await update.message.edit_text(
-        text, reply_markup=reply_markup, parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"show_invites\((.+)\)"), group=2)
-async def cb_show_invites(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Enabling Or Diabling Invite Link Buttons
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    value, chat_id = re.findall(r"show_invites\((.+)\)", query_data)[0].split("|", 1)
-    
-    value = True if value=="True" else False
-    
-    if value:
-        buttons= [
-            [
-                InlineKeyboardButton
-                    (
-                        "Disable ❌", callback_data=f"set(showInv|False|{chat_id}|{value})"
-                    )
-            ],
-            [
-                InlineKeyboardButton
-                    (
-                        "Back πŸ”™", callback_data=f"config({chat_id})"
-                    )
-            ]
-        ]
-    
-    else:
-        buttons =[
-            [
-                InlineKeyboardButton
-                    (
-                        "Enable βœ”", callback_data=f"set(showInv|True|{chat_id}|{value})"
-                    )
-            ],
-            [
-                InlineKeyboardButton
-                    (
-                        "Back πŸ”™", callback_data=f"config({chat_id})"
-                    )
-            ]
-        ]
-    
-    text=f"This Config Will Help You To Show Invitation Link Of All Active Chats Along With The Filter Results For The Users To Join....."
-    
-    reply_markup=InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text,
-        reply_markup=reply_markup,
-        parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"inPM\((.+)\)"), group=2)
-async def cb_pm_file(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Enabling Or Diabling File Transfer Through Bot PM
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    value, chat_id = re.findall(r"inPM\((.+)\)", query_data)[0].split("|", 1)
-
-    value = True if value=="True" else False
-    
-    if value:
-        buttons= [
-            [
-                InlineKeyboardButton
-                    (
-                        "Disable ❎", callback_data=f"set(inPM|False|{chat_id}|{value})"
-                    )
-            ],
-            [
-                InlineKeyboardButton
-                    (
-                        "Back πŸ”™", callback_data=f"config({chat_id})"
-                    )
-            ]
-        ]
-    
-    else:
-        buttons =[
-            [
-                InlineKeyboardButton
-                    (
-                        "Enable βœ…", callback_data=f"set(inPM|True|{chat_id}|{value})"
-                    )
-            ],
-            [
-                InlineKeyboardButton
-                    (
-                        "Back πŸ”™", callback_data=f"config({chat_id})"
-                    )
-            ]
-        ]
-    
-    text=f"This Config Will Help You To Enable/Disable File Transfer Through Bot PM Without Redirecting Them To Channel...."
-    
-    reply_markup=InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text,
-        reply_markup=reply_markup,
-        parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"accuracy\((.+)\)"), group=2)
-async def cb_accuracy(bot, update: CallbackQuery):
-    """
-    A Callaback Funtion to control the accuracy of matching results
-    that the bot should return for a query....
-    """
-    global VERIFY
-    chat_id = update.message.chat.id
-    chat_name = update.message.chat.title
-    user_id = update.from_user.id
-    query_data = update.data
-    
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    val, chat_id = re.findall(r"accuracy\((.+)\)", query_data)[0].split("|", 1)
-    
-    text = f"Choose Your Desired 'Accuracy Perceentage' For Every Filter Results Shown In {chat_name}\n\n"
-    text+= f"NB: Higher The Value Better Matching Results Will Be Provided... And If Value Is Lower It Will Show More Results \
-        Which Is Fimilary To Query Search (Wont Be Accurate)...."
-
-    buttons = [
-        [
-            InlineKeyboardButton
-                (
-                    "100 %", callback_data=f"set(accuracy|1.00|{chat_id}|{val})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "80 %", callback_data=f"set(accuracy|0.80|{chat_id}|{val})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "65 %", callback_data=f"set(accuracy|0.65|{chat_id}|{val})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "60 %", callback_data=f"set(accuracy|0.60|{chat_id}|{val})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "55 %", callback_data=f"set(accuracy|0.55|{chat_id}|{val})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "50 %", callback_data=f"set(accuracy|0.50|{chat_id}|{val})"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data=f"config({chat_id})"
-                )
-        ]
-    ]
-
-    reply_markup = InlineKeyboardMarkup(buttons)
-
-    await update.message.edit_text(
-        text, reply_markup=reply_markup, parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"set\((.+)\)"), group=2)
-async def cb_set(bot, update: CallbackQuery):
-    """
-    A Callback Funtion Support For config()
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    action, val, chat_id, curr_val = re.findall(r"set\((.+)\)", query_data)[0].split("|", 3)
-
-    try:
-        val, chat_id, curr_val = float(val), int(chat_id), float(curr_val)
-    except:
-        chat_id = int(chat_id)
-    
-    if val == curr_val:
-        await update.answer("New Value Cannot Be Old Value...Please Choose Different Value...!!!", show_alert=True)
-        return
-    
-    prev = await db.find_chat(chat_id)
-
-    accuracy = float(prev["configs"].get("accuracy", 0.80))
-    max_pages = int(prev["configs"].get("max_pages"))
-    max_results = int(prev["configs"].get("max_results"))
-    max_per_page = int(prev["configs"].get("max_per_page"))
-    pm_file_chat = True if prev["configs"].get("pm_fchat") == (True or "True") else False
-    show_invite_link = True if prev["configs"].get("show_invite_link") == (True or "True") else False
-    
-    if action == "accuracy": # Scophisticated way πŸ˜‚πŸ€£
-        accuracy = val
-    
-    elif action == "pages":
-        max_pages = int(val)
-        
-    elif action == "results":
-        max_results = int(val)
-        
-    elif action == "per_page":
-        max_per_page = int(val)
-
-    elif action =="showInv":
-        show_invite_link = True if val=="True" else False
-
-    elif action == "inPM":
-        pm_file_chat = True if val=="True" else False
-        
-
-    new = dict(
-        accuracy=accuracy,
-        max_pages=max_pages,
-        max_results=max_results,
-        max_per_page=max_per_page,
-        pm_fchat=pm_file_chat,
-        show_invite_link=show_invite_link
-    )
-    
-    append_db = await db.update_configs(chat_id, new)
-    
-    if not append_db:
-        text="Something Wrong Please Check Bot Log For More Information...."
-        await update.answer(text=text, show_alert=True)
-        return
-    
-    text=f"Your Request Was Updated Sucessfully....\nNow All Upcoming Results Will Show According To This Settings..."
-        
-    buttons = [
-        [
-            InlineKeyboardButton
-                (
-                    "Back πŸ”™", callback_data=f"config({chat_id})"
-                ),
-            
-            InlineKeyboardButton
-                (
-                    "Close πŸ”", callback_data="close"
-                )
-        ]
-    ]
-    
-    reply_markup=InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text, reply_markup=reply_markup, parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"status\((.+)\)"), group=2)
-async def cb_status(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Showing Overall Status Of A Group
-    """
-    global VERIFY
-    query_data = update.data
-    chat_id = update.message.chat.id
-    chat_name = remove_emoji(update.message.chat.title)
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-    
-    chat_id = re.findall(r"status\((.+)\)", query_data)[0]
-    
-    total_filters, total_chats, total_achats = await db.status(chat_id)
-    
-    text = f"Status Of {chat_name}\n"
-    text += f"\nTotal Connected Chats: {total_chats}\n"
-    text += f"\nTotal Active Chats: {total_achats}\n"
-    text += f"\nTotal Filters: {total_filters}"
-    
-    buttons = [
-        [
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data="settings"
-                ),
-            
-            InlineKeyboardButton
-                (
-                    "Close πŸ”", callback_data="close"
-                )
-        ]
-    ]
-    
-    reply_markup = InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text, reply_markup=reply_markup, parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"about\((.+)\)"), group=2)
-async def cb_about(bot, update: CallbackQuery):
-    """
-    A Callback Funtion For Showing About Section In Bot Setting Menu
-    """
-    global VERIFY
-    chat_id = update.message.chat.id
-    user_id = update.from_user.id
-    
-    if user_id not in VERIFY.get(str(chat_id)):
-        return
-
-    text=f"Bot's Status\n"
-    text+=f"\nBot's Uptime: {time_formatter(time.time() - start_uptime)}\n"
-    text+=f"\nBot Funtion: Auto Filter Files\n"
-    text+=f"""\nBot Support: @CrazyBotszGrp\n"""
-    text+="""\nSource Code: Source"""
-
-    buttons = [
-        [
-            InlineKeyboardButton
-                (
-                    "My Dev ⚑", url="https://t.me/AlbertEinstein_TG"
-                ),
-                
-            InlineKeyboardButton
-                (
-                    "πŸ”™ Back", callback_data="settings"
-                )
-        ],
-        [
-            InlineKeyboardButton
-                (
-                    "Close πŸ”", callback_data="close"
-                )
-        ]
-    ]
-    
-    reply_markup = InlineKeyboardMarkup(buttons)
-    
-    await update.message.edit_text(
-        text, reply_markup=reply_markup, parse_mode="html"
-    )
-
-
-
-@Client.on_callback_query(filters.regex(r"^(start|help|about|close)$"), group=2)
-async def callback_data(bot, update: CallbackQuery):
-
-    query_data = update.data
-
-    if query_data == "start":
-        buttons = [[
-            InlineKeyboardButton('My Dev πŸ‘¨β€πŸ”¬', url='https://t.me/AlbertEinstein_TG'),
-            InlineKeyboardButton('Source Code 🧾', url ='https://github.com/AlbertEinsteinTG/Adv-Auto-Filter-Bot')
-        ],[
-            InlineKeyboardButton('Support πŸ› ', url='https://t.me/CrazyBotszGrp')
-        ],[
-            InlineKeyboardButton('Help βš™', callback_data="help")
-        ]]
-    
-        reply_markup = InlineKeyboardMarkup(buttons)
-        
-        await update.message.edit_text(
-            Translation.START_TEXT.format(update.from_user.mention),
-            reply_markup=reply_markup,
-            parse_mode="html",
-            disable_web_page_preview=True
-        )
-
-
-    elif query_data == "help":
-        buttons = [[
-            InlineKeyboardButton('Home ⚑', callback_data='start'),
-            InlineKeyboardButton('About 🚩', callback_data='about')
-        ],[
-            InlineKeyboardButton('Close πŸ”', callback_data='close')
-        ]]
-    
-        reply_markup = InlineKeyboardMarkup(buttons)
-        
-        await update.message.edit_text(
-            Translation.HELP_TEXT,
-            reply_markup=reply_markup,
-            parse_mode="html",
-            disable_web_page_preview=True
-        )
-
-
-    elif query_data == "about": 
-        buttons = [[
-            InlineKeyboardButton('Home ⚑', callback_data='start'),
-            InlineKeyboardButton('Close πŸ”', callback_data='close')
-        ]]
-        
-        reply_markup = InlineKeyboardMarkup(buttons)
-        
-        await update.message.edit_text(
-            Translation.ABOUT_TEXT,
-            reply_markup=reply_markup,
-            parse_mode="html"
-        )
-
-
-    elif query_data == "close":
-        await update.message.delete()
-
-
-
-def time_formatter(seconds: float) -> str:
-    """ 
-    humanize time 
-    """
-    minutes, seconds = divmod(int(seconds),60)
-    hours, minutes = divmod(minutes, 60)
-    days, hours = divmod(hours, 24)
-    tmp = ((str(days) + "d, ") if days else "") + \
-        ((str(hours) + "h, ") if hours else "") + \
-        ((str(minutes) + "m, ") if minutes else "") + \
-        ((str(seconds) + "s") if seconds else "")
-    return tmp
-
diff --git a/bot/plugins/channel.py b/bot/plugins/channel.py
index 2ea646b..eeb246a 100644
--- a/bot/plugins/channel.py
+++ b/bot/plugins/channel.py
@@ -3,34 +3,34 @@
 import asyncio
 
 from pyrogram import Client, filters
+from pyrogram.types import Message
 from pyrogram.errors import UserAlreadyParticipant, FloodWait
 
-from bot import VERIFY # pylint: disable=import-error
-from bot.bot import Bot # pylint: disable=import-error
-from bot.database import Database # pylint: disable=import-error
-from bot.plugins.auto_filter import recacher # pylint: disable=import-error
+from bot import CHAT_DETAILS
+from bot.bot import Bot 
+from bot.database import Database 
+from bot.plugins.auto_filter import recacher
+from bot.plugins.utils import admin_list
 
 db = Database()
 
 @Client.on_message(filters.command(["add"]) & filters.group, group=1)
-async def connect(bot: Bot, update):
+async def connect(bot: Bot, update: Message):
     """
     A Funtion To Handle Incoming /add Command TO COnnect A Chat With Group
     """
     chat_id = update.chat.id
     user_id = update.from_user.id if update.from_user else None
     target_chat = update.text.split(None, 1)
-    global VERIFY
+    global CHAT_DETAILS
     
-    if VERIFY.get(str(chat_id)) == None: # Make Admin's ID List
-        admin_list = []
-        async for x in bot.iter_chat_members(chat_id=chat_id, filter="administrators"):
-            admin_id = x.user.id 
-            admin_list.append(admin_id)
-        admin_list.append(None)
-        VERIFY[str(chat_id)] = admin_list
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
 
-    if not user_id in VERIFY.get(str(chat_id)):
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
+
+    if user_id not in chat_admins:
         return
     
     try:
@@ -87,7 +87,7 @@ async def connect(bot: Bot, update):
         await update.reply_text("Channel Aldready In Db...!!!")
         return
     
-    wait_msg = await update.reply_text("Please Wait Till I Add All Your Files From Channel To Db\n\nThis May Take 10 or 15 Mins Depending On Your No. Of Files In Channel.....\n\nUntil Then Please Dont Sent Any Other Command Or This Operation May Be Intrupted....")
+    wait_msg = await update.reply_text("Please Wait Till I Add All Your Files From Channel To Db\n\nThis May Take 2 or 3 Hrs Depending On Your No. Of Files In Channel.....\n\nUntil Then Please Dont Sent Any Other Command Or This Operation May Be Intrupted....")
     
     try:
         type_list = ["video", "audio", "document"]
@@ -112,6 +112,7 @@ async def connect(bot: Bot, update):
                             continue
                         file_id = file_id.video.file_id
                         file_name = msgs.video.file_name[0:-4]
+                        file_size = msgs.video.file_size
                         file_caption  = msgs.caption if msgs.caption else ""
                         file_type = "video"
                     
@@ -126,6 +127,7 @@ async def connect(bot: Bot, update):
                             continue
                         file_id = file_id.audio.file_id
                         file_name = msgs.audio.file_name[0:-4]
+                        file_size = msgs.audio.file_size
                         file_caption  = msgs.caption if msgs.caption else ""
                         file_type = "audio"
                     
@@ -140,6 +142,7 @@ async def connect(bot: Bot, update):
                             continue
                         file_id = file_id.document.file_id
                         file_name = msgs.document.file_name[0:-4]
+                        file_size = msgs.document.file_size
                         file_caption  = msgs.caption if msgs.caption else ""
                         file_type = "document"
                     
@@ -163,6 +166,7 @@ async def connect(bot: Bot, update):
                         file_id=file_id, # Done
                         unique_id=unique_id,
                         file_name=file_name,
+                        file_size=file_size,
                         file_caption=file_caption,
                         file_type=file_type,
                         file_link=file_link,
@@ -197,17 +201,15 @@ async def disconnect(bot: Bot, update):
     chat_id = update.chat.id
     user_id = update.from_user.id if update.from_user else None
     target_chat = update.text.split(None, 1)
-    global VERIFY
+    global CHAT_DETAILS
     
-    if VERIFY.get(str(chat_id)) == None: # Make Admin's ID List
-        admin_list = []
-        async for x in bot.iter_chat_members(chat_id=chat_id, filter="administrators"):
-            admin_id = x.user.id 
-            admin_list.append(admin_id)
-        admin_list.append(None)
-        VERIFY[str(chat_id)] = admin_list
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
 
-    if not user_id in VERIFY.get(str(chat_id)):
+    if user_id not in chat_admins:
         return
     
     try:
@@ -261,17 +263,15 @@ async def delall(bot: Bot, update):
     """
     chat_id=update.chat.id
     user_id = update.from_user.id if update.from_user else None
-    global VERIFY
+    global CHAT_DETAILS
     
-    if VERIFY.get(str(chat_id)) == None: # Make Admin's ID List
-        admin_list = []
-        async for x in bot.iter_chat_members(chat_id=chat_id, filter="administrators"):
-            admin_id = x.user.id 
-            admin_list.append(admin_id)
-        admin_list.append(None)
-        VERIFY[str(chat_id)] = admin_list
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
+
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
 
-    if not user_id in VERIFY.get(str(chat_id)):
+    if user_id not in chat_admins:
         return
     
     await db.delete_all(chat_id)
@@ -280,7 +280,7 @@ async def delall(bot: Bot, update):
     await update.reply_text("Sucessfully Deleted All Connected Chats From This Group....")
 
 
-@Client.on_message(filters.channel & (filters.video | filters.audio | filters.document), group=0)
+@Client.on_message(filters.channel & (filters.video | filters.audio | filters.document) & ~filters.edited, group=0)
 async def new_files(bot: Bot, update):
     """
     A Funtion To Handle Incoming New Files In A Channel ANd Add Them To Respective Channels..
@@ -295,18 +295,21 @@ async def new_files(bot: Bot, update):
             file_type = "video" 
             file_id = update.video.file_id
             file_name = update.video.file_name[0:-4]
+            file_size = update.video.file_size
             file_caption  = update.caption if update.caption else ""
 
         elif update.audio:
             file_type = "audio"
             file_id = update.audio.file_id
             file_name = update.audio.file_name[0:-4]
+            file_size = update.audio.file_size
             file_caption  = update.caption if update.caption else ""
 
         elif update.document:
             file_type = "document"
             file_id = update.document.file_id
             file_name = update.document.file_name[0:-4]
+            file_size = update.document.file_size
             file_caption  = update.caption if update.caption else ""
         
         for i in ["_", "|", "-", "."]: # Work Around
@@ -337,6 +340,7 @@ async def new_files(bot: Bot, update):
                     file_id=file_id, # File Id For Future Updates Maybe...
                     unique_id=unique_id,
                     file_name=file_name,
+                    file_size=file_size,
                     file_caption=file_caption,
                     file_type=file_type,
                     file_link=file_link,
diff --git a/bot/plugins/commands.py b/bot/plugins/commands.py
index 7af5d5d..5fadbc9 100644
--- a/bot/plugins/commands.py
+++ b/bot/plugins/commands.py
@@ -4,7 +4,7 @@
 
 from pyrogram import filters, Client
 from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
-from bot import Translation # pylint: disable=import-error
+from bot import Translation, LOGGER # pylint: disable=import-error
 from bot.database import Database # pylint: disable=import-error
 
 db = Database()
@@ -24,32 +24,10 @@ async def start(bot, update):
             return
         
         caption = file_caption if file_caption != ("" or None) else ("" + file_name + "")
-        
-        if file_type == "document":
-        
-            await bot.send_document(
-                chat_id=update.chat.id,
-                document = file_id,
-                caption = caption,
-                parse_mode="html",
-                reply_to_message_id=update.message_id,
-                reply_markup=InlineKeyboardMarkup(
-                    [
-                        [
-                            InlineKeyboardButton
-                                (
-                                    'Developers', url="https://t.me/CrazyBotsz"
-                                )
-                        ]
-                    ]
-                )
-            )
-
-        elif file_type == "video":
-        
-            await bot.send_video(
-                chat_id=update.chat.id,
-                video = file_id,
+        try:
+            await update.reply_cached_media(
+                file_id,
+                quote=True,
                 caption = caption,
                 parse_mode="html",
                 reply_markup=InlineKeyboardMarkup(
@@ -63,34 +41,14 @@ async def start(bot, update):
                     ]
                 )
             )
-            
-        elif file_type == "audio":
-        
-            await bot.send_audio(
-                chat_id=update.chat.id,
-                audio = file_id,
-                caption = caption,
-                parse_mode="html",
-                reply_markup=InlineKeyboardMarkup(
-                    [
-                        [
-                            InlineKeyboardButton
-                                (
-                                    'Developers', url="https://t.me/CrazyBotsz"
-                                )
-                        ]
-                    ]
-                )
-            )
-
-        else:
-            print(file_type)
-        
+        except Exception as e:
+            await update.reply_text(f"Error:\n{e}", True, parse_mode="html")
+            LOGGER(__name__).error(e)
         return
 
     buttons = [[
         InlineKeyboardButton('Developers', url='https://t.me/CrazyBotsz'),
-        InlineKeyboardButton('Source Code 🧾', url ='https://github.com/AlbertEinsteinTG/Adv-Auto-Filter-Bot-V2')
+        InlineKeyboardButton('Source Code 🧾', url ='https://github.com/CrazyBotsz/Adv-Auto-Filter-Bot-V2')
     ],[
         InlineKeyboardButton('Support πŸ› ', url='https://t.me/CrazyBotszGrp')
     ],[
diff --git a/bot/plugins/settings.py b/bot/plugins/settings.py
index a8fd1c5..f816369 100644
--- a/bot/plugins/settings.py
+++ b/bot/plugins/settings.py
@@ -6,24 +6,25 @@
 from pyrogram import Client, filters
 from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
 
-from bot import VERIFY # pylint: disable=import-error
+from bot import CHAT_DETAILS
+from bot.plugins.utils import admin_list
+
+
 
 @Client.on_message(filters.command(["settings"]) & filters.group, group=1)
 async def settings(bot, update):
     
     chat_id = update.chat.id
     user_id = update.from_user.id if update.from_user else None
-    global VERIFY
+    global CHAT_DETAILS
+    
+    chat_dict = CHAT_DETAILS.get(str(chat_id))
+    chat_admins = chat_dict.get("admins") if chat_dict != None else None
 
-    if VERIFY.get(str(chat_id)) == None: # Make Admin's ID List
-        admin_list = []
-        async for x in bot.iter_chat_members(chat_id=chat_id, filter="administrators"):
-            admin_id = x.user.id 
-            admin_list.append(admin_id)
-        admin_list.append(None)
-        VERIFY[str(chat_id)] = admin_list
+    if ( chat_dict or chat_admins ) == None: # Make Admin's ID List
+        chat_admins = await admin_list(chat_id, bot, update)
 
-    if not user_id in VERIFY.get(str(chat_id)): # Checks if user is admin of the chat
+    if user_id not in chat_admins:
         return
     
     bot_info = await bot.get_me()
diff --git a/bot/plugins/utils.py b/bot/plugins/utils.py
new file mode 100644
index 0000000..59d615f
--- /dev/null
+++ b/bot/plugins/utils.py
@@ -0,0 +1,30 @@
+import time
+from bot import CHAT_DETAILS
+
+def time_formatter(seconds: float) -> str:
+    """ 
+    humanize time 
+    """
+    minutes, seconds = divmod(int(seconds),60)
+    hours, minutes = divmod(minutes, 60)
+    days, hours = divmod(hours, 24)
+    tmp = ((str(days) + "d, ") if days else "") + \
+        ((str(hours) + "h, ") if hours else "") + \
+        ((str(minutes) + "m, ") if minutes else "") + \
+        ((str(seconds) + "s") if seconds else "")
+    return tmp
+
+
+async def admin_list(chat_id, bot, update):
+    """
+    Creates A List Of Admin User ID's
+    """
+    global CHAT_DETAILS
+    admins_id_list = []
+    async for x in bot.iter_chat_members(chat_id=chat_id, filter="administrators"):
+        admin_id = x.user.id 
+        admins_id_list.append(admin_id)
+    
+    admins_id_list.append(None)
+    CHAT_DETAILS[str(chat_id)] = dict(admins = admins_id_list)
+    return admins_id_list
\ No newline at end of file