diff --git "a/combined.txt" "b/combined.txt" new file mode 100644--- /dev/null +++ "b/combined.txt" @@ -0,0 +1,10035 @@ +# File: C:\Users\Shakeel\Desktop\PROFESSOR\app.json +{ + "name": "PROFESSOR-BOT", + "description": "The Telegram Autofilter Bot", + "logo": "https://graph.org/file/b7e8484f6395a180b6380.jpg", + "keywords": ["Telegram", "auto-filter", "MrMKN"], + "repository": "https://github.com/MrMKN/PROFESSOR-BOT", + "env": { + "WEBHOOK": { + "description": "True/False if your server is web support required? the value is True else False", + "value": "True", + "required": true + }, + "BOT_TOKEN": { + "description": "Your bot token.", + "required": true + }, + "API_ID": { + "description": "Get this value from https://my.telegram.org", + "required": true + }, + "API_HASH": { + "description": "Get this value from https://my.telegram.org", + "required": true + }, + "CHANNELS": { + "description": "Username or ID of channel or group. Separate multiple IDs by space.", + "required": false + }, + "ADMINS": { + "description": "Username or ID of Admin. Separate multiple Admins by space.", + "required": true + }, + "SHORT_API": { + "description": "Api Key Of shortner You Use.", + "required": false + }, + "SHORT_URL": { + "description": "Url of shortner site you use.", + "required": false + }, + "PICS": { + "description": "Add some telegraph link of pictures .", + "required": false + }, + "LOG_CHANNEL": { + "description": "Bot Logs,Give a channel id with -100xxxxxxx", + "required": true + }, + "AUTH_CHANNEL": { + "description": "ID of channel.Make sure bot is admin in this channel. Without subscribing this channel users cannot use bot.", + "required": false + }, + "MAX_RIST_BTNS": { + "description": "Maximum number of serch result buttons count ⚠️below 10 only ", + "value": "10", + "required": false + }, + "CUSTOM_FILE_CAPTION": { + "description": "A custom file caption for your files. formatable with , file_name, file_caption, file_size, Read Readme.md for better understanding.", + "value": "Hey {mention}👋\n\n{file_name}\n\n🔘 size - {file_size}\n\n╭─── • ❰ @MR_LINK_Z ❱ • ────➤\n┣ ▫️ @MRxSERIES\n┣ ▫️ @MalluMovie_Official\n╰─────── • ◆ • ───────➤", + "required": false + }, + "DATABASE_URL": { + "description": "mongoDB URI.", + "required": true + }, + "DATABASE_NAME": { + "description": "Name of the database in mongoDB.", + "value": "Cluster0", + "required": false + }, + "COLLECTION_NAME": { + "description": "Name of the collections. Defaults to Telegram_files. If you are using the same database, then use different collection name for each bot", + "value": "Telegram_files", + "required": false + }, + "SUPPORT_CHAT": { + "description": "Updated Channel Username Without @ Not Chanel ID", + "value": "MKN_BOTZ_DISCUSSION_GROUP", + "required": false + }, + "IMDB": { + "description": "Imdb, the view of information when making True/False", + "value": "True", + "required": false + }, + "PM_IMDB": { + "description": "pm Imdb, the view of information when making True/False", + "value": "True", + "required": false + }, + "IMDB_TEMPLATE": { + "description": "Custom IMDB Template", + "value": "Qᴜᴇʀʏ: {query}\n\n🏷 Tɪᴛʟᴇ: {title}\n🎭 Gᴇɴʀᴇꜱ: {genres}\n📆 Yᴇᴀʀ: {year}\n🌟 Rᴀᴛɪɴɢ: {rating}/10", + "required": false + }, + "IMDB_DELET_TIME": { + "description": "bot risult aouto delet time in second do to avoid group copyright issue. default is 300 ", + "value": "300", + "required": false + }, + "SINGLE_BUTTON": { + "description": "choose b/w single or double buttons https://github.com/Aadhi000/Ajax/issues/22", + "value": "True", + "required": false + }, + "START_MESSAGE": { + "description": "bot start message text [ {user} = bot startd user name {bot} = your bot name", + "value": "✨ Hᴇʟʟᴏ {user}.\n\nMʏ Nᴀᴍᴇ Is {bot}.\n\nI Cᴀɴ Pʀᴏᴠɪᴅᴇ Mᴏᴠɪᴇ Fᴏʀ Yᴏᴜ Jᴜsᴛ Aᴅᴅ Mᴇ Iɴ Yᴏ��ʀ Gʀᴏᴜᴘ Oʀ Jᴏɪɴ Oᴜʀ Gʀᴏᴜᴘ", + "required": false + }, + "FORCE_SUB_TEXT": { + "description": "custom force sub text (use ** = bold / use ``= mono)", + "value": "Sᴏʀʀʏ Bʀᴏ Yᴏᴜʀ Nᴏᴛ Jᴏɪɴᴇᴅ Mʏ Cʜᴀɴɴᴇʟ Sᴏ Pʟᴇᴀsᴇ Cʟɪᴄᴋ Jᴏɪɴ Bᴜᴛᴛᴏɴ Tᴏ Jᴏɪɴ Mʏ Cʜᴀɴɴᴇʟ Aɴᴅ Tʀʏ Aɢᴀɪɴ", + "required": false + }, + "AUTH_GROUPS": { + "description": "Group Id. Only work a specific group/ your bot is public use? please just Skip this", + "value": "", + "required": false + }, + "WELCOM_PIC": { + "description": "Welcome message pic (telegraph link)", + "value": "", + "required": false + }, + "WELCOM_TEXT": { + "description": "your group welcome text keyword({user} = joined use & {chat} = your chat name", + "value": "Hᴇʏ {user} 💞\nWᴇʟᴄᴏᴍᴇ ᴛᴏ {chat}.\n\nꜱʜᴀʀᴇ & ꜱᴜᴩᴩᴏʀᴛ, ʀᴇqᴜᴇꜱᴛ ʏᴏᴜ ᴡᴀɴᴛᴇᴅ ᴍᴏᴠɪᴇꜱ", + "required": false + }, + "BUTTON_LOCK_TEXT": { + "description": "button lock text [User = {query}]", + "value": "Hᴇʏ {query}\nTʜɪꜱ Iꜱ Nᴏᴛ Fᴏʀ Yᴏᴜ. Sᴇᴀʀᴄʜ Yᴏᴜʀ Sᴇʟꜰ", + "required": false + }, + "PMFILTER": { + "description": "PM AutoFilter. set True to on / False to off", + "value": "True", + "required": false + }, + "G_FILTER": { + "description": "GlobalFilter set True to on / False to off", + "value": "True", + "required": false + }, + "BUTTON_LOCK": { + "description": "Button alert set True to on / False to off", + "value": "True", + "required": false + }, + "RemoveBG_API": { + "description": "background remover website api key. get from https://www.remove.bg/b/background-removal-api", + "required": false + }, + "P_TTI_SHOW_OFF": { + "description": "Customize Result Buttons to Callback or Url by (True = url / False = callback)", + "value": "True", + "required": false + } + }, + "buildpacks": + [ + {"url": "heroku/python"} + ] +} + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\bot.py +import os, math, logging, datetime, pytz, logging.config + +from aiohttp import web +from pyrogram import Client, types +from database.users_chats_db import db +from database.ia_filterdb import Media +from typing import Union, Optional, AsyncGenerator +from utils import temp, __repo__, __license__, __copyright__, __version__ +from info import API_ID, API_HASH, BOT_TOKEN, LOG_CHANNEL, UPTIME, WEB_SUPPORT, LOG_MSG + +# Get logging configurations +logging.config.fileConfig("logging.conf") +logging.getLogger(__name__).setLevel(logging.INFO) +logging.getLogger("cinemagoer").setLevel(logging.ERROR) + + +class Bot(Client): + def __init__(self): + super().__init__( + name="Professor-Bot", + api_id=API_ID, + api_hash=API_HASH, + bot_token=BOT_TOKEN, + plugins=dict(root="plugins") + ) + + async def start(self): + b_users, b_chats = await db.get_banned() + temp.BANNED_USERS = b_users + temp.BANNED_CHATS = b_chats + + await super().start() + await Media.ensure_indexes() + me = await self.get_me() + temp.U_NAME = me.username + temp.B_NAME = me.first_name + self.id = me.id + self.name = me.first_name + self.mention = me.mention + self.username = me.username + self.log_channel = LOG_CHANNEL + self.uptime = UPTIME + curr = datetime.datetime.now(pytz.timezone("Asia/Kolkata")) + date = curr.strftime('%d %B, %Y') + tame = curr.strftime('%I:%M:%S %p') + logging.info(LOG_MSG.format(me.first_name, date, tame, __repo__, __version__, __license__, __copyright__)) + + try: await self.send_message(LOG_CHANNEL, text=LOG_MSG.format(me.first_name, date, tame, __repo__, __version__, __license__, __copyright__), disable_web_page_preview=True) + except Exception as e: logging.warning(f"Bot Isn't Able To Send Message To LOG_CHANNEL \n{e}") + + if bool(WEB_SUPPORT) is True: + app = web.AppRunner(web.Application(client_max_size=30000000)) + await app.setup() + await web.TCPSite(app, "0.0.0.0", 8080).start() + logging.info("Web Response Is Running......🕸️") + + async def stop(self, *args): + await super().stop() + logging.info(f"Bot Is Restarting ⟳...") + + async def iter_messages(self, chat_id: Union[int, str], limit: int, offset: int = 0) -> Optional[AsyncGenerator["types.Message", None]]: + current = offset + while True: + new_diff = min(200, limit - current) + if new_diff <= 0: + return + messages = await self.get_messages(chat_id, list(range(current, current+new_diff+1))) + for message in messages: + yield message + current += 1 + + + +Bot().run() + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\info.py +import re, time +from os import environ +from Script import script + +id_pattern = re.compile(r'^.\d+$') + +def is_enabled(value, default): + if value.strip().lower() in ["on", "true", "yes", "1", "enable", "y"]: return True + elif value.strip().lower() in ["off", "false", "no", "0", "disable", "n"]: return False + else: return default + + +# PyroClient Setup +API_ID = int(environ['API_ID']) +API_HASH = environ['API_HASH'] +BOT_TOKEN = environ['BOT_TOKEN'] + +# Bot settings +WEB_SUPPORT = bool(environ.get("WEBHOOK", 'True')) # for web support on/off +PICS = (environ.get('PICS' ,'https://graph.org/file/01ddfcb1e8203879a63d7.jpg https://graph.org/file/d69995d9846fd4ad632b8.jpg https://graph.org/file/a125497b6b85a1d774394.jpg https://graph.org/file/43d26c54d37f4afb830f7.jpg https://graph.org/file/60c1adffc7cc2015f771c.jpg https://graph.org/file/d7b520240b00b7f083a24.jpg https://graph.org/file/0f336b0402db3f2a20037.jpg https://graph.org/file/39cc4e15cad4519d8e932.jpg https://graph.org/file/d59a1108b1ed1c6c6c144.jpg https://te.legra.ph/file/3a4a79f8d5955e64cbb8e.jpg https://graph.org/file/d69995d9846fd4ad632b8.jpg')).split() +UPTIME = time.time() + +# Admins, Channels & Users +CACHE_TIME = int(environ.get('CACHE_TIME', 300)) +ADMINS = [int(admin) if id_pattern.search(admin) else admin for admin in environ.get('ADMINS', '').split()] +CHANNELS = [int(ch) if id_pattern.search(ch) else ch for ch in environ.get('CHANNELS', '0').split()] +auth_users = [int(user) if id_pattern.search(user) else user for user in environ.get('AUTH_USERS', '').split()] +AUTH_USERS = (auth_users + ADMINS) if auth_users else [] +auth_channel = environ.get('AUTH_CHANNEL') +auth_grp = environ.get('AUTH_GROUP') +AUTH_CHANNEL = int(auth_channel) if auth_channel and id_pattern.search(auth_channel) else None +AUTH_GROUPS = [int(ch) for ch in auth_grp.split()] if auth_grp else None + +# MongoDB information +DATABASE_URL = environ.get('DATABASE_URL', "") +DATABASE_NAME = environ.get('DATABASE_NAME', "Cluster0") +FILE_DB_URL = environ.get("FILE_DB_URL", DATABASE_URL) +FILE_DB_NAME = environ.get("FILE_DB_NAME", DATABASE_NAME) +COLLECTION_NAME = environ.get('COLLECTION_NAME', 'Telegram_files') + +# Filters Configuration +MAX_RIST_BTNS = int(environ.get('MAX_RIST_BTNS', "10")) +START_MESSAGE = environ.get('START_MESSAGE', script.START_TXT) +BUTTON_LOCK_TEXT = environ.get("BUTTON_LOCK_TEXT", script.BUTTON_LOCK_TEXT) +FORCE_SUB_TEXT = environ.get('FORCE_SUB_TEXT', script.FORCE_SUB_TEXT) + +WELCOM_PIC = environ.get("WELCOM_PIC", "") +WELCOM_TEXT = environ.get("WELCOM_TEXT", script.WELCOM_TEXT) +PMFILTER = is_enabled(environ.get('PMFILTER', "True"), True) +G_FILTER = is_enabled(environ.get("G_FILTER", "True"), True) +BUTTON_LOCK = is_enabled(environ.get("BUTTON_LOCK", "True"), True) +RemoveBG_API = environ.get("RemoveBG_API", "") + +# url shortner +SHORT_URL = environ.get("SHORT_URL") +SHORT_API = environ.get("SHORT_API") + +# Others +IMDB_DELET_TIME = int(environ.get('IMDB_DELET_TIME', "300")) +LOG_CHANNEL = int(environ.get('LOG_CHANNEL', 0)) +SUPPORT_CHAT = environ.get('SUPPORT_CHAT', 'MKN_BOTZ_DISCUSSION_GROUP') +P_TTI_SHOW_OFF = is_enabled(environ.get('P_TTI_SHOW_OFF', "True"), True) +PM_IMDB = is_enabled(environ.get('PM_IMDB', "True"), True) +IMDB = is_enabled(environ.get('IMDB', "True"), True) +SINGLE_BUTTON = is_enabled(environ.get('SINGLE_BUTTON', "True"), True) +CUSTOM_FILE_CAPTION = environ.get("CUSTOM_FILE_CAPTION", "{file_name}") +BATCH_FILE_CAPTION = environ.get("BATCH_FILE_CAPTION", None) +IMDB_TEMPLATE = environ.get("IMDB_TEMPLATE", script.IMDB_TEMPLATE) +LONG_IMDB_DESCRIPTION = is_enabled(environ.get("LONG_IMDB_DESCRIPTION", "False"), False) +SPELL_CHECK_REPLY = is_enabled(environ.get("SPELL_CHECK_REPLY", "True"), True) +MAX_LIST_ELM = environ.get("MAX_LIST_ELM", None) +FILE_STORE_CHANNEL = [int(ch) for ch in (environ.get('FILE_STORE_CHANNEL', '')).split()] +MELCOW_NEW_USERS = is_enabled(environ.get('MELCOW_NEW_USERS', "True"), True) +PROTECT_CONTENT = is_enabled(environ.get('PROTECT_CONTENT', "False"), False) +PUBLIC_FILE_STORE = is_enabled(environ.get('PUBLIC_FILE_STORE', "True"), True) +LOG_MSG = "{} Iꜱ Rᴇsᴛᴀʀᴛᴇᴅ....✨\n\n🗓️ Dᴀᴛᴇ : {}\n⏰ Tɪᴍᴇ : {}\n\n🖥️ Rᴇᴏᴩ: {}\n🉐 Vᴇʀsɪᴏɴ: {}\n🧾 Lɪᴄ��ɴꜱᴇ: {}\n©️ Cᴏᴩʏʀɪɢʜᴛ: {}" + + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\README.md +![Typing SVG](https://readme-typing-svg.herokuapp.com/?lines=𝗧𝗛𝗜𝗦+𝗜𝗦+𝐏𝐑𝐎𝐅𝐄𝐒𝐒𝐎𝐑+𝐁𝐎𝐓!;𝗖𝗕𝗥𝗘𝗔𝗧𝗘𝗗+𝗕𝗬+𝗠𝗞𝗡+𝗕𝗢𝗧𝗭™;𝗔+𝗣𝗢𝗪𝗘𝗥𝗙𝗨𝗟𝗟+𝗧𝗚+𝗔𝗨𝗧𝗢𝗙𝗜𝗟𝗧𝗘𝗥+𝗕𝗢𝗧!)

+

+ +

+ 𝐏𝐑𝐎𝐅𝐄𝐒𝐒𝐎𝐑 𝐁𝐎𝐓 +

+ +[![Stars](https://img.shields.io/github/stars/MrMKN/PROFESSOR-BOT?style=flat-square&color=yellow)](https://github.com/MrMKN/PROFESSOR-BOT/stargazers) +[![Forks](https://img.shields.io/github/forks/MrMKN/PROFESSOR-BOT?style=flat-square&color=orange)](https://github.com/MrMKN/PROFESSOR-BOT/fork) +[![Size](https://img.shields.io/github/repo-size/MrMKN/PROFESSOR-BOT?style=flat-square&color=green)](https://github.com/MrMKN/PROFESSOR-BOT) +[![Open Source Love svg2](https://badges.frapsoft.com/os/v2/open-source.svg?v=103)](https://github.com/MrMKN/PROFESSOR-BOT) +[![License](https://img.shields.io/badge/License-AGPL-blue)](https://github.com/MrMKN/PROFESSOR-BOT/blob/main/LICENSE) + +[![Sparkline](https://stars.medv.io/MrMKN/PROFESSOR-BOT.svg)](https://stars.medv.io/MrMKN/PROFESSOR-BOT) + +
+Features + +- [x] Auto Filter +- [x] Manual Filter +- [x] IMDB +- [x] Admin Commands +- [x] Broadcast +- [x] Index +- [x] IMDB Search +- [x] Inline Search +- [x] Random Pics +- [x] Ids And User Info +- [x] Stats, Users, Chats, Ban, Unban, Leave, Disable, Channel +- [x] Spelling Check Feature +- [x] Custom File Caption +- [x] Group Broadcast +- [x] AutoFilter Auto Delete +- [x] Junk Group & Users Clearing On Database +- [x] Global Filter +- [x] Url Shortner In Autofilter +- [x] Custom Button Lock +- [x] Image Editor & Background Remover +- [x] Pin, Json, Password Generator +- [x] Ban, Mute, Unmute, Etc... Group Manager +- [x] Custom Welcome Message +- [x] Advanced Admin Panel +- [x] Photo Changing In All Buttons +- [x] Custom Start Message +- [x] Custom Button Alter Message +- [x] Advanced Status (Disk, Cpu, Ram, Uptime..) In Image Type +
+ +
+Variables + +### Required Variables +* `BOT_TOKEN`: Create a bot using [@BotFather](https://telegram.dog/BotFather), and get the Telegram API token. +* `API_ID`: Get this value from [telegram.org](https://my.telegram.org/apps) +* `API_HASH`: Get this value from [telegram.org](https://my.telegram.org/apps) +* `CHANNELS`: Username or ID of channel or group. Separate multiple IDs by space +* `ADMINS`: Username or ID of Admin. Separate multiple Admins by space +* `DATABASE_URL`: [mongoDB](https://www.mongodb.com) URI. Get this value from [mongoDB](https://www.mongodb.com). For more help watch this [video](https://youtu.be/1G1XwEOnxxo) +* `DATABASE_NAME`: Name of the database in [mongoDB](https://www.mongodb.com). For more help watch this [video](https://youtu.be/1G1XwEOnxxo) +* `LOG_CHANNEL` : A channel to log the activities of bot. Make sure bot is an admin in the channel. +* `SUPPORT_CHAT` : Username of a Support Group / ADMIN. ( Should be username without @ and not ID + +### Optional Variables +* `PICS`: Telegraph links of images to show in start message.( Multiple images can be used seperated by space ) +* `USE_CAPTION_FILTER` : Whether bot should use captions to improve search results. (True False) +* `CUSTOM_FILE_CAPTION` : A custom file caption for your files. formatable with , file_name, file_caption, file_size, Read Readme.md for better understanding +* `CACHE_TIME` : The maximum amount of time in seconds that the result of the inline query may be cached on the server +* `IMDB` : Imdb, the view of information when making True/False +* `SINGLE_BUTTON` : choose b/w single or double buttons +* `P_TTI_SHOW_OFF` : Customize Result Buttons to Callback or Url by (True = url / False = callback) +### Url Shortner Variable +* `SHORT_URL` : Url Of Shortner Site You Use +* `SHORT_API` : Api Key Of Shortner Which You Use +
+ +
+Deploy to Heroku + + + +[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/MrMKN/PROFESSOR-BOT) +
+ +
+Deploy to Koyeb + +[![Deploy to Koyeb](https://www.koyeb.com/static/images/deploy/button.svg)](https://app.koyeb.com/deploy?type=git&repository=github.com/MrMKN/PROFESSOR-BOT&env[WEBHOOK]=True&env[BOT_TOKEN]&env[API_ID]&env[API_HASH]&env[CHANNELS]&env[ADMINS]&env[PICS]&env[LOG_CHANNEL]&env[AUTH_CHANNEL]&env[MAX_RIST_BTNS]=10&env[CUSTOM_FILE_CAPTION]&env[DATABASE_URL]&env[DATABASE_NAME]=MknBotz&env[COLLECTION_NAME]=Telegram_files&env[SUPPORT_CHAT]&env[IMDB]=True&env[PM_IMDB]=True&env[IMDB_TEMPLATE]&env[IMDB_DELET_TIME]=900&env[SINGLE_BUTTON]=True&env[PMFILTER]=True&env[G_FILTER]=True&env[BUTTON_LOCK]=True&env[P_TTI_SHOW_OFF]=True&run_command=python%20bot.py&branch=main&name=mr-rofessor) +
+ +
+Basic Commands + +``` +start - check bot alive +settings - get settings +logs - to get the rescent errors +stats - to get status of files in db. +filter - add manual filters +filters - view filters +connect - connect to PM. +disconnect - disconnect from PM +connections - check all connections +del - delete a filter +delall - delete all filters +deleteall - delete all index(autofilter) +delete - delete a specific file from index. +info - get user info +id - get tg ids. +imdb - fetch info from imdb. +users - to get list of my users and ids. +chats - to get list of the my chats and ids +leave - to leave from a chat. +disable - do disable a chat. +enable - re-enable chat. +ban_user - to ban a user. +unban_user - to unban a user. +channel - to get list of total connected channels +broadcast - to broadcast a message to all Eva Maria users +``` + +
+ +## TELAGRAM SUPPORT + +* [![MKN BOTZ](https://img.shields.io/static/v1?label=MKN&message=BOTZ&color=critical)](https://t.me/mkn_bots_updates) + +## Credit 💞 + +* [![TEAM EVA-MARIA](https://img.shields.io/static/v1?label=TEAM&message=EVA-MARIA&color=yellow)](https://t.me/TeamEvamaria) + +* [![BASE REPO](https://img.shields.io/static/v1?label=BASE&message=REPO&color=green)](https://t.me/TeamEvamaria) + + +## Disclaimer +[![GNU Affero General Public License 2.0](https://www.gnu.org/graphics/agplv3-155x51.png)](https://www.gnu.org/licenses/agpl-3.0.en.html#header) +Licensed under [GNU AGPL 3.0.](https://github.com/MrMKN/PROFESSOR-BOT/blob/main/LICENSE) +Selling The Codes To Other People For Money Is *Strictly Prohibited*. (its external alert) + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\requirements.txt +#--Main----# +pyrofork==2.3.45 +tgcrypto==1.2.5 +aiofiles==22.1.0 +aiohttp==3.10.11 +requests==2.30.0 +bs4==0.0.1 + +#---database---# +pymongo +dnspython +marshmallow +umongo +motor + +#---ytdl----# +youtube-search-python +youtube-search +yt-dlp==2023.2.17 + +#---imdb---# +cinemagoer==2023.5.1 + +#---others----# +opencv-python-headless==4.7.0.68 +googletrans==3.1.0a0 +telegraph==2.2.0 +python-dotenv==0.21.1 +gTTS==2.3.1 +Pillow==10.2.0 +psutil==5.9.4 +NumPy==1.26.2 +wheel +ujson +wget +pytz +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\runtime.txt +python-3.10.8 + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\Script.py +class script(object): + START_TXT = """✨ Hᴇʟʟᴏ {user}. + +Mʏ Nᴀᴍᴇ Is {bot}. + +I Cᴀɴ Pʀᴏᴠɪᴅᴇ Mᴏᴠɪᴇ Fᴏʀ Yᴏᴜ Jᴜsᴛ Aᴅᴅ Mᴇ Iɴ Yᴏᴜʀ Gʀᴏᴜᴘ Oʀ Jᴏɪɴ Oᴜʀ Gʀᴏᴜᴘ""" + + HELP_TXT = "Hᴇʏ {}\nHᴇʀᴇ Mꜱ Mʏ Hᴇʟᴩ" + + ABOUT_TXT = """✯ Mʏ ɴᴀᴍᴇ: {} +✯ Dᴇᴠᴇʟᴏᴩᴇʀ: ᴍʀ.ᴍᴋɴ ᴛɢ +✯ Cᴏᴅᴇᴅ Oɴ: ᴩʏᴛʜᴏɴ/ᴩʏʀᴏɢʀᴀᴍ +✯ Mʏ DᴀᴛᴀBᴀꜱᴇ: ᴍᴏɴɢᴏ-ᴅʙ +✯ Mʏ Sᴇʀᴠᴇʀ: ᴀɴʏᴡʜᴇʀᴇ +✯ Mʏ Vᴇʀꜱɪᴏɴ: ᴩʀᴏꜰᴇꜱꜱᴏʀ-ʙᴏᴛ ᴠ4.5.0""" + + SOURCE_TXT = """NOTE: +- ꜱᴏᴜʀᴄᴇ ᴄᴏᴅᴇ ʜᴇʀᴇ ◉› :𝐏𝐑𝐎𝐅𝐄𝐒𝐒𝐎𝐑-𝐁𝐎𝐓 + +ᴅᴇᴠ: ᴍʀ.ᴍᴋɴ ᴛɢ""" + + FILE_TXT = """➤ Hᴇʟᴘ Fᴏʀ Fɪʟᴇ Sᴛᴏʀᴇ + +Bʏ Usɪɴɢ Tʜɪs Mᴏᴅᴜʟᴇ Yᴏᴜ Cᴀɴ Sᴛᴏʀᴇ Fɪʟᴇs Iɴ Mʏ Dᴀᴛᴀʙᴀsᴇ Aɴᴅ I Wɪʟʟ Gɪᴠᴇ Yᴏᴜ A Pᴇʀᴍᴀɴᴇɴᴛ Lɪɴᴋ Tᴏ Aᴄᴄᴇss Tʜᴇ Sᴀᴠᴇᴅ Fɪʟᴇs. Iғ Yᴏᴜ Wᴀɴᴛ Tᴏ Aᴅᴅ Fɪʟᴇs Fʀᴏᴍ A Pᴜʙʟɪᴄ Cʜᴀɴɴᴇʟ Sᴇɴᴅ Tʜᴇ Fɪʟᴇ Lɪɴᴋ Oɴʟʏ Oʀ Yᴏᴜ Wᴀɴᴛ Tᴏ Aᴅᴅ Fɪʟᴇs Fʀᴏᴍ A Pʀɪᴠᴀᴛᴇ Cʜᴀɴɴᴇʟ Yᴏᴜʀ Mᴜsᴛ Mᴀᴋᴇ Mᴇ Aᴅᴍɪɴ Oɴ Tʜᴇ Cʜᴀɴɴᴇʟ Tᴏ Aᴄᴄᴇss Fɪʟᴇs + +⪼ Cᴏᴍᴍᴀɴᴅ & Usᴀɢᴇ +➪ /link › Rᴇᴘʟʏ Tᴏ Aɴʏ Mᴇᴅɪᴀ Tᴏ Gᴇᴛ Tʜᴇ Lɪɴᴋ +➪ /batch › Tᴏ Cʀᴇᴀᴛᴇ Lɪɴᴋ Fᴏʀ Mᴜʟᴛɪᴘʟᴇ Mᴇᴅɪᴀ + +⪼ EG: +/batch https://t.me/mkn_bots_updates/1 https://t.me/mkn_bots_updates/10""" + + FILTER_TXT = "Sᴇʟᴇᴄᴛ Wʜɪᴄʜ Oɴᴇ Yᴏᴜ Wᴀɴᴛ...✨" + + GLOBALFILTER_TXT = """Hᴇʟᴘ Fᴏʀ Gʟᴏʙᴀʟ Fɪʟᴛᴇʀs + +Fɪʟᴛᴇʀ Is Tʜᴇ Fᴇᴀᴛᴜʀᴇ Wᴇʀᴇ Usᴇʀs Cᴀɴ Sᴇᴛ Aᴜᴛᴏᴍᴀᴛᴇᴅ Rᴇᴘʟɪᴇs Fᴏʀ A Pᴀʀᴛɪᴄᴜʟᴀʀ Kᴇʏᴡᴏʀᴅ Aɴᴅ Bᴏᴛ Wɪʟʟ Rᴇsᴘᴏɴᴅ Wʜᴇɴᴇᴠᴇʀ A Kᴇʏᴡᴏʀᴅ Is Fᴏᴜɴᴅ Tʜᴇ Mᴇssᴀɢᴇ + +Nᴏᴛᴇ: +Tʜɪs Mᴏᴅᴜʟᴇ Oɴʟʏ Wᴏʀᴋs Fᴏʀ Mʏ Aᴅᴍɪɴs + +Cᴏᴍᴍᴀɴᴅs Aɴᴅ Usᴀɢᴇ: +• /gfilter - Tᴏ Aᴅᴅ Gʟᴏʙᴀʟ Fɪʟᴛᴇʀs +• /gfilters - Tᴏ Vɪᴇᴡ Lɪsᴛ Oғ Aʟʟ Gʟᴏʙᴀʟ Fɪʟᴛᴇʀs +• /delg - Tᴏ Dᴇʟᴇᴛᴇ A Sᴘᴇᴄɪғɪᴄ Gʟᴏʙᴀʟ Fɪʟᴛᴇʀ +• /delallg - Tᴏ Dᴇʟᴇᴛᴇ Aʟʟ Gʟᴏʙᴀʟ Fɪʟᴛᴇʀꜱ + +• /g_filter off Usᴇ Tʜɪs Cᴏᴍᴍᴏᴀɴᴅ + on/offғ Iɴ Yᴏᴜʀ Gʀᴏᴜᴘ Tᴏ Cᴏɴᴛʀᴏʟ Gʟᴏʙᴀʟ Fɪʟᴛᴇʀ Iɴ Yᴏᴜʀ Gʀᴏᴜᴘ""" + + MANUELFILTER_TXT = """Hᴇʟᴘ Fᴏʀ Fɪʟᴛᴇʀs + +Fɪʟᴛᴇʀ Is Tʜᴇ Fᴇᴀᴛᴜʀᴇ Wᴇʀᴇ Usᴇʀs Cᴀɴ Sᴇᴛ Aᴜᴛᴏᴍᴀᴛᴇᴅ Rᴇᴘʟɪᴇs Fᴏʀ A Pᴀʀᴛɪᴄᴜʟᴀʀ Kᴇʏᴡᴏʀᴅ Aɴᴅ Bᴏᴛ Wɪʟʟ Rᴇsᴘᴏɴᴅ Wʜᴇɴᴇᴠᴇʀ A Kᴇʏᴡᴏʀᴅ Is Fᴏᴜɴᴅ Tʜᴇ Mᴇssᴀɢᴇ + +Nᴏᴛᴇ: +𝟷. Tʜɪs Bᴏᴛ Sʜᴏᴜʟᴅ Hᴀᴠᴇ Aᴅᴍɪɴ Pʀɪᴠɪʟʟᴀɢᴇ. +𝟸. Oɴʟʏ Aᴅᴍɪɴs Cᴀɴ Aᴅᴅ Fɪʟᴛᴇʀs Iɴ A Cʜᴀᴛ. +𝟹. Aʟᴇʀᴛ Bᴜᴛᴛᴏɴs Hᴀᴠᴇ A Lɪᴍɪᴛ Oғ 𝟼𝟺 Cʜᴀʀᴀᴄᴛᴇʀs. + +Cᴏᴍᴍᴀɴᴅs Aɴᴅ Usᴀɢᴇ: +• /filter - Aᴅᴅ A Fɪʟᴛᴇʀ Iɴ Cʜᴀᴛ +• /filters - Lɪsᴛ Aʟʟ Tʜᴇ Fɪʟᴛᴇʀs Oғ A Cʜᴀᴛ +• /del - Dᴇʟᴇᴛᴇ A Sᴘᴇᴄɪғɪᴄ Fɪʟᴛᴇʀ Iɴ Cʜᴀᴛ +• /delall - Dᴇʟᴇᴛᴇ Tʜᴇ Wʜᴏʟᴇ Fɪʟᴛᴇʀs Iɴ A Cʜᴀᴛ (Cʜᴀᴛ Oᴡɴᴇʀ Oɴʟʏ) + +• /g_filter off Usᴇ Tʜɪs Cᴏᴍᴍᴏᴀɴᴅ + on/offғ Iɴ Yᴏᴜʀ Gʀᴏᴜᴘ Tᴏ Cᴏɴᴛʀᴏʟ Gʟᴏʙᴀʟ Fɪʟᴛᴇʀ Iɴ Yᴏᴜʀ Gʀᴏᴜᴘ""" + + BUTTON_TXT = """Hᴇʟᴘ Fᴏʀ Bᴜᴛᴛᴏɴs + +Tʜɪs Bᴏᴛ Sᴜᴘᴘᴏʀᴛs Bᴏᴛʜ Uʀʟ Aɴᴅ Aʟᴇʀᴛ Iɴʟɪɴᴇ Bᴜᴛᴛᴏɴs. + +Nᴏᴛᴇ: +𝟷. Tᴇʟᴇɢʀᴀᴍ Wɪʟʟ Nᴏᴛ Aʟʟᴏᴡs Yᴏᴜ Tᴏ Sᴇɴᴅ Bᴜᴛᴛᴏɴs Wɪᴛʜᴏᴜᴛ Aɴʏ Cᴏɴᴛᴇɴᴛ, Sᴏ Cᴏɴᴛᴇɴᴛ Is Mᴀɴᴅᴀᴛᴏʀʏ. +𝟸. Tʜɪs Bᴏᴛ Sᴜᴘᴘᴏʀᴛs Bᴜᴛᴛᴏɴs Wɪᴛʜ Aɴʏ Tᴇʟᴇɢʀᴀᴍ Mᴇᴅɪᴀ Tʏᴘᴇ. +𝟹. Bᴜᴛᴛᴏɴs Sʜᴏᴜʟᴅ Bᴇ Pʀᴏᴘᴇʀʟʏ Pᴀʀsᴇᴅ As Mᴀʀᴋᴅᴏᴡɴ Fᴏʀᴍᴀᴛ + +Uʀʟ Bᴜᴛᴛᴏɴs: +[Bᴜᴛᴛᴏɴ Tᴇxᴛ](buttonurl:xxxxxxxxxxxx) + +Aʟᴇʀᴛ Bᴜᴛᴛᴏɴs: +[Bᴜᴛᴛᴏɴ Tᴇxᴛ](buttonalert:Tʜɪs Is Aɴ Aʟᴇʀᴛ Mᴇssᴀɢᴇ)""" + + AUTOFILTER_TXT = """Hᴇʟᴘ Fᴏʀ AᴜᴛᴏFɪʟᴛᴇʀ + +Aᴜᴛᴏ Fɪʟᴛᴇʀ Is Tʜᴇ Fᴇᴀᴛᴜʀᴇ Tᴏ Fɪʟᴛᴇʀ & Sᴀᴠᴇ Tʜᴇ Fɪʟᴇs Aᴜᴛᴏᴍᴀᴛɪᴄᴀʟʟʏ Fʀᴏᴍ Cᴜᴀɴɴᴇʟ Tᴏ Gʀᴏᴜᴘ. Yᴏᴜ Cᴀɴ Usᴇ Tʜᴇ Fᴏʟʟᴏᴡɪɴɢ Cᴏᴍᴍᴀɴᴅ Tᴏ ᴏɴ/ᴏғғ Tʜᴇ AᴜᴛᴏFɪʟᴛᴇʀ Iɴ Yᴏᴜʀ Gʀᴏᴜᴘ + +• /autofilter on - ᴀᴜᴛᴏғɪʟᴛᴇʀ ᴇɴᴀʙʟᴇ ɪɴ ʏᴏʀ ᴄʜᴀᴛ +• /autofilter off - ᴀᴜᴛᴏғɪʟᴛᴇʀ ᴅɪsᴀʙʟᴇ ɪɴ ʏᴏᴜʀ ᴄʜᴀᴛ + +Oᴛʜᴇʀ Cᴏᴍᴍᴀɴᴅs: +• /set_template - Sᴇᴛ Iᴍᴅʙ Tᴇᴍᴘʟᴀᴛᴇ Fᴏʀ Yᴏᴜʀ Gʀᴏᴜᴘ +• /get_template - Gᴇᴛ Cᴜʀʀᴇɴᴛ Iᴍᴅʙ Tᴇᴍᴘʟᴀᴛᴇ Fᴏʀ Yᴏᴜʀ Gʀᴏᴜᴘ""" + + CONNECTION_TXT = """Hᴇʟᴘ Fᴏʀ Cᴏɴɴᴇᴄᴛɪᴏɴs + + Usᴇᴅ Tᴏ Cᴏɴɴᴇᴄᴛ Bᴏᴛ Tᴏ Pᴍ Fᴏʀ Mᴀɴᴀɢɪɴɢ Fɪʟᴛᴇʀs. Iᴛ Hᴇʟᴘs Tᴏ Aᴠᴏɪᴅ Sᴘᴀᴍᴍɪɴɢ Iɴ Gʀᴏᴜᴘs + +Nᴏᴛᴇ: +• Oɴʟʏ Aᴅᴍɪɴs Cᴀɴ Aᴅᴅ A Cᴏɴɴᴇᴄᴛɪᴏɴ. +• Sᴇɴᴅ /connect Fᴏʀ Cᴏɴɴᴇᴄᴛɪɴɢ Mᴇ Tᴏ Uʀ Pᴍ + +Cᴏᴍᴍᴀɴᴅs Aɴᴅ Usᴀɢᴇ: +• /connect - Cᴏɴɴᴇᴄᴛ A Pᴀʀᴛɪᴄᴜʟᴀʀ Cʜᴀᴛ Tᴏ Yᴏᴜʀ Pᴍ +• /disconnect - Dɪsᴄᴏɴɴᴇᴄᴛ Fʀᴏᴍ A Cʜᴀᴛ +• /connections - Lɪsᴛ Aʟʟ Yᴏᴜʀ Cᴏɴɴᴇᴄᴛɪᴏɴs""" + + ADMIN_TXT = """Hᴇʟᴩ Fᴏʀ Aᴅᴍɪɴꜱ + +Tʜɪs Mᴏᴅᴜʟᴇ Oɴʟʏ Wᴏʀᴋs Fᴏʀ Mʏ Aᴅᴍɪɴs + +Cᴏᴍᴍᴀɴᴅ & Uꜱᴀɢᴇ +• /logs - Tᴏ Gᴇᴛ Tʜᴇ Rᴇᴄᴇɴᴛ Eʀʀᴏʀꜱ +• /delete - Tᴏ Dᴇʟᴇᴛᴇ A Sᴘᴇᴄɪꜰɪᴄ Fɪʟᴇ Fʀᴏᴍ DB +• /deleteall - Tᴏ Dᴇʟᴇᴛᴇ Aʟʟ Fɪʟᴇs Fʀᴏᴍ DB +• /users - Tᴏ Gᴇᴛ Lɪꜱᴛ Oꜰ Mʏ Uꜱᴇʀꜱ Aɴᴅ Iᴅꜱ +• /chats - Tᴏ Gᴇᴛ Lɪꜱᴛ Oꜰ Mʏ Cʜᴀᴛꜱ Aɴᴅ Iᴅꜱ +• /channel - Tᴏ Gᴇᴛ Lɪꜱᴛ Oꜰ Tᴏᴛᴀʟ Cᴏɴɴᴇᴄᴛᴇᴅ Cʜᴀɴɴᴇʟꜱ +• /broadcast - Tᴏ Bʀᴏᴀᴅᴄᴀꜱᴛ A Mᴇꜱꜱᴀɢᴇ Tᴏ Aʟʟ Uꜱᴇʀꜱ +• /group_broadcast - Tᴏ Bʀᴏᴀᴅᴄᴀsᴛ A Mᴇssᴀɢᴇ Tᴏ Aʟʟ Cᴏɴɴᴇᴄᴛᴇᴅ Gʀᴏᴜᴘs +• /leave - Wɪᴛʜ Cʜᴀᴛ Iᴅ Tᴏ Lᴇᴀᴠᴇ Fʀᴏᴍ A Cʜᴀᴛ +• /disable - Wɪᴛʜ Cʜᴀᴛ Iᴅ Tᴏ Dɪꜱᴀʙʟᴇ A Cʜᴀᴛ +• /invite - Wɪᴛʜ Cʜᴀᴛ Iᴅ Tᴏ Gᴇᴛ Tʜᴇ Iɴᴠɪᴛᴇ Lɪɴᴋ Oғ Aɴʏ Cʜᴀᴛ Wʜᴇʀᴇ Tʜᴇ Bᴏᴛ Is Aᴅᴍɪɴ +• /ban_user - Wɪᴛʜ Iᴅ Tᴏ Bᴀɴ A Uꜱᴇʀ +• /unban_user - Wɪᴛʜ Iᴅ Tᴏ Uɴʙᴀɴ A Uꜱᴇʀ +• /restart - Tᴏ Rᴇsᴛᴀʀᴛ Tʜᴇ Bᴏᴛ +• /clear_junk - Cʟᴇᴀʀ Aʟʟ Dᴇʟᴇᴛᴇ Aᴄᴄᴏᴜɴᴛ & Bʟᴏᴄᴋᴇᴅ Aᴄᴄᴏᴜɴᴛ Iɴ Dᴀᴛᴀʙᴀsᴇ +• /clear_junk_group - Cʟᴇᴀʀ Aᴅᴅ Rᴇᴍᴏᴠᴇᴅ Gʀᴏᴜᴘ Oʀ Dᴇᴀᴄᴛɪᴠᴀᴛᴇᴅ Gʀᴏᴜᴘs Oɴ Dʙ""" + + + STATUS_TXT = """◉ ᴛᴏᴛᴀʟ ꜰɪʟᴇꜱ: {} +◉ ᴛᴏᴛᴀʟ ᴜꜱᴇʀꜱ: {} +◉ ᴛᴏᴛᴀʟ ᴄʜᴀᴛꜱ: {} +◉ ᴜꜱᴇᴅ ᴅʙ ꜱɪᴢᴇ: {} +◉ ꜰᴇᴇᴇ ᴅʙ ꜱɪᴢᴇ: {}""" + + LOG_TEXT_G = """#ɴᴇᴡ_ɢʀᴏᴜᴩ + +◉ ɢʀᴏᴜᴩ: {a} +◉ ɢ-ɪᴅ: {b} +◉ ʟɪɴᴋ: @{c} +◉ ᴍᴇᴍʙᴇʀꜱ: {d} +◉ ᴀᴅᴅᴇᴅ ʙʏ: {e} + +◉ ʙʏ: @{f}""" + + LOG_TEXT_P = """#ɴᴇᴡ_ᴜꜱᴇʀ + +◉ ᴜꜱᴇʀ-ɪᴅ: {} +◉ ᴀᴄᴄ-ɴᴀᴍᴇ: {} +◉ ᴜꜱᴇʀɴᴀᴍᴇ: @{} + +◉ ʙʏ: @{}""" + + GROUPMANAGER_TXT = """Hᴇʟᴩ Fᴏʀ GʀᴏᴜᴩMᴀɴᴀɢᴇʀ + +Tʜɪꜱ Iꜱ Hᴇʟᴩ Oꜰ Yᴏᴜʀ Gʀᴏᴜᴩ Mᴀɴᴀɢɪɴɢ. Tʜɪꜱ Wɪʟʟ Wᴏʀᴋ Oɴʟʏ Fᴏʀ Gʀᴏᴜᴩ aᴅᴍɪɴꜱ + +Cᴏᴍᴍᴀɴᴅ & Uꜱᴀɢᴇ: +• /inkick - Cᴏᴍᴍᴀɴᴅ Wɪᴛʜ Rᴇǫᴜɪʀᴇᴅ Aʀɢᴜᴍᴇɴᴛs Aɴᴅ I Wɪʟʟ Kɪᴄᴋ Mᴇᴍʙᴇʀs Fʀᴏᴍ Gʀᴏᴜᴘ. +• /instatus - Tᴏ Cʜᴇᴄᴋ Cᴜʀʀᴇɴᴛ Sᴛᴀᴛᴜs Oғ Cʜᴀᴛ Mᴇᴍʙᴇʀ Fʀᴏᴍ Gʀᴏᴜᴘ. +• /dkick - Tᴏ Kɪᴄᴋ Dᴇʟᴇᴛᴇᴅ Aᴄᴄᴏᴜɴᴛs +• /ban - To Bᴀɴ A Uꜱᴇʀ Fᴏʀᴍ Tʜᴇ Gʀᴏᴜᴩ +• /unban - Uɴʙᴀɴ Tʜᴇ Bᴀɴɴᴇᴅ Uꜱᴇʀ +• /tban - Tᴇᴍᴩᴏʀᴀʀʏ Bᴀɴ A Uꜱᴇʀ +• /mute - To Mᴜᴛᴇ A Uꜱᴇʀ +• /unmute - To Uɴᴍᴜᴛᴇ Tʜᴇ Mᴜᴛᴇᴅ Uꜱᴇʀ +• /tmute - Wɪᴛʜ Vᴀʟᴜᴇ To Mᴜᴛᴇ Uᴩ To Pᴀʀᴛɪᴄᴜʟᴀʀ Tɪᴍᴇ Eɢ: /tmute 2h To Mᴜᴛᴇ 2Hᴏᴜʀ Vᴀʟᴜᴇꜱ Iꜱ (m/h/d) +• /pin - Tᴏ Pɪɴ A Mᴇꜱꜱᴀɢᴇ Oɴ Yᴏᴜʀ Cʜᴀᴛ +• /unpin - Tᴏ Uɴᴩɪɴ Tʜᴇ Mᴇꜱꜱᴀɢᴇ Oɴ Yᴏᴜʀ Cʜᴀᴛ +• /purge - Dᴇʟᴇᴛᴇ Aʟʟ Mᴇssᴀɢᴇs Fʀᴏᴍ Tʜᴇ Rᴇᴘʟɪᴇᴅ Tᴏ Mᴇssᴀɢᴇ, Tᴏ Tʜᴇ Cᴜʀʀᴇɴᴛ Mᴇssᴀɢᴇ """ + + EXTRAMOD_TXT = """Hᴇʟᴩ Fᴏʀ Exᴛʀᴀ Mᴏᴅᴜʟᴇ + +Jᴜꜱᴛ Sᴇɴᴅ Aɴʏ Iᴍᴀɢᴇ Tᴏ Eᴅɪᴛ Iᴍᴀɢᴇ ✨ + +Cᴏᴍᴍᴀɴᴅꜱ & Uꜱᴀɢᴇ: +• /id - Gᴇᴛ Iᴅ Oғ A Sᴘᴇᴄɪғᴇᴅ Usᴇʀ +• /info - Gᴇᴛ Iɴғᴏʀᴍᴀᴛɪᴏɴ Aʙᴏᴜᴛ A Usᴇʀ +• /imdb - Gᴇᴛ Tʜᴇ Fɪʟᴍ Iɴғᴏʀᴍᴀᴛɪᴏɴ Fʀᴏᴍ Iᴍᴅʙ Sᴏᴜʀᴄᴇ +• /paste [ᴛᴇxᴛ] - Pᴀsᴛᴇ Tʜᴇ Gɪᴠᴇɴ Tᴇxᴛ Oɴ Pᴀsᴛʏ +• /tts [ᴛᴇxᴛ] - Cᴏɴᴠᴇʀᴛ Tᴇxᴛ Tᴏ Sᴘᴇᴇᴄʜ +• /telegraph - Sᴇɴᴅ Mᴇ Tʜɪs Cᴏᴍᴍᴀɴᴅ Rᴇᴘʟʏ Wɪᴛʜ Pɪᴄᴛᴜʀᴇ Oʀ Vɪᴅᴇ Uɴᴅᴇʀ (𝟻ᴍʙ) +• /json - Rᴇᴩʟʏ Wɪᴛʜ Aɴʏ Mᴇꜱꜱᴀɢᴇ Tᴏ Gᴇᴛ Mᴇꜱꜱᴀɢᴇ Iɴꜰᴏ (ᴜꜱᴇꜰᴜʟʟ ꜰᴏʀ ɢʀᴏᴜᴩ) +• /written - Rᴇᴩʟʏ Wɪᴛʜ Tᴇxᴛ Tᴏ Gᴇᴛ Fɪʟᴇ (ᴜꜱᴇꜰᴜʟʟ ꜰᴏʀ ᴄᴏᴅᴇʀꜱ) +• /carbon - Rᴇᴘʟʏ Wɪᴛʜ Tᴇxᴛ Tᴏ Gᴇᴛ Cᴀʀʙᴏɴᴀᴛᴇᴅ Iᴍᴀɢᴇ +• /font [ᴛᴇxᴛ] - Tᴏ Cʜᴀɴɢᴇ Yᴏᴜʀ Tᴇxᴛ Fᴏɴᴛs Tᴏ Fᴀɴᴄʏ Fᴏɴᴛ +• /share - Rᴇᴘʟʏ Wɪᴛʜ Tᴇxᴛ Tᴏ Gᴇᴛ Tᴇxᴛ Sʜᴀʀᴀʙʟᴇ Lɪɴᴋ +• /song [ɴᴀᴍᴇ] - Tᴏ Sᴇᴀʀᴄʜ Tʜᴇ Sᴏɴɢ Iɴ YᴏᴜTᴜʙᴇ +• /video [ʟɪɴᴋ] - Tᴏ Dᴏᴡɴʟᴏᴀᴅ Tʜᴇ YᴏᴜTᴜʙᴇ Vɪᴅᴇᴏ""" + + CREATOR_REQUIRED = "❗Yᴏᴜ Hᴀᴠᴇ To Bᴇ Tʜᴇ Gʀᴏᴜᴩ Cʀᴇᴀᴛᴏʀ Tᴏ Dᴏ Tʜᴀᴛ" + + INPUT_REQUIRED = "❗ **Aʀɢᴜᴍᴇɴ Rqᴜɪʀᴇᴅ**" + + KICKED = "✔️ Sᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ Kɪᴄᴋᴇᴅ {} Mᴇᴍʙᴇʀꜱ Acᴄᴏʀᴅɪɴɢ To Tʜᴇ Aʀɢᴜᴍᴇɴᴛꜱ Prᴏᴠɪᴅᴇᴅ" + + START_KICK = "Rᴇᴍᴏᴠɪɴɢ Iɴᴀᴄᴛɪᴠᴇ Mᴇᴍʙᴇʀs Tʜɪs Mᴀʏ Tᴀᴋᴇ A Wʜɪʟᴇ" + + ADMIN_REQUIRED = "❗Iᴀᴍ Nᴏᴛ Aᴅᴍɪɴ Iɴ Tʜɪꜱ Cʜᴀᴛ Sᴏ Pʟᴇᴀꜱᴇ Aᴅᴅ Mᴇ Aɢᴀɪɴ Wɪᴛʜ Aʟʟ Pᴅᴍɪɴ Pᴇʀᴍɪꜱꜱɪᴏɴ" + + DKICK = "✔️ Kɪᴄᴋᴇᴅ {} Dᴇʟᴇᴛᴇᴅ Aᴄᴄᴏᴜɴᴛꜱ Sᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ" + + FETCHING_INFO = "Wᴀɪᴛ I Wɪʟʟ Tᴀᴋᴇ Tʜᴇ Aʟʟ Iɴꜰᴏ" + + SERVER_STATS = """Sᴇʀᴠᴇʀ Sᴛᴀᴛꜱ: + +Uᴩᴛɪᴍᴇ: {} +CPU Uꜱᴀɢᴇ: {}% +RAM Uꜱᴀɢᴇ: {}% +Tᴏᴛᴀʟ Dɪꜱᴋ: {} +Uꜱᴇᴅ Dɪꜱᴋ: {} ({}%) +Fʀᴇᴇ Dɪꜱᴋ: {}""" + + BUTTON_LOCK_TEXT = "Hᴇʏ {query}\nTʜɪꜱ Iꜱ Nᴏᴛ Fᴏʀ Yᴏᴜ. Sᴇᴀʀᴄʜ Yᴏᴜʀ Sᴇʟꜰ" + + FORCE_SUB_TEXT = "Sᴏʀʀʏ Bʀᴏ Yᴏᴜʀ Nᴏᴛ Jᴏɪɴᴇᴅ Mʏ Cʜᴀɴɴᴇʟ Sᴏ Pʟᴇᴀsᴇ Cʟɪᴄᴋ Jᴏɪɴ Bᴜᴛᴛᴏɴ Tᴏ Jᴏɪɴ Mʏ Cʜᴀɴɴᴇʟ Aɴᴅ Tʀʏ Aɢᴀɪɴ" + + WELCOM_TEXT = """Hᴇʏ {user} 💞 + +Wᴇʟᴄᴏᴍᴇ ᴛᴏ {chat}. + +ꜱʜᴀʀᴇ & ꜱᴜᴩᴩᴏʀᴛ, ʀᴇqᴜᴇꜱᴛ ʏᴏᴜ ᴡᴀɴᴛᴇᴅ ᴍᴏᴠɪᴇꜱ""" + + IMDB_TEMPLATE = """Qᴜᴇʀʏ: {query} + +🏷 Tɪᴛʟᴇ: {title} +🎭 Gᴇɴʀᴇꜱ: {genres} +📆 Yᴇᴀʀ: {year} +🌟 Rᴀᴛɪɴɢ: {rating}/10""" + + + + + + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\utils.py +import logging, os, re, asyncio, requests, aiohttp +from pyrogram.errors import InputUserDeactivated, UserNotParticipant, FloodWait, UserIsBlocked, PeerIdInvalid +from pyrogram.types import Message, InlineKeyboardButton +from pyrogram import filters, enums +from info import AUTH_CHANNEL, LONG_IMDB_DESCRIPTION, MAX_LIST_ELM, SHORT_URL, SHORT_API +from imdb import Cinemagoer +from typing import Union, List +from datetime import datetime, timedelta +from database.users_chats_db import db +from bs4 import BeautifulSoup + +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + +BTN_URL_REGEX = re.compile(r"(\[([^\[]+?)\]\((buttonurl|buttonalert):(?:/{0,2})(.+?)(:same)?\))") +BANNED = {} +SMART_OPEN = '“' +SMART_CLOSE = '”' +START_CHAR = ('\'', '"', SMART_OPEN) + +# temp db for banned +class temp(object): + BANNED_USERS = [] + BANNED_CHATS = [] + CURRENT = 0 + CANCEL = False + MELCOW = {} + U_NAME = None + B_NAME = None + SETTINGS = {} + GP_BUTTONS = {} + PM_BUTTONS = {} + PM_SPELL = {} + GP_SPELL = {} + +async def is_subscribed(bot, query): + try: + user = await bot.get_chat_member(AUTH_CHANNEL, query.from_user.id) + except UserNotParticipant: + pass + except Exception as e: + print(e) + else: + if user.status != enums.ChatMemberStatus.BANNED: + return True + return False + + +async def get_poster(query, bulk=False, id=False, file=None): + imdb = Cinemagoer() + if not id: + query = (query.strip()).lower() + title = query + year = re.findall(r'[1-2]\d{3}$', query, re.IGNORECASE) + if year: + year = list_to_str(year[:1]) + title = (query.replace(year, "")).strip() + elif file is not None: + year = re.findall(r'[1-2]\d{3}', file, re.IGNORECASE) + if year: + year = list_to_str(year[:1]) + else: + year = None + try: + movieid = imdb.search_movie(title.lower(), results=10) + except: + return None + if not movieid: + return None + if year: + filtered=list(filter(lambda k: str(k.get('year')) == str(year), movieid)) + if not filtered: + filtered = movieid + else: + filtered = movieid + movieid=list(filter(lambda k: k.get('kind') in ['movie', 'tv series'], filtered)) + if not movieid: + movieid = filtered + if bulk: + return movieid + movieid = movieid[0].movieID + else: + movieid = query + movie = imdb.get_movie(movieid) + if movie.get("original air date"): + date = movie["original air date"] + elif movie.get("year"): + date = movie.get("year") + else: + date = "N/A" + plot = "" + if not LONG_IMDB_DESCRIPTION: + plot = movie.get('plot') + if plot and len(plot) > 0: + plot = plot[0] + else: + plot = movie.get('plot outline') + if plot and len(plot) > 800: + plot = plot[0:800] + "..." + + return { + 'title': movie.get('title'), + 'votes': movie.get('votes'), + "aka": list_to_str(movie.get("akas")), + "seasons": movie.get("number of seasons"), + "box_office": movie.get('box office'), + 'localized_title': movie.get('localized title'), + 'kind': movie.get("kind"), + "imdb_id": f"tt{movie.get('imdbID')}", + "cast": list_to_str(movie.get("cast")), + "runtime": list_to_str(movie.get("runtimes")), + "countries": list_to_str(movie.get("countries")), + "certificates": list_to_str(movie.get("certificates")), + "languages": list_to_str(movie.get("languages")), + "director": list_to_str(movie.get("director")), + "writer":list_to_str(movie.get("writer")), + "producer":list_to_str(movie.get("producer")), + "composer":list_to_str(movie.get("composer")) , + "cinematographer":list_to_str(movie.get("cinematographer")), + "music_team": list_to_str(movie.get("music department")), + "distributors": list_to_str(movie.get("distributors")), + 'release_date': date, + 'year': movie.get('year'), + 'genres': list_to_str(movie.get("genres")), + 'poster': movie.get('full-size cover url'), + 'plot': plot, + 'rating': str(movie.get("rating")), + 'url':f'https://www.imdb.com/title/tt{movieid}' + } + +def list_to_str(k): + if not k: return "N/A" + elif len(k) == 1: return str(k[0]) + elif MAX_LIST_ELM: + k = k[:int(MAX_LIST_ELM)] + return ' '.join(f'{elem}, ' for elem in k) + else: + return ' '.join(f'{elem}, ' for elem in k) + +__repo__ = "https://github.com/MrMKN/PROFESSOR-BOT" +__version__ = "PROFESSOR-BOT ᴠ4.5.0" +__license__ = "GNU GENERAL PUBLIC LICENSE V2" +__copyright__ = "Copyright (C) 2023-present MrMKN " + +async def search_gagala(text): + usr_agent = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' + 'Chrome/61.0.3163.100 Safari/537.36' + } + text = text.replace(" ", '+') + url = f'https://www.google.com/search?q={text}' + response = requests.get(url, headers=usr_agent) + response.raise_for_status() + soup = BeautifulSoup(response.text, 'html.parser') + titles = soup.find_all( 'h3' ) + return [title.getText() for title in titles] + + +async def get_settings(group_id): + settings = temp.SETTINGS.get(group_id) + if not settings: + settings = await db.get_settings(group_id) + temp.SETTINGS[group_id] = settings + return settings + +async def save_group_settings(group_id, key, value): + current = await get_settings(group_id) + current[key] = value + temp.SETTINGS[group_id] = current + await db.update_settings(group_id, current) + +def get_size(size): + units = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB"] + size = float(size) + i = 0 + while size >= 1024.0 and i < len(units): + i += 1 + size /= 1024.0 + return "%.2f %s" % (size, units[i]) + + +def get_file_id(msg: Message): + if not msg.media: return None + for message_type in ("photo", "animation", "audio", "document", "video", "video_note", "voice", "sticker"): + obj = getattr(msg, message_type) + if obj: + setattr(obj, "message_type", message_type) + return obj + + +def extract_user(message: Message) -> Union[int, str]: + user_id = None + user_first_name = None + if message.reply_to_message: + user_id = message.reply_to_message.from_user.id + user_first_name = message.reply_to_message.from_user.first_name + elif len(message.command) > 1: + if (len(message.entities) > 1 and message.entities[1].type == enums.MessageEntityType.TEXT_MENTION): + required_entity = message.entities[1] + user_id = required_entity.user.id + user_first_name = required_entity.user.first_name + else: + user_id = message.command[1] + user_first_name = user_id + try: + user_id = int(user_id) + except ValueError: pass + else: + user_id = message.from_user.id + user_first_name = message.from_user.first_name + return (user_id, user_first_name) + + +def split_quotes(text: str) -> List: + if not any(text.startswith(char) for char in START_CHAR): + return text.split(None, 1) + counter = 1 # ignore first char -> is some kind of quote + while counter < len(text): + if text[counter] == "\\": + counter += 1 + elif text[counter] == text[0] or (text[0] == SMART_OPEN and text[counter] == SMART_CLOSE): + break + counter += 1 + else: + return text.split(None, 1) + + # 1 to avoid starting quote, and counter is exclusive so avoids ending + key = remove_escapes(text[1:counter].strip()) + # index will be in range, or `else` would have been executed and returned + rest = text[counter + 1:].strip() + if not key: + key = text[0] + text[0] + return list(filter(None, [key, rest])) + +def parser(text, keyword, cb_data): + if "buttonalert" in text: text = (text.replace("\n", "\\n").replace("\t", "\\t")) + buttons = [] + note_data = "" + prev = 0 + i = 0 + alerts = [] + for match in BTN_URL_REGEX.finditer(text): + n_escapes = 0 + to_check = match.start(1) - 1 + while to_check > 0 and text[to_check] == "\\": + n_escapes += 1 + to_check -= 1 + # if even, not escaped -> create button + if n_escapes % 2 == 0: + note_data += text[prev:match.start(1)] + prev = match.end(1) + if match.group(3) == "buttonalert": + # create a thruple with button label, url, and newline status + if bool(match.group(5)) and buttons: + buttons[-1].append(InlineKeyboardButton(match.group(2), callback_data=f"{cb_data}:{i}:{keyword}")) + else: + buttons.append([InlineKeyboardButton(match.group(2), callback_data=f"{cb_data}:{i}:{keyword}")]) + i += 1 + alerts.append(match.group(4)) + elif bool(match.group(5)) and buttons: + buttons[-1].append(InlineKeyboardButton(match.group(2), url=match.group(4).replace(" ", ""))) + else: + buttons.append([InlineKeyboardButton(match.group(2), url=match.group(4).replace(" ", ""))]) + else: + note_data += text[prev:to_check] + prev = match.start(1) - 1 + else: note_data += text[prev:] + try: return note_data, buttons, alerts + except: return note_data, buttons, None + + +def remove_escapes(text: str) -> str: + res = "" + is_escaped = False + for counter in range(len(text)): + if is_escaped: + res += text[counter] + is_escaped = False + elif text[counter] == "\\": + is_escaped = True + else: + res += text[counter] + return res + + +def humanbytes(size): + if not size: + return "" + power = 2**10 + n = 0 + Dic_powerN = {0: ' ', 1: 'Ki', 2: 'Mi', 3: 'Gi', 4: 'Ti'} + while size > power: + size /= power + n += 1 + return str(round(size, 2)) + " " + Dic_powerN[n] + 'B' + +def get_time(seconds): + periods = [('ᴅ', 86400), ('ʜ', 3600), ('ᴍ', 60), ('ꜱ', 1)] + result = '' + for period_name, period_seconds in periods: + if seconds >= period_seconds: + period_value, seconds = divmod(seconds, period_seconds) + result += f'{int(period_value)}{period_name}' + return result + +async def get_shortlink(link): + url = f'{SHORT_URL}/api' + params = {'api': SHORT_API, 'url': link} + try: + async with aiohttp.ClientSession() as session: + async with session.get(url, params=params, raise_for_status=True, ssl=False) as response: + data = await response.json() + if data["status"] == "success": + return data['shortenedUrl'] + else: + logger.error(f"Error: {data['message']}") + return link + except Exception as e: + logger.error(e) + return link + + +# from Midukki-RoBoT +def extract_time(time_val): + if any(time_val.endswith(unit) for unit in ("s", "m", "h", "d")): + unit = time_val[-1] + time_num = time_val[:-1] # type: str + if not time_num.isdigit(): + return None + + if unit == "s": + bantime = datetime.now() + timedelta(seconds=int(time_num)) + elif unit == "m": + bantime = datetime.now() + timedelta(minutes=int(time_num)) + elif unit == "h": + bantime = datetime.now() + timedelta(hours=int(time_num)) + elif unit == "d": + bantime = datetime.now() + timedelta(days=int(time_num)) + else: + # how even...? + return None + return bantime + else: + return None + + +async def admin_check(message: Message) -> bool: + if not message.from_user: return False + if message.chat.type not in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: return False + if message.from_user.id in [777000, 1087968824]: return True + client = message._client + chat_id = message.chat.id + user_id = message.from_user.id + check_status = await client.get_chat_member(chat_id=chat_id,user_id=user_id) + admin_strings = [enums.ChatMemberStatus.OWNER, enums.ChatMemberStatus.ADMINISTRATOR] + if check_status.status not in admin_strings: return False + else: return True + +async def admin_filter(filt, client, message): + return await admin_check(message) + + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\database\connections_mdb.py +import pymongo + +from info import DATABASE_URL, DATABASE_NAME + +import logging +logger = logging.getLogger(__name__) +logger.setLevel(logging.ERROR) + +myclient = pymongo.MongoClient(DATABASE_URL) +mydb = myclient[DATABASE_NAME] +mycol = mydb['CONNECTION'] + + +async def add_connection(group_id, user_id): + query = mycol.find_one( + { "_id": user_id }, + { "_id": 0, "active_group": 0 } + ) + if query is not None: + group_ids = [x["group_id"] for x in query["group_details"]] + if group_id in group_ids: + return False + + group_details = { + "group_id" : group_id + } + + data = { + '_id': user_id, + 'group_details' : [group_details], + 'active_group' : group_id, + } + + if mycol.count_documents( {"_id": user_id} ) == 0: + try: + mycol.insert_one(data) + return True + except: + logger.exception('Some error occured!', exc_info=True) + + else: + try: + mycol.update_one( + {'_id': user_id}, + { + "$push": {"group_details": group_details}, + "$set": {"active_group" : group_id} + } + ) + return True + except: + logger.exception('Some error occured!', exc_info=True) + + +async def active_connection(user_id): + + query = mycol.find_one( + { "_id": user_id }, + { "_id": 0, "group_details": 0 } + ) + if not query: + return None + + group_id = query['active_group'] + if group_id != None: + return int(group_id) + else: + return None + + +async def all_connections(user_id): + query = mycol.find_one( + { "_id": user_id }, + { "_id": 0, "active_group": 0 } + ) + if query is not None: + return [x["group_id"] for x in query["group_details"]] + else: + return None + + +async def if_active(user_id, group_id): + query = mycol.find_one( + { "_id": user_id }, + { "_id": 0, "group_details": 0 } + ) + return query is not None and query['active_group'] == group_id + + +async def make_active(user_id, group_id): + update = mycol.update_one( + {'_id': user_id}, + {"$set": {"active_group" : group_id}} + ) + return update.modified_count != 0 + + +async def make_inactive(user_id): + update = mycol.update_one( + {'_id': user_id}, + {"$set": {"active_group" : None}} + ) + return update.modified_count != 0 + + +async def delete_connection(user_id, group_id): + + try: + update = mycol.update_one( + {"_id": user_id}, + {"$pull" : { "group_details" : {"group_id":group_id} } } + ) + if update.modified_count == 0: + return False + query = mycol.find_one( + { "_id": user_id }, + { "_id": 0 } + ) + if len(query["group_details"]) >= 1: + if query['active_group'] == group_id: + prvs_group_id = query["group_details"][len(query["group_details"]) - 1]["group_id"] + + mycol.update_one( + {'_id': user_id}, + {"$set": {"active_group" : prvs_group_id}} + ) + else: + mycol.update_one( + {'_id': user_id}, + {"$set": {"active_group" : None}} + ) + return True + except Exception as e: + logger.exception(f'Some error occured! {e}', exc_info=True) + return False + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\database\filters_mdb.py +import pymongo +from pyrogram import enums +from info import DATABASE_URL, DATABASE_NAME +import logging +logger = logging.getLogger(__name__) +logger.setLevel(logging.ERROR) + +myclient = pymongo.MongoClient(DATABASE_URL) +mydb = myclient["ManualFilters"] + + + +async def add_filter(grp_id, text, reply_text, btn, file, alert): + mycol = mydb[str(grp_id)] + # mycol.create_index([('text', 'text')]) + + data = { + 'text':str(text), + 'reply':str(reply_text), + 'btn':str(btn), + 'file':str(file), + 'alert':str(alert) + } + + try: + mycol.update_one({'text': str(text)}, {"$set": data}, upsert=True) + except: + logger.exception('Some error occured!', exc_info=True) + + +async def find_filter(group_id, name): + mycol = mydb[str(group_id)] + + query = mycol.find( {"text":name}) + # query = mycol.find( { "$text": {"$search": name}}) + try: + for file in query: + reply_text = file['reply'] + btn = file['btn'] + fileid = file['file'] + try: + alert = file['alert'] + except: + alert = None + return reply_text, btn, alert, fileid + except: + return None, None, None, None + + +async def get_filters(group_id): + mycol = mydb[str(group_id)] + + texts = [] + query = mycol.find() + try: + for file in query: + text = file['text'] + texts.append(text) + except: + pass + return texts + + +async def delete_filter(message, text, group_id): + mycol = mydb[str(group_id)] + + myquery = {'text':text } + query = mycol.count_documents(myquery) + if query == 1: + mycol.delete_one(myquery) + await message.reply_text( + f"'`{text}`' deleted. I'll not respond to that filter anymore.", + quote=True, + parse_mode=enums.ParseMode.MARKDOWN + ) + else: + await message.reply_text("Couldn't find that filter!", quote=True) + + +async def del_all(message, group_id, title): + if str(group_id) not in mydb.list_collection_names(): + await message.edit_text(f"Nothing to remove in {title}!") + return + + mycol = mydb[str(group_id)] + try: + mycol.drop() + await message.edit_text(f"All filters from {title} has been removed") + except: + await message.edit_text("Couldn't remove all filters from group!") + return + + +async def count_filters(group_id): + mycol = mydb[str(group_id)] + + count = mycol.count() + if count == 0: + return False + else: + return count + + +async def filter_stats(): + collections = mydb.list_collection_names() + + if "CONNECTION" in collections: + collections.remove("CONNECTION") + + totalcount = 0 + for collection in collections: + mycol = mydb[collection] + count = mycol.count() + totalcount += count + + totalcollections = len(collections) + + return totalcollections, totalcount + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\database\gfilters_mdb.py +import pymongo +from info import DATABASE_URL, DATABASE_NAME +from pyrogram import enums +import logging +logger = logging.getLogger(__name__) +logger.setLevel(logging.ERROR) + +myclient = pymongo.MongoClient(DATABASE_URL) +mydb = myclient["GlobalFilters"] + + + +async def add_gfilter(gfilters, text, reply_text, btn, file, alert): + mycol = mydb[str(gfilters)] + data = { + 'text':str(text), + 'reply':str(reply_text), + 'btn':str(btn), + 'file':str(file), + 'alert':str(alert) + } + try: + mycol.update_one({'text': str(text)}, {"$set": data}, upsert=True) + except: + logger.exception('Some error occured!', exc_info=True) + + +async def find_gfilter(gfilters, name): + mycol = mydb[str(gfilters)] + + query = mycol.find( {"text":name}) + # query = mycol.find( { "$text": {"$search": name}}) + try: + for file in query: + reply_text = file['reply'] + btn = file['btn'] + fileid = file['file'] + try: + alert = file['alert'] + except: + alert = None + return reply_text, btn, alert, fileid + except: + return None, None, None, None + + +async def get_gfilters(gfilters): + mycol = mydb[str(gfilters)] + + texts = [] + query = mycol.find() + try: + for file in query: + text = file['text'] + texts.append(text) + except: + pass + return texts + + +async def delete_gfilter(message, text, gfilters): + mycol = mydb[str(gfilters)] + + myquery = {'text':text } + query = mycol.count_documents(myquery) + if query == 1: + mycol.delete_one(myquery) + await message.reply_text( + f"'`{text}`' deleted. I'll not respond to that gfilter anymore.", + quote=True, + parse_mode=enums.ParseMode.MARKDOWN + ) + else: + await message.reply_text("Couldn't find that gfilter!", quote=True) + +async def del_allg(message, gfilters): + if str(gfilters) not in mydb.list_collection_names(): + await message.edit_text("Nothin!") + return + + mycol = mydb[str(gfilters)] + try: + mycol.drop() + await message.edit_text(f"All filters has been removed") + except: + await message.edit_text("Couldn't remove all filters!") + return + +async def count_gfilters(gfilters): + mycol = mydb[str(gfilters)] + + count = mycol.count() + return False if count == 0 else count + + +async def gfilter_stats(): + collections = mydb.list_collection_names() + + if "CONNECTION" in collections: + collections.remove("CONNECTION") + + totalcount = 0 + for collection in collections: + mycol = mydb[collection] + count = mycol.count() + totalcount += count + + totalcollections = len(collections) + + return totalcollections, totalcount + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\database\ia_filterdb.py +import logging +from struct import pack +import re +import base64 +from pyrogram.file_id import FileId +from pymongo.errors import DuplicateKeyError +from umongo import Instance, Document, fields +from motor.motor_asyncio import AsyncIOMotorClient +from marshmallow.exceptions import ValidationError +from info import FILE_DB_URL, FILE_DB_NAME, COLLECTION_NAME, MAX_RIST_BTNS + +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + + +client = AsyncIOMotorClient(FILE_DB_URL) +db = client[FILE_DB_NAME] +instance = Instance.from_db(db) + +@instance.register +class Media(Document): + file_id = fields.StrField(attribute='_id') + file_ref = fields.StrField(allow_none=True) + file_name = fields.StrField(required=True) + file_size = fields.IntField(required=True) + file_type = fields.StrField(allow_none=True) + mime_type = fields.StrField(allow_none=True) + caption = fields.StrField(allow_none=True) + + class Meta: + collection_name = COLLECTION_NAME + + +async def save_file(media): + file_id, file_ref = unpack_new_file_id(media.file_id) + file_name = re.sub(r"@\w+|(_|\-|\.|\+)", " ", str(media.file_name)) + try: + file = Media( + file_id=file_id, + file_ref=file_ref, + file_name=file_name, + file_size=media.file_size, + file_type=media.file_type, + mime_type=media.mime_type + ) + except ValidationError: + logger.exception('Error Occurred While Saving File In Database') + return False, 2 + else: + try: + await file.commit() + except DuplicateKeyError: + logger.warning(str(getattr(media, "file_name", "NO FILE NAME")) + " is already saved in database") + return False, 0 + else: + logger.info(str(getattr(media, "file_name", "NO FILE NAME")) + " is saved in database") + return True, 1 + + + +async def get_search_results(query, file_type=None, max_results=(MAX_RIST_BTNS), offset=0, filter=False): + query = query.strip() + if not query: raw_pattern = '.' + elif ' ' not in query: raw_pattern = r'(\b|[\.\+\-_])' + query + r'(\b|[\.\+\-_])' + else: raw_pattern = query.replace(' ', r'.*[\s\.\+\-_]') + try: regex = re.compile(raw_pattern, flags=re.IGNORECASE) + except: return [], '', 0 + filter = {'file_name': regex} + if file_type: filter['file_type'] = file_type + + total_results = await Media.count_documents(filter) + next_offset = offset + max_results + if next_offset > total_results: next_offset = '' + + cursor = Media.find(filter) + # Sort by recent + cursor.sort('$natural', -1) + # Slice files according to offset and max results + cursor.skip(offset).limit(max_results) + # Get list of files + files = await cursor.to_list(length=max_results) + return files, next_offset, total_results + + +async def get_file_details(query): + filter = {'file_id': query} + cursor = Media.find(filter) + filedetails = await cursor.to_list(length=1) + return filedetails + + +def encode_file_id(s: bytes) -> str: + r = b"" + n = 0 + for i in s + bytes([22]) + bytes([4]): + if i == 0: + n += 1 + else: + if n: + r += b"\x00" + bytes([n]) + n = 0 + r += bytes([i]) + return base64.urlsafe_b64encode(r).decode().rstrip("=") + + +def encode_file_ref(file_ref: bytes) -> str: + return base64.urlsafe_b64encode(file_ref).decode().rstrip("=") + + +def unpack_new_file_id(new_file_id): + """Return file_id, file_ref""" + decoded = FileId.decode(new_file_id) + file_id = encode_file_id( + pack( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + image = Image.open(a) + brightness = ImageEnhance.Brightness(image) + brightness.enhance(1.5).save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("bright-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + f"{e} \nSomething went wrong!", quote=True + ) + except Exception: + return + + +async def mix(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "mix.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + image = Image.open(a) + red, green, blue = image.split() + new_image = Image.merge("RGB", (green, red, blue)) + new_image.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("mix-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def black_white(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "black_white.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + image_file = cv2.imread(a) + grayImage = cv2.cvtColor(image_file, cv2.COLOR_BGR2GRAY) + cv2.imwrite(edit_img_loc, grayImage) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("black_white-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def normal_blur(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "BlurImage.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + OriImage = Image.open(a) + blurImage = OriImage.filter(ImageFilter.BLUR) + blurImage.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("normal_blur-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def g_blur(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "gaussian_blur.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + im1 = Image.open(a) + im2 = im1.filter(ImageFilter.GaussianBlur(radius=5)) + im2.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("g_blur-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def box_blur(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "box_blur.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + im1 = Image.open(a) + im2 = im1.filter(ImageFilter.BoxBlur(0)) + im2.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("box_blur-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\image\edit_2.py +from PIL import Image, ImageEnhance, ImageDraw +from pyrogram.enums import ChatAction +import numpy as np +import os +import cv2 +import shutil + + +async def circle_with_bg(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "circle.png" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + img = Image.open(a).convert("RGB") + npImage = np.array(img) + h, w = img.size + alpha = Image.new("L", img.size, 0) + draw = ImageDraw.Draw(alpha) + draw.pieslice([0, 0, h, w], 0, 360, fill=255) + npAlpha = np.array(alpha) + npImage = np.dstack((npImage, npAlpha)) + Image.fromarray(npImage).save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("circle_with_bg-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def circle_without_bg(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "circle.png" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + img = Image.open(a).convert("RGB") + npImage = np.array(img) + h, w = img.size + alpha = Image.new("L", img.size, 0) + draw = ImageDraw.Draw(alpha) + draw.pieslice([0, 0, h, w], 0, 360, fill=255) + npAlpha = np.array(alpha) + npImage = np.dstack((npImage, npAlpha)) + Image.fromarray(npImage).save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_DOCUMENT) + await message.reply_to_message.reply_document(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("circle_without_bg-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def sticker(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "sticker.webp" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + os.rename(a, edit_img_loc) + await message.reply_to_message.reply_sticker(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("sticker-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +def add_corners(im, rad): + circle = Image.new("L", (rad * 2, rad * 2), 0) + draw = ImageDraw.Draw(circle) + draw.ellipse((0, 0, rad * 2, rad * 2), fill=255) + alpha = Image.new("L", im.size, 255) + w, h = im.size + alpha.paste(circle.crop((0, 0, rad, rad)), (0, 0)) + alpha.paste(circle.crop((0, rad, rad, rad * 2)), (0, h - rad)) + alpha.paste(circle.crop((rad, 0, rad * 2, rad)), (w - rad, 0)) + alpha.paste(circle.crop((rad, rad, rad * 2, rad * 2)), (w - rad, h - rad)) + im.putalpha(alpha) + return im + + +async def edge_curved(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "edge_curved.webp" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + im = Image.open(a) + im = add_corners(im, 100) + im.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_sticker(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("edge_curved-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def contrast(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "contrast.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + image = Image.open(a) + contrast = ImageEnhance.Contrast(image) + contrast.enhance(1.5).save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("contrast-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +def sepia(img): + width, height = img.size + new_img = img.copy() + for x in range(width): + for y in range(height): + red, green, blue = img.getpixel((x, y)) + new_val = 0.3 * red + 0.59 * green + 0.11 * blue + new_red = int(new_val * 2) + if new_red > 255: + new_red = 255 + new_green = int(new_val * 1.5) + if new_green > 255: + new_green = 255 + new_blue = int(new_val) + if new_blue > 255: + new_blue = 255 + + new_img.putpixel((x, y), (new_red, new_green, new_blue)) + + return new_img + + +async def sepia_mode(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "sepia.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + image = Image.open(a) + new_img = sepia(image) + new_img.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("sepia_mode-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +def dodgeV2(x, y): + return cv2.divide(x, 255 - y, scale=256) + + +async def pencil(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "pencil.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + img = cv2.imread(a) + img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + img_invert = cv2.bitwise_not(img_gray) + img_smoothing = cv2.GaussianBlur(img_invert, (21, 21), sigmaX=0, sigmaY=0) + final_img = dodgeV2(img_gray, img_smoothing) + cv2.imwrite(edit_img_loc, final_img) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("pencil-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +def color_quantization(img, k): + data = np.float32(img).reshape((-1, 3)) + criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 1.0) + _, label, center = cv2.kmeans( + data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS + ) + center = np.uint8(center) + result = center[label.flatten()] + result = result.reshape(img.shape) + return result + + +async def cartoon(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "kang.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + img = cv2.imread(a) + edges = cv2.Canny(img, 100, 200) + gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + edges = cv2.adaptiveThreshold( + gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 5 + ) + color = cv2.bilateralFilter(img, d=9, sigmaColor=200, sigmaSpace=200) + + cv2.bitwise_and(color, color, mask=edges) + img_1 = color_quantization(img, 7) + cv2.imwrite(edit_img_loc, img_1) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("cartoon-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\image\edit_3.py +from pyrogram.enums import ChatAction +from PIL import Image, ImageOps +import shutil +import os + + +async def black_border(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "imaged-black-border.png" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + img = Image.open(a) + img_with_border = ImageOps.expand(img, border=100, fill="black") + img_with_border.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("black_border-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def green_border(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "imaged-green-border.png" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + img = Image.open(a) + img_with_border = ImageOps.expand(img, border=100, fill="green") + img_with_border.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("green_border-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def blue_border(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "imaged-blue-border.png" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + img = Image.open(a) + img_with_border = ImageOps.expand(img, border=100, fill="blue") + img_with_border.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("blue_border-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def red_border(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "imaged-red-border.png" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + img = Image.open(a) + img_with_border = ImageOps.expand(img, border=100, fill="red") + img_with_border.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("red_border-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\image\edit_4.py +from PIL import Image, ImageOps, ImageDraw +from pyrogram.enums import ChatAction +import numpy as np +import requests +import shutil +import cv2 +import io +import os +from info import RemoveBG_API + + +async def rotate_90(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "rotate_90.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + src = cv2.imread(a) + image = cv2.rotate(src, cv2.cv2.ROTATE_90_CLOCKWISE) + cv2.imwrite(edit_img_loc, image) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("rotate_90-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def rotate_180(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "rotate_180.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + src = cv2.imread(a) + image = cv2.rotate(src, cv2.ROTATE_180) + cv2.imwrite(edit_img_loc, image) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("rotate_180-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def rotate_270(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "rotate_270.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + src = cv2.imread(a) + image = cv2.rotate(src, cv2.ROTATE_90_COUNTERCLOCKWISE) + cv2.imwrite(edit_img_loc, image) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("rotate_270-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +def resize_photo(photo: str, userid: str) -> io.BytesIO: + image = Image.open(photo) + maxsize = 512 + scale = maxsize / max(image.width, image.height) + new_size = (int(image.width * scale), int(image.height * scale)) + image = image.resize(new_size, Image.LANCZOS) + resized_photo = io.BytesIO() + resized_photo.name = "./DOWNLOADS" + "/" + userid + "resized.png" + image.save(resized_photo, "PNG") + return resized_photo + + +async def round_sticker(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "rounded.webp" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + resized = resize_photo(a, userid) + img = Image.open(resized).convert("RGB") + npImage = np.array(img) + h, w = img.size + alpha = Image.new("L", img.size, 0) + draw = ImageDraw.Draw(alpha) + draw.pieslice([0, 0, h, w], 0, 360, fill=255) + npAlpha = np.array(alpha) + npImage = np.dstack((npImage, npAlpha)) + Image.fromarray(npImage).save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_sticker(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("round_sticker-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def inverted(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "inverted.png" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + a = await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + image = Image.open(a) + inverted_image = ImageOps.invert(image) + inverted_image.save(edit_img_loc) + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("inverted-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def removebg_plain(client, message): + try: + if not (RemoveBG_API == ""): + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "nobgplain.png" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + + response = requests.post( + "https://api.remove.bg/v1.0/removebg", + files={"image_file": open(download_location, "rb")}, + data={"size": "auto"}, + headers={"X-Api-Key": RemoveBG_API}, + ) + if response.status_code == 200: + with open(f"{edit_img_loc}", "wb") as out: + out.write(response.content) + else: + await message.reply_to_message.reply_text( + "Check if your api is correct", quote=True + ) + return + + await message.reply_chat_action(ChatAction.UPLOAD_DOCUMENT) + await message.reply_to_message.reply_document(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + else: + await message.reply_to_message.reply_text( + "Get the api from https://www.remove.bg/b/background-removal-api and add in Config Var", + quote=True, + disable_web_page_preview=True, + ) + except Exception as e: + print("removebg_plain-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def removebg_white(client, message): + try: + if not (RemoveBG_API == ""): + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "nobgwhite.png" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + + response = requests.post( + "https://api.remove.bg/v1.0/removebg", + files={"image_file": open(download_location, "rb")}, + data={"size": "auto"}, + headers={"X-Api-Key": RemoveBG_API}, + ) + if response.status_code == 200: + with open(f"{edit_img_loc}", "wb") as out: + out.write(response.content) + else: + await message.reply_to_message.reply_text( + "Check if your api is correct", quote=True + ) + return + + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + else: + await message.reply_to_message.reply_text( + "Get the api from https://www.remove.bg/b/background-removal-api and add in Config Var", + quote=True, + disable_web_page_preview=True, + ) + except Exception as e: + print("removebg_white-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def removebg_sticker(client, message): + try: + if not (RemoveBG_API == ""): + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "nobgsticker.webp" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + + response = requests.post( + "https://api.remove.bg/v1.0/removebg", + files={"image_file": open(download_location, "rb")}, + data={"size": "auto"}, + headers={"X-Api-Key": RemoveBG_API}, + ) + if response.status_code == 200: + with open(f"{edit_img_loc}", "wb") as out: + out.write(response.content) + else: + await message.reply_to_message.reply_text( + "Check if your api is correct", quote=True + ) + return + + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_sticker(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + else: + await message.reply_to_message.reply_text( + "Get the api from https://www.remove.bg/b/background-removal-api and add in Config Var", + quote=True, + disable_web_page_preview=True, + ) + except Exception as e: + print("removebg_sticker-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\image\edit_5.py +from pyrogram.enums import ChatAction +import asyncio +import shutil +import os + + +async def normalglitch_1(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "normalglitch_1.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-o", edit_img_loc, download_location, "1"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("normalglitch_1-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def normalglitch_2(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "normalglitch_2.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-o", edit_img_loc, download_location, "2"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("normalglitch_2-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def normalglitch_3(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "normalglitch_3.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-o", edit_img_loc, download_location, "3"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("normalglitch_3-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def normalglitch_4(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "normalglitch_4.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-o", edit_img_loc, download_location, "4"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("normalglitch_4-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def normalglitch_5(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "normalglitch_5.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-o", edit_img_loc, download_location, "5"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("normalglitch_5-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def scanlineglitch_1(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "scanlineglitch_1.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-s", "-o", edit_img_loc, download_location, "1"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("scanlineglitch_1-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def scanlineglitch_2(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "scanlineglitch_2.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-s", "-o", edit_img_loc, download_location, "2"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("scanlineglitch_2-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def scanlineglitch_3(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "scanlineglitch_3.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-s", "-o", edit_img_loc, download_location, "3"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("scanlineglitch_3-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def scanlineglitch_4(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "scanlineglitch_4.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-s", "-o", edit_img_loc, download_location, "4"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("scanlineglitch_4-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + + +async def scanlineglitch_5(client, message): + try: + userid = str(message.chat.id) + if not os.path.isdir(f"./DOWNLOADS/{userid}"): + os.makedirs(f"./DOWNLOADS/{userid}") + download_location = "./DOWNLOADS" + "/" + userid + "/" + userid + ".jpg" + edit_img_loc = "./DOWNLOADS" + "/" + userid + "/" + "scanlineglitch_5.jpg" + if not message.reply_to_message.empty: + msg = await message.reply_to_message.reply_text( + "𝙳𝙾𝚆𝙽𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....", quote=True + ) + await client.download_media( + message=message.reply_to_message, file_name=download_location + ) + await msg.edit("𝚄𝙿𝙻𝙾𝙰𝙳𝙸𝙽𝙶 𝙸𝙼𝙰𝙶𝙴....") + cd = ["glitch_this", "-c", "-s", "-o", edit_img_loc, download_location, "5"] + process = await asyncio.create_subprocess_exec( + *cd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + await process.communicate() + await message.reply_chat_action(ChatAction.UPLOAD_PHOTO) + await message.reply_to_message.reply_photo(edit_img_loc, quote=True) + await msg.delete() + else: + await message.reply_text("Why did you delete that??") + try: + shutil.rmtree(f"./DOWNLOADS/{userid}") + except Exception: + pass + except Exception as e: + print("scanlineglitch_5-error - " + str(e)) + if "USER_IS_BLOCKED" in str(e): + return + else: + try: + await message.reply_to_message.reply_text( + "Something went wrong!", quote=True + ) + except Exception: + return + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\image\font_string.py + + + +class Fonts: + def typewriter(text): + style = { + 'a': '𝚊', + 'b': '𝚋', + 'c': '𝚌', + 'd': '𝚍', + 'e': '𝚎', + 'f': '𝚏', + 'g': '𝚐', + 'h': '𝚑', + 'i': '𝚒', + 'j': '𝚓', + 'k': '𝚔', + 'l': '𝚕', + 'm': '𝚖', + 'n': '𝚗', + 'o': '𝚘', + 'p': '𝚙', + 'q': '𝚚', + 'r': '𝚛', + 's': '𝚜', + 't': '𝚝', + 'u': '𝚞', + 'v': '𝚟', + 'w': '𝚠', + 'x': '𝚡', + 'y': '𝚢', + 'z': '𝚣', + 'A': '𝙰', + 'B': '𝙱', + 'C': '𝙲', + 'D': '𝙳', + 'E': '𝙴', + 'F': '𝙵', + 'G': '𝙶', + 'H': '𝙷', + 'I': '𝙸', + 'J': '𝙹', + 'K': '𝙺', + 'L': '𝙻', + 'M': '𝙼', + 'N': '𝙽', + 'O': '𝙾', + 'P': '𝙿', + 'Q': '𝚀', + 'R': '𝚁', + 'S': '𝚂', + 'T': '𝚃', + 'U': '𝚄', + 'V': '𝚅', + 'W': '𝚆', + 'X': '𝚇', + 'Y': '𝚈', + 'Z': '𝚉' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def outline(text): + style = { + 'a': '𝕒', + 'b': '𝕓', + 'c': '𝕔', + 'd': '𝕕', + 'e': '𝕖', + 'f': '𝕗', + 'g': '𝕘', + 'h': '𝕙', + 'i': '𝕚', + 'j': '𝕛', + 'k': '𝕜', + 'l': '𝕝', + 'm': '𝕞', + 'n': '𝕟', + 'o': '𝕠', + 'p': '𝕡', + 'q': '𝕢', + 'r': '𝕣', + 's': '𝕤', + 't': '𝕥', + 'u': '𝕦', + 'v': '𝕧', + 'w': '𝕨', + 'x': '𝕩', + 'y': '𝕪', + 'z': '𝕫', + 'A': '𝔸', + 'B': '𝔹', + 'C': 'ℂ', + 'D': '𝔻', + 'E': '𝔼', + 'F': '𝔽', + 'G': '𝔾', + 'H': 'ℍ', + 'I': '𝕀', + 'J': '𝕁', + 'K': '𝕂', + 'L': '𝕃', + 'M': '𝕄', + 'N': 'ℕ', + 'O': '𝕆', + 'P': 'ℙ', + 'Q': 'ℚ', + 'R': 'ℝ', + 'S': '𝕊', + 'T': '𝕋', + 'U': '𝕌', + 'V': '𝕍', + 'W': '𝕎', + 'X': '𝕏', + 'Y': '𝕐', + 'Z': 'ℤ', + '0': '𝟘', + '1': '𝟙', + '2': '𝟚', + '3': '𝟛', + '4': '𝟜', + '5': '𝟝', + '6': '𝟞', + '7': '𝟟', + '8': '𝟠', + '9': '𝟡' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def serief(text): + style = { + 'a': '𝐚', + 'b': '𝐛', + 'c': '𝐜', + 'd': '𝐝', + 'e': '𝐞', + 'f': '𝐟', + 'g': '𝐠', + 'h': '𝐡', + 'i': '𝐢', + 'j': '𝐣', + 'k': '𝐤', + 'l': '𝐥', + 'm': '𝐦', + 'n': '𝐧', + 'o': '𝐨', + 'p': '𝐩', + 'q': '𝐪', + 'r': '𝐫', + 's': '𝐬', + 't': '𝐭', + 'u': '𝐮', + 'v': '𝐯', + 'w': '𝐰', + 'x': '𝐱', + 'y': '𝐲', + 'z': '𝐳', + 'A': '𝐀', + 'B': '𝐁', + 'C': '𝐂', + 'D': '𝐃', + 'E': '𝐄', + 'F': '𝐅', + 'G': '𝐆', + 'H': '𝐇', + 'I': '𝐈', + 'J': '𝐉', + 'K': '𝐊', + 'L': '𝐋', + 'M': '𝐌', + 'N': '𝐍', + 'O': '𝐎', + 'P': '𝐏', + 'Q': '𝐐', + 'R': '𝐑', + 'S': '𝐒', + 'T': '𝐓', + 'U': '𝐔', + 'V': '𝐕', + 'W': '𝐖', + 'X': '𝐗', + 'Y': '𝐘', + 'Z': '𝐙', + '0': '𝟎', + '1': '𝟏', + '2': '𝟐', + '3': '𝟑', + '4': '𝟒', + '5': '𝟓', + '6': '𝟔', + '7': '𝟕', + '8': '𝟖', + '9': '𝟗' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def bold_cool(text): + style = { + 'a': '𝒂', + 'b': '𝒃', + 'c': '𝒄', + 'd': '𝒅', + 'e': '𝒆', + 'f': '𝒇', + 'g': '𝒈', + 'h': '𝒉', + 'i': '𝒊', + 'j': '𝒋', + 'k': '𝒌', + 'l': '𝒍', + 'm': '𝒎', + 'n': '𝒏', + 'o': '𝒐', + 'p': '𝒑', + 'q': '𝒒', + 'r': '𝒓', + 's': '𝒔', + 't': '𝒕', + 'u': '𝒖', + 'v': '𝒗', + 'w': '𝒘', + 'x': '𝒙', + 'y': '𝒚', + 'z': '𝒛', + 'A': '𝑨', + 'B': '𝑩', + 'C': '𝑪', + 'D': '𝑫', + 'E': '𝑬', + 'F': '𝑭', + 'G': '𝑮', + 'H': '𝑯', + 'I': '𝑰', + 'J': '𝑱', + 'K': '𝑲', + 'L': '𝑳', + 'M': '𝑴', + 'N': '𝑵', + 'O': '𝑶', + 'P': '𝑷', + 'Q': '𝑸', + 'R': '𝑹', + 'S': '𝑺', + 'T': '𝑻', + 'U': '𝑼', + 'V': '𝑽', + 'W': '𝑾', + 'X': '𝑿', + 'Y': '𝒀', + 'Z': '𝒁' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def cool(text): + style = { + 'a': '𝑎', + 'b': '𝑏', + 'c': '𝑐', + 'd': '𝑑', + 'e': '𝑒', + 'f': '𝑓', + 'g': '𝑔', + 'h': 'ℎ', + 'i': '𝑖', + 'j': '𝑗', + 'k': '𝑘', + 'l': '𝑙', + 'm': '𝑚', + 'n': '𝑛', + 'o': '𝑜', + 'p': '𝑝', + 'q': '𝑞', + 'r': '𝑟', + 's': '𝑠', + 't': '𝑡', + 'u': '𝑢', + 'v': '𝑣', + 'w': '𝑤', + 'x': '𝑥', + 'y': '𝑦', + 'z': '𝑧', + 'A': '𝐴', + 'B': '𝐵', + 'C': '𝐶', + 'D': '𝐷', + 'E': '𝐸', + 'F': '𝐹', + 'G': '𝐺', + 'H': '𝐻', + 'I': '𝐼', + 'J': '𝐽', + 'K': '𝐾', + 'L': '𝐿', + 'M': '𝑀', + 'N': '𝑁', + 'O': '𝑂', + 'P': '𝑃', + 'Q': '𝑄', + 'R': '𝑅', + 'S': '𝑆', + 'T': '𝑇', + 'U': '𝑈', + 'V': '𝑉', + 'W': '𝑊', + 'X': '𝑋', + 'Y': '𝑌', + 'Z': '𝑍' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def smallcap(text): + style = { + 'a': 'ᴀ', + 'b': 'ʙ', + 'c': 'ᴄ', + 'd': 'ᴅ', + 'e': 'ᴇ', + 'f': 'ғ', + 'g': 'ɢ', + 'h': 'ʜ', + 'i': 'ɪ', + 'j': 'ɪ', + 'k': 'ᴋ', + 'l': 'ʟ', + 'm': 'ᴍ', + 'n': 'ɴ', + 'o': 'ᴏ', + 'p': 'ᴘ', + 'q': 'ǫ', + 'r': 'ʀ', + 's': 's', + 't': 'ᴛ', + 'u': 'ᴜ', + 'v': 'ᴠ', + 'w': 'ᴡ', + 'x': 'x', + 'y': 'ʏ', + 'z': 'ᴢ', + 'A': 'A', + 'B': 'B', + 'C': 'C', + 'D': 'D', + 'E': 'E', + 'F': 'F', + 'G': 'G', + 'H': 'H', + 'I': 'I', + 'J': 'J', + 'K': 'K', + 'L': 'L', + 'M': 'M', + 'N': 'N', + 'O': 'O', + 'P': 'P', + 'Q': 'Q', + 'R': 'R', + 'S': 'S', + 'T': 'T', + 'U': 'U', + 'V': 'V', + 'W': 'W', + 'X': 'X', + 'Y': 'Y', + 'Z': 'Z', + '0': '𝟶', + '1': '𝟷', + '2': '𝟸', + '3': '𝟹', + '4': '𝟺', + '5': '𝟻', + '6': '𝟼', + '7': '𝟽', + '8': '𝟾', + '9': '𝟿' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def script(text): + style = { + 'a': '𝒶', + 'b': '𝒷', + 'c': '𝒸', + 'd': '𝒹', + 'e': 'ℯ', + 'f': '𝒻', + 'g': 'ℊ', + 'h': '𝒽', + 'i': '𝒾', + 'j': '𝒿', + 'k': '𝓀', + 'l': '𝓁', + 'm': '𝓂', + 'n': '𝓃', + 'o': 'ℴ', + 'p': '𝓅', + 'q': '𝓆', + 'r': '𝓇', + 's': '𝓈', + 't': '𝓉', + 'u': '𝓊', + 'v': '𝓋', + 'w': '𝓌', + 'x': '𝓍', + 'y': '𝓎', + 'z': '𝓏', + 'A': '𝒜', + 'B': 'ℬ', + 'C': '𝒞', + 'D': '𝒟', + 'E': 'ℰ', + 'F': 'ℱ', + 'G': '𝒢', + 'H': 'ℋ', + 'I': 'ℐ', + 'J': '𝒥', + 'K': '𝒦', + 'L': 'ℒ', + 'M': 'ℳ', + 'N': '𝒩', + 'O': '𝒪', + 'P': '𝒫', + 'Q': '𝒬', + 'R': 'ℛ', + 'S': '𝒮', + 'T': '𝒯', + 'U': '𝒰', + 'V': '𝒱', + 'W': '𝒲', + 'X': '𝒳', + 'Y': '𝒴', + 'Z': '𝒵' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def bold_script(text): + style = { + 'a': '𝓪', + 'b': '𝓫', + 'c': '𝓬', + 'd': '𝓭', + 'e': '𝓮', + 'f': '𝓯', + 'g': '𝓰', + 'h': '𝓱', + 'i': '𝓲', + 'j': '𝓳', + 'k': '𝓴', + 'l': '𝓵', + 'm': '𝓶', + 'n': '𝓷', + 'o': '𝓸', + 'p': '𝓹', + 'q': '𝓺', + 'r': '𝓻', + 's': '𝓼', + 't': '𝓽', + 'u': '𝓾', + 'v': '𝓿', + 'w': '𝔀', + 'x': '𝔁', + 'y': '𝔂', + 'z': '𝔃', + 'A': '𝓐', + 'B': '𝓑', + 'C': '𝓒', + 'D': '𝓓', + 'E': '𝓔', + 'F': '𝓕', + 'G': '𝓖', + 'H': '𝓗', + 'I': '𝓘', + 'J': '𝓙', + 'K': '𝓚', + 'L': '𝓛', + 'M': '𝓜', + 'N': '𝓝', + 'O': '𝓞', + 'P': '𝓟', + 'Q': '𝓠', + 'R': '𝓡', + 'S': '𝓢', + 'T': '𝓣', + 'U': '𝓤', + 'V': '𝓥', + 'W': '𝓦', + 'X': '𝓧', + 'Y': '𝓨', + 'Z': '𝓩' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def tiny(text): + style = { + 'a': 'ᵃ', + 'b': 'ᵇ', + 'c': 'ᶜ', + 'd': 'ᵈ', + 'e': 'ᵉ', + 'f': 'ᶠ', + 'g': 'ᵍ', + 'h': 'ʰ', + 'i': 'ⁱ', + 'j': 'ʲ', + 'k': 'ᵏ', + 'l': 'ˡ', + 'm': 'ᵐ', + 'n': 'ⁿ', + 'o': 'ᵒ', + 'p': 'ᵖ', + 'q': 'ᵠ', + 'r': 'ʳ', + 's': 'ˢ', + 't': 'ᵗ', + 'u': 'ᵘ', + 'v': 'ᵛ', + 'w': 'ʷ', + 'x': 'ˣ', + 'y': 'ʸ', + 'z': 'ᶻ', + 'A': 'ᵃ', + 'B': 'ᵇ', + 'C': 'ᶜ', + 'D': 'ᵈ', + 'E': 'ᵉ', + 'F': 'ᶠ', + 'G': 'ᵍ', + 'H': 'ʰ', + 'I': 'ⁱ', + 'J': 'ʲ', + 'K': 'ᵏ', + 'L': 'ˡ', + 'M': 'ᵐ', + 'N': 'ⁿ', + 'O': 'ᵒ', + 'P': 'ᵖ', + 'Q': 'ᵠ', + 'R': 'ʳ', + 'S': 'ˢ', + 'T': 'ᵗ', + 'U': 'ᵘ', + 'V': 'ᵛ', + 'W': 'ʷ', + 'X': 'ˣ', + 'Y': 'ʸ', + 'Z': 'ᶻ' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def comic(text): + style = { + 'a': 'ᗩ', + 'b': 'ᗷ', + 'c': 'ᑕ', + 'd': 'ᗪ', + 'e': 'ᗴ', + 'f': 'ᖴ', + 'g': 'ᘜ', + 'h': 'ᕼ', + 'i': 'I', + 'j': 'ᒍ', + 'k': 'K', + 'l': 'ᒪ', + 'm': 'ᗰ', + 'n': 'ᑎ', + 'o': 'O', + 'p': 'ᑭ', + 'q': 'ᑫ', + 'r': 'ᖇ', + 's': 'Տ', + 't': 'T', + 'u': 'ᑌ', + 'v': 'ᐯ', + 'w': 'ᗯ', + 'x': '᙭', + 'y': 'Y', + 'z': 'ᘔ', + 'A': 'ᗩ', + 'B': 'ᗷ', + 'C': 'ᑕ', + 'D': 'ᗪ', + 'E': 'ᗴ', + 'F': 'ᖴ', + 'G': 'ᘜ', + 'H': 'ᕼ', + 'I': 'I', + 'J': 'ᒍ', + 'K': 'K', + 'L': 'ᒪ', + 'M': 'ᗰ', + 'N': 'ᑎ', + 'O': 'O', + 'P': 'ᑭ', + 'Q': 'ᑫ', + 'R': 'ᖇ', + 'S': 'Տ', + 'T': 'T', + 'U': 'ᑌ', + 'V': 'ᐯ', + 'W': 'ᗯ', + 'X': '᙭', + 'Y': 'Y', + 'Z': 'ᘔ' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def san(text): + style = { + 'a': '𝗮', + 'b': '𝗯', + 'c': '𝗰', + 'd': '𝗱', + 'e': '𝗲', + 'f': '𝗳', + 'g': '𝗴', + 'h': '𝗵', + 'i': '𝗶', + 'j': '𝗷', + 'k': '𝗸', + 'l': '𝗹', + 'm': '𝗺', + 'n': '𝗻', + 'o': '𝗼', + 'p': '𝗽', + 'q': '𝗾', + 'r': '𝗿', + 's': '𝘀', + 't': '𝘁', + 'u': '𝘂', + 'v': '𝘃', + 'w': '𝘄', + 'x': '𝘅', + 'y': '𝘆', + 'z': '𝘇', + 'A': '𝗔', + 'B': '𝗕', + 'C': '𝗖', + 'D': '𝗗', + 'E': '𝗘', + 'F': '𝗙', + 'G': '𝗚', + 'H': '𝗛', + 'I': '𝗜', + 'J': '𝗝', + 'K': '𝗞', + 'L': '𝗟', + 'M': '𝗠', + 'N': '𝗡', + 'O': '𝗢', + 'P': '𝗣', + 'Q': '𝗤', + 'R': '𝗥', + 'S': '𝗦', + 'T': '𝗧', + 'U': '𝗨', + 'V': '𝗩', + 'W': '𝗪', + 'X': '𝗫', + 'Y': '𝗬', + 'Z': '𝗭', + '0': '𝟬', + '1': '𝟭', + '2': '𝟮', + '3': '𝟯', + '4': '𝟰', + '5': '𝟱', + '6': '𝟲', + '7': '𝟳', + '8': '𝟴', + '9': '𝟵' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def slant_san(text): + style = { + 'a': '𝙖', + 'b': '𝙗', + 'c': '𝙘', + 'd': '𝙙', + 'e': '𝙚', + 'f': '𝙛', + 'g': '𝙜', + 'h': '𝙝', + 'i': '𝙞', + 'j': '𝙟', + 'k': '𝙠', + 'l': '𝙡', + 'm': '𝙢', + 'n': '𝙣', + 'o': '𝙤', + 'p': '𝙥', + 'q': '𝙦', + 'r': '𝙧', + 's': '𝙨', + 't': '𝙩', + 'u': '𝙪', + 'v': '𝙫', + 'w': '𝙬', + 'x': '𝙭', + 'y': '𝙮', + 'z': '𝙯', + 'A': '𝘼', + 'B': '𝘽', + 'C': '𝘾', + 'D': '𝘿', + 'E': '𝙀', + 'F': '𝙁', + 'G': '𝙂', + 'H': '𝙃', + 'I': '𝙄', + 'J': '𝙅', + 'K': '𝙆', + 'L': '𝙇', + 'M': '𝙈', + 'N': '𝙉', + 'O': '𝙊', + 'P': '𝙋', + 'Q': '𝙌', + 'R': '𝙍', + 'S': '𝙎', + 'T': '𝙏', + 'U': '𝙐', + 'V': '𝙑', + 'W': '𝙒', + 'X': '𝙓', + 'Y': '𝙔', + 'Z': '𝙕' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def slant(text): + style = { + 'a': '𝘢', + 'b': '𝘣', + 'c': '𝘤', + 'd': '𝘥', + 'e': '𝘦', + 'f': '𝘧', + 'g': '𝘨', + 'h': '𝘩', + 'i': '𝘪', + 'j': '𝘫', + 'k': '𝘬', + 'l': '𝘭', + 'm': '𝘮', + 'n': '𝘯', + 'o': '𝘰', + 'p': '𝘱', + 'q': '𝘲', + 'r': '𝘳', + 's': '𝘴', + 't': '𝘵', + 'u': '𝘶', + 'v': '𝘷', + 'w': '𝘸', + 'x': '𝘹', + 'y': '𝘺', + 'z': '𝘻', + 'A': '𝘈', + 'B': '𝘉', + 'C': '𝘊', + 'D': '𝘋', + 'E': '𝘌', + 'F': '𝘍', + 'G': '𝘎', + 'H': '𝘏', + 'I': '𝘐', + 'J': '𝘑', + 'K': '𝘒', + 'L': '𝘓', + 'M': '𝘔', + 'N': '𝘕', + 'O': '𝘖', + 'P': '𝘗', + 'Q': '𝘘', + 'R': '𝘙', + 'S': '𝘚', + 'T': '𝘛', + 'U': '𝘜', + 'V': '𝘝', + 'W': '𝘞', + 'X': '𝘟', + 'Y': '𝘠', + 'Z': '𝘡' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def sim(text): + style = { + 'a': '𝖺', + 'b': '𝖻', + 'c': '𝖼', + 'd': '𝖽', + 'e': '𝖾', + 'f': '𝖿', + 'g': '𝗀', + 'h': '𝗁', + 'i': '𝗂', + 'j': '𝗃', + 'k': '𝗄', + 'l': '𝗅', + 'm': '𝗆', + 'n': '𝗇', + 'o': '𝗈', + 'p': '𝗉', + 'q': '𝗊', + 'r': '𝗋', + 's': '𝗌', + 't': '𝗍', + 'u': '𝗎', + 'v': '𝗏', + 'w': '𝗐', + 'x': '𝗑', + 'y': '𝗒', + 'z': '𝗓', + 'A': '𝖠', + 'B': '𝖡', + 'C': '𝖢', + 'D': '𝖣', + 'E': '𝖤', + 'F': '𝖥', + 'G': '𝖦', + 'H': '𝖧', + 'I': '𝖨', + 'J': '𝖩', + 'K': '𝖪', + 'L': '𝖫', + 'M': '𝖬', + 'N': '𝖭', + 'O': '𝖮', + 'P': '𝖯', + 'Q': '𝖰', + 'R': '𝖱', + 'S': '𝖲', + 'T': '𝖳', + 'U': '𝖴', + 'V': '𝖵', + 'W': '𝖶', + 'X': '𝖷', + 'Y': '𝖸', + 'Z': '𝖹' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def circles(text): + style = { + 'a': 'Ⓐ︎', + 'b': 'Ⓑ︎', + 'c': 'Ⓒ︎', + 'd': 'Ⓓ︎', + 'e': 'Ⓔ︎', + 'f': 'Ⓕ︎', + 'g': 'Ⓖ︎', + 'h': 'Ⓗ︎', + 'i': 'Ⓘ︎', + 'j': 'Ⓙ︎', + 'k': 'Ⓚ︎', + 'l': 'Ⓛ︎', + 'm': 'Ⓜ︎', + 'n': 'Ⓝ︎', + 'o': 'Ⓞ︎', + 'p': 'Ⓟ︎', + 'q': 'Ⓠ︎', + 'r': 'Ⓡ︎', + 's': 'Ⓢ︎', + 't': 'Ⓣ︎', + 'u': 'Ⓤ︎', + 'v': 'Ⓥ︎', + 'w': 'Ⓦ︎', + 'x': 'Ⓧ︎', + 'y': 'Ⓨ︎', + 'z': 'Ⓩ︎', + 'A': 'Ⓐ︎', + 'B': 'Ⓑ︎', + 'C': 'Ⓒ︎', + 'D': 'Ⓓ︎', + 'E': 'Ⓔ︎', + 'F': 'Ⓕ︎', + 'G': 'Ⓖ︎', + 'H': 'Ⓗ︎', + 'I': 'Ⓘ︎', + 'J': 'Ⓙ︎', + 'K': 'Ⓚ︎', + 'L': 'Ⓛ︎', + 'M': 'Ⓜ︎', + 'N': 'Ⓝ︎', + 'O': 'Ⓞ︎', + 'P': 'Ⓟ︎', + 'Q': 'Ⓠ︎', + 'R': 'Ⓡ︎', + 'S': 'Ⓢ︎', + 'T': 'Ⓣ︎', + 'U': 'Ⓤ︎', + 'V': 'Ⓥ︎', + 'W': 'Ⓦ︎', + 'X': 'Ⓧ︎', + 'Y': 'Ⓨ︎', + 'Z': 'Ⓩ︎', + '0': '⓪', + '1': '①', + '2': '②', + '3': '③', + '4': '④', + '5': '⑤', + '6': '⑥', + '7': '⑦', + '8': '⑧', + '9': '⑨' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def dark_circle(text): + style = { + 'a': '🅐︎', + 'b': '🅑︎', + 'c': '🅒︎', + 'd': '🅓︎', + 'e': '🅔︎', + 'f': '🅕︎', + 'g': '🅖︎', + 'h': '🅗︎', + 'i': '🅘︎', + 'j': '🅙︎', + 'k': '🅚︎', + 'l': '🅛︎', + 'm': '🅜︎', + 'n': '🅝︎', + 'o': '🅞︎', + 'p': '🅟︎', + 'q': '🅠︎', + 'r': '🅡︎', + 's': '🅢︎', + 't': '🅣︎', + 'u': '🅤︎', + 'v': '🅥︎', + 'w': '🅦︎', + 'x': '🅧︎', + 'y': '🅨︎', + 'z': '🅩︎', + 'A': '🅐︎', + 'B': '🅑︎', + 'C': '🅒︎', + 'D': '🅓︎', + 'E': '🅔︎', + 'F': '🅕︎', + 'G': '🅖︎', + 'H': '🅗︎', + 'I': '🅘︎', + 'J': '🅙︎', + 'K': '🅚︎', + 'L': '🅛︎', + 'M': '🅜︎', + 'N': '����︎', + 'O': '🅞︎', + 'P': '🅟︎', + 'Q': '🅠︎', + 'R': '🅡︎', + 'S': '🅢︎', + 'T': '🅣︎', + 'U': '🅤︎', + 'V': '🅥︎', + 'W': '🅦︎', + 'X': '🅧︎', + 'Y': '🅨︎', + 'Z': '🅩', + '0': '⓿', + '1': '➊', + '2': '➋', + '3': '➌', + '4': '➍', + '5': '➎', + '6': '➏', + '7': '➐', + '8': '➑', + '9': '➒' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def gothic(text): + style = { + 'a': '𝔞', + 'b': '𝔟', + 'c': '𝔠', + 'd': '𝔡', + 'e': '𝔢', + 'f': '𝔣', + 'g': '𝔤', + 'h': '𝔥', + 'i': '𝔦', + 'j': '𝔧', + 'k': '𝔨', + 'l': '𝔩', + 'm': '𝔪', + 'n': '𝔫', + 'o': '𝔬', + 'p': '𝔭', + 'q': '𝔮', + 'r': '𝔯', + 's': '𝔰', + 't': '𝔱', + 'u': '𝔲', + 'v': '𝔳', + 'w': '𝔴', + 'x': '𝔵', + 'y': '𝔶', + 'z': '𝔷', + 'A': '𝔄', + 'B': '𝔅', + 'C': 'ℭ', + 'D': '𝔇', + 'E': '𝔈', + 'F': '𝔉', + 'G': '𝔊', + 'H': 'ℌ', + 'I': 'ℑ', + 'J': '𝔍', + 'K': '𝔎', + 'L': '𝔏', + 'M': '𝔐', + 'N': '𝔑', + 'O': '𝔒', + 'P': '𝔓', + 'Q': '𝔔', + 'R': 'ℜ', + 'S': '𝔖', + 'T': '𝔗', + 'U': '𝔘', + 'V': '𝔙', + 'W': '𝔚', + 'X': '𝔛', + 'Y': '𝔜', + 'Z': 'ℨ' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + + def bold_gothic(text): + style = { + 'a': '𝖆', + 'b': '𝖇', + 'c': '𝖈', + 'd': '𝖉', + 'e': '𝖊', + 'f': '𝖋', + 'g': '𝖌', + 'h': '𝖍', + 'i': '𝖎', + 'j': '𝖏', + 'k': '𝖐', + 'l': '𝖑', + 'm': '𝖒', + 'n': '𝖓', + 'o': '𝖔', + 'p': '𝖕', + 'q': '𝖖', + 'r': '𝖗', + 's': '𝖘', + 't': '𝖙', + 'u': '𝖚', + 'v': '𝖛', + 'w': '𝖜', + 'x': '𝖝', + 'y': '𝖞', + 'z': '𝖟', + 'A': '𝕬', + 'B': '𝕭', + 'C': '𝕮', + 'D': '𝕺', + 'E': '𝕰', + 'F': '𝕱', + 'G': '𝕲', + 'H': '𝕳', + 'I': '𝕴', + 'J': '𝕵', + 'K': '𝕶', + 'L': '𝕷', + 'M': '𝕸', + 'N': '𝕹', + 'O': '𝕺', + 'P': '𝕻', + 'Q': '𝕼', + 'R': '𝕽', + 'S': '𝕾', + 'T': '𝕿', + 'U': '𝖀', + 'V': '𝖁', + 'W': '𝖂', + 'X': '𝖃', + 'Y': '𝖄', + 'Z': '𝖅' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def cloud(text): + style = { + 'a': 'a͜͡', + 'b': 'b͜͡', + 'c': 'c͜͡', + 'd': 'd͜͡', + 'e': 'e͜͡', + 'f': 'f͜͡', + 'g': 'g͜͡', + 'h': 'h͜͡', + 'i': 'i͜͡', + 'j': 'j͜͡', + 'k': 'k͜͡', + 'l': 'l͜͡', + 'm': 'm͜͡', + 'n': 'n͜͡', + 'o': 'o͜͡', + 'p': 'p͜͡', + 'q': 'q͜͡', + 'r': 'r͜͡', + 's': 's͜͡', + 't': 't͜͡', + 'u': 'u͜͡', + 'v': 'v͜͡', + 'w': 'w͜͡', + 'x': 'x͜͡', + 'y': 'y͜͡', + 'z': 'z͜͡', + 'A': 'A͜͡', + 'B': 'B͜͡', + 'C': 'C͜͡', + 'D': 'D͜͡', + 'E': 'E͜͡', + 'F': 'F͜͡', + 'G': 'G͜͡', + 'H': 'H͜͡', + 'I': 'I͜͡', + 'J': 'J͜͡', + 'K': 'K͜͡', + 'L': 'L͜͡', + 'M': 'M͜͡', + 'N': 'N͜͡', + 'O': 'O͜͡', + 'P': 'P͜͡', + 'Q': 'Q͜͡', + 'R': 'R͜͡', + 'S': 'S͜͡', + 'T': 'T͜͡', + 'U': 'U͜͡', + 'V': 'V͜͡', + 'W': 'W͜͡', + 'X': 'X͜͡', + 'Y': 'Y͜͡', + 'Z': 'Z͜͡' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def happy(text): + style = { + 'a': 'ă̈', + 'b': 'b̆̈', + 'c': 'c̆̈', + 'd': 'd̆̈', + 'e': 'ĕ̈', + 'f': 'f̆̈', + 'g': 'ğ̈', + 'h': 'h̆̈', + 'i': 'ĭ̈', + 'j': 'j̆̈', + 'k': 'k̆̈', + 'l': 'l̆̈', + 'm': 'm̆̈', + 'n': 'n̆̈', + 'o': 'ŏ̈', + 'p': 'p̆̈', + 'q': 'q̆̈', + 'r': 'r̆̈', + 's': 's̆̈', + 't': 't̆̈', + 'u': 'ŭ̈', + 'v': 'v̆̈', + 'w': 'w̆̈', + 'x': 'x̆̈', + 'y': 'y̆̈', + 'z': 'z̆̈', + 'A': 'Ă̈', + 'B': 'B̆̈', + 'C': 'C̆̈', + 'D': 'D̆̈', + 'E': 'Ĕ̈', + 'F': 'F̆̈', + 'G': 'Ğ̈', + 'H': 'H̆̈', + 'I': 'Ĭ̈', + 'J': 'J̆̈', + 'K': 'K̆̈', + 'L': 'L̆̈', + 'M': 'M̆̈', + 'N': 'N̆̈', + 'O': 'Ŏ̈', + 'P': 'P̆̈', + 'Q': 'Q̆̈', + 'R': 'R̆̈', + 'S': 'S̆̈', + 'T': 'T̆̈', + 'U': 'Ŭ̈', + 'V': 'V̆̈', + 'W': 'W̆̈', + 'X': 'X̆̈', + 'Y': 'Y̆̈', + 'Z': 'Z̆̈' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def sad(text): + style = { + 'a': 'ȃ̈', + 'b': 'b̑̈', + 'c': 'c̑̈', + 'd': 'd̑̈', + 'e': 'ȇ̈', + 'f': 'f̑̈', + 'g': 'g̑̈', + 'h': 'h̑̈', + 'i': 'ȋ̈', + 'j': 'j̑̈', + 'k': 'k̑̈', + 'l': 'l̑̈', + 'm': 'm̑̈', + 'n': 'n̑̈', + 'o': 'ȏ̈', + 'p': 'p̑̈', + 'q': 'q̑̈', + 'r': 'ȓ̈', + 's': 's̑̈', + 't': 't̑̈', + 'u': 'ȗ̈', + 'v': 'v̑̈', + 'w': 'w̑̈', + 'x': 'x̑̈', + 'y': 'y̑̈', + 'z': 'z̑̈', + 'A': 'Ȃ̈', + 'B': 'B̑̈', + 'C': 'C̑̈', + 'D': 'D̑̈', + 'E': 'Ȇ̈', + 'F': 'F̑̈', + 'G': 'G̑̈', + 'H': 'H̑̈', + 'I': 'Ȋ̈', + 'J': 'J̑̈', + 'K': 'K̑̈', + 'L': 'L̑̈', + 'M': 'M̑̈', + 'N': 'N̑̈', + 'O': 'Ȏ̈', + 'P': 'P̑̈', + 'Q': 'Q̑̈', + 'R': 'Ȓ̈', + 'S': 'S̑̈', + 'T': 'T̑̈', + 'U': 'Ȗ̈', + 'V': 'V̑̈', + 'W': 'W̑̈', + 'X': 'X̑̈', + 'Y': 'Y̑̈', + 'Z': 'Z̑̈' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def special(text): + style = { + 'a': '🇦 ', + 'b': '🇧 ', + 'c': '🇨 ', + 'd': '🇩 ', + 'e': '🇪 ', + 'f': '🇫 ', + 'g': '🇬 ', + 'h': '🇭 ', + 'i': '🇮 ', + 'j': '🇯 ', + 'k': '🇰 ', + 'l': '🇱 ', + 'm': '🇲 ', + 'n': '🇳 ', + 'o': '🇴 ', + 'p': '🇵 ', + 'q': '🇶 ', + 'r': '🇷 ', + 's': '🇸 ', + 't': '🇹 ', + 'u': '🇺 ', + 'v': '🇻 ', + 'w': '🇼 ', + 'x': '🇽 ', + 'y': '🇾 ', + 'z': '🇿 ', + 'A': '🇦 ', + 'B': '🇧 ', + 'C': '🇨 ', + 'D': '🇩 ', + 'E': '🇪 ', + 'F': '🇫 ', + 'G': '🇬 ', + 'H': '🇭 ', + 'I': '🇮 ', + 'J': '🇯 ', + 'K': '🇰 ', + 'L': '🇱 ', + 'M': '🇲 ', + 'N': '🇳 ', + 'O': '🇴 ', + 'P': '🇵 ', + 'Q': '🇶 ', + 'R': '🇷 ', + 'S': '🇸 ', + 'T': '🇹 ', + 'U': '🇺 ', + 'V': '🇻 ', + 'W': '🇼 ', + 'X': '🇽 ', + 'Y': '🇾 ', + 'Z': '🇿 ' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def square(text): + style = { + 'a': '🄰', + 'b': '🄱', + 'c': '🄲', + 'd': '🄳', + 'e': '🄴', + 'f': '🄵', + 'g': '🄶', + 'h': '🄷', + 'i': '🄸', + 'j': '🄹', + 'k': '🄺', + 'l': '🄻', + 'm': '🄼', + 'n': '🄽', + 'o': '🄾', + 'p': '🄿', + 'q': '🅀', + 'r': '🅁', + 's': '🅂', + 't': '🅃', + 'u': '🅄', + 'v': '🅅', + 'w': '🅆', + 'x': '🅇', + 'y': '🅈', + 'z': '🅉', + 'A': '🄰', + 'B': '🄱', + 'C': '🄲', + 'D': '🄳', + 'E': '🄴', + 'F': '🄵', + 'G': '🄶', + 'H': '🄷', + 'I': '🄸', + 'J': '🄹', + 'K': '🄺', + 'L': '🄻', + 'M': '🄼', + 'N': '🄽', + 'O': '🄾', + 'P': '🄿', + 'Q': '🅀', + 'R': '🅁', + 'S': '🅂', + 'T': '🅃', + 'U': '🅄', + 'V': '🅅', + 'W': '🅆', + 'X': '🅇', + 'Y': '🅈', + 'Z': '🅉' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def dark_square(text): + style = { + 'a': '🅰︎', + 'b': '🅱︎', + 'c': '🅲︎', + 'd': '🅳︎', + 'e': '🅴︎', + 'f': '🅵︎', + 'g': '🅶︎', + 'h': '🅷︎', + 'i': '🅸︎', + 'j': '🅹︎', + 'k': '🅺︎', + 'l': '🅻︎', + 'm': '🅼︎', + 'n': '🅽︎', + 'o': '🅾︎', + 'p': '🅿︎', + 'q': '🆀︎', + 'r': '🆁︎', + 's': '🆂︎', + 't': '🆃︎', + 'u': '🆄︎', + 'v': '🆅︎', + 'w': '🆆︎', + 'x': '🆇︎', + 'y': '🆈︎', + 'z': '🆉︎', + 'A': '🅰︎', + 'B': '🅱︎', + 'C': '🅲︎', + 'D': '🅳︎', + 'E': '🅴︎', + 'F': '🅵︎', + 'G': '🅶︎', + 'H': '🅷︎', + 'I': '🅸︎', + 'J': '🅹︎', + 'K': '🅺︎', + 'L': '🅻︎', + 'M': '🅼︎', + 'N': '🅽︎', + 'O': '🅾︎', + 'P': '🅿︎', + 'Q': '🆀︎', + 'R': '🆁︎', + 'S': '🆂︎', + 'T': '🆃︎', + 'U': '🆄︎', + 'V': '🆅︎', + 'W': '🆆︎', + 'X': '🆇︎', + 'Y': '🆈︎', + 'Z': '🆉︎' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def andalucia(text): + style = { + 'a': 'ꪖ', + 'b': '᥇', + 'c': 'ᥴ', + 'd': 'ᦔ', + 'e': 'ꫀ', + 'f': 'ᠻ', + 'g': 'ᧁ', + 'h': 'ꫝ', + 'i': '𝓲', + 'j': '𝓳', + 'k': '𝘬', + 'l': 'ꪶ', + 'm': 'ꪑ', + 'n': 'ꪀ', + 'o': 'ꪮ', + 'p': 'ρ', + 'q': '𝘲', + 'r': '𝘳', + 's': '𝘴', + 't': '𝓽', + 'u': 'ꪊ', + 'v': 'ꪜ', + 'w': '᭙', + 'x': '᥊', + 'y': 'ꪗ', + 'z': 'ɀ', + 'A': 'ꪖ', + 'B': '᥇', + 'C': 'ᥴ', + 'D': 'ᦔ', + 'E': 'ꫀ', + 'F': 'ᠻ', + 'G': 'ᧁ', + 'H': 'ꫝ', + 'I': '𝓲', + 'J': '𝓳', + 'K': '𝘬', + 'L': 'ꪶ', + 'M': 'ꪑ', + 'N': 'ꪀ', + 'O': 'ꪮ', + 'P': 'ρ', + 'Q': '𝘲', + 'R': '𝘳', + 'S': '𝘴', + 'T': '𝓽', + 'U': 'ꪊ', + 'V': 'ꪜ', + 'W': '᭙', + 'X': '᥊', + 'Y': 'ꪗ', + 'Z': 'ɀ' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def manga(text): + style = { + 'a': '卂', + 'b': '乃', + 'c': '匚', + 'd': 'ᗪ', + 'e': '乇', + 'f': '千', + 'g': 'ᘜ', + 'h': '卄', + 'i': '|', + 'j': 'フ', + 'k': 'Ҝ', + 'l': 'ㄥ', + 'm': '爪', + 'n': '几', + 'o': 'ㄖ', + 'p': '卩', + 'q': 'Ҩ', + 'r': '尺', + 's': '丂', + 't': 'ㄒ', + 'u': 'ㄩ', + 'v': 'ᐯ', + 'w': '山', + 'x': '乂', + 'y': 'ㄚ', + 'z': '乙', + 'A': '卂', + 'B': '乃', + 'C': '匚', + 'D': 'ᗪ', + 'E': '乇', + 'F': '千', + 'G': 'ᘜ', + 'H': '卄', + 'I': '|', + 'J': 'フ', + 'K': 'Ҝ', + 'L': 'ㄥ', + 'M': '爪', + 'N': '几', + 'O': 'ㄖ', + 'P': '卩', + 'Q': 'Ҩ', + 'R': '尺', + 'S': '丂', + 'T': 'ㄒ', + 'U': 'ㄩ', + 'V': 'ᐯ', + 'W': '山', + 'X': '乂', + 'Y': 'ㄚ', + 'Z': '乙' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def stinky(text): + style = { + 'a': 'a̾', + 'b': 'b̾', + 'c': 'c̾', + 'd': 'd̾', + 'e': 'e̾', + 'f': 'f̾', + 'g': 'g̾', + 'h': 'h̾', + 'i': 'i̾', + 'j': 'j̾', + 'k': 'k̾', + 'l': 'l̾', + 'm': 'm̾', + 'n': 'n̾', + 'o': 'o̾', + 'p': 'p̾', + 'q': 'q̾', + 'r': 'r̾', + 's': 's̾', + 't': 't̾', + 'u': 'u̾', + 'v': 'v̾', + 'w': 'w̾', + 'x': 'x̾', + 'y': 'y̾', + 'z': 'z̾', + 'A': 'A̾', + 'B': 'B̾', + 'C': 'C̾', + 'D': 'D̾', + 'E': 'E̾', + 'F': 'F̾', + 'G': 'G̾', + 'H': 'H̾', + 'I': 'I̾', + 'J': 'J̾', + 'K': 'K̾', + 'L': 'L̾', + 'M': 'M̾', + 'N': 'N̾', + 'O': 'O̾', + 'P': 'P̾', + 'Q': 'Q̾', + 'R': 'R̾', + 'S': 'S̾', + 'T': 'T̾', + 'U': 'U̾', + 'V': 'V̾', + 'W': 'W̾', + 'X': 'X̾', + 'Y': 'Y̾', + 'Z': 'Z̾' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def bubbles(text): + style = { + 'a': 'ḁͦ', + 'b': 'b̥ͦ', + 'c': 'c̥ͦ', + 'd': 'd̥ͦ', + 'e': 'e̥ͦ', + 'f': 'f̥ͦ', + 'g': 'g̥ͦ', + 'h': 'h̥ͦ', + 'i': 'i̥ͦ', + 'j': 'j̥ͦ', + 'k': 'k̥ͦ', + 'l': 'l̥ͦ', + 'm': 'm̥ͦ', + 'n': 'n̥ͦ', + 'o': 'o̥ͦ', + 'p': 'p̥ͦ', + 'q': 'q̥ͦ', + 'r': 'r̥ͦ', + 's': 's̥ͦ', + 't': 't̥ͦ', + 'u': 'u̥ͦ', + 'v': 'v̥ͦ', + 'w': 'w̥ͦ', + 'x': 'x̥ͦ', + 'y': 'y̥ͦ', + 'z': 'z̥ͦ', + 'A': 'Ḁͦ', + 'B': 'B̥ͦ', + 'C': 'C̥ͦ', + 'D': 'D̥ͦ', + 'E': 'E̥ͦ', + 'F': 'F̥ͦ', + 'G': 'G̥ͦ', + 'H': 'H̥ͦ', + 'I': 'I̥ͦ', + 'J': 'J̥ͦ', + 'K': 'K̥ͦ', + 'L': 'L̥ͦ', + 'M': 'M̥ͦ', + 'N': 'N̥ͦ', + 'O': 'O̥ͦ', + 'P': 'P̥ͦ', + 'Q': 'Q̥ͦ', + 'R': 'R̥ͦ', + 'S': 'S̥ͦ', + 'T': 'T̥ͦ', + 'U': 'U̥ͦ', + 'V': 'V̥ͦ', + 'W': 'W̥ͦ', + 'X': 'X̥ͦ', + 'Y': 'Y̥ͦ', + 'Z': 'Z̥ͦ' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def underline(text): + style = { + 'a': 'a͟', + 'b': 'b͟', + 'c': 'c͟', + 'd': 'd͟', + 'e': 'e͟', + 'f': 'f͟', + 'g': 'g͟', + 'h': 'h͟', + 'i': 'i͟', + 'j': 'j͟', + 'k': 'k͟', + 'l': 'l͟', + 'm': 'm͟', + 'n': 'n͟', + 'o': 'o͟', + 'p': 'p͟', + 'q': 'q͟', + 'r': 'r͟', + 's': 's͟', + 't': 't͟', + 'u': 'u͟', + 'v': 'v͟', + 'w': 'w͟', + 'x': 'x͟', + 'y': 'y͟', + 'z': 'z͟', + 'A': 'A͟', + 'B': 'B͟', + 'C': 'C͟', + 'D': 'D͟', + 'E': 'E͟', + 'F': 'F͟', + 'G': 'G͟', + 'H': 'H͟', + 'I': 'I͟', + 'J': 'J͟', + 'K': 'K͟', + 'L': 'L͟', + 'M': 'M͟', + 'N': 'N͟', + 'O': 'O͟', + 'P': 'P͟', + 'Q': 'Q͟', + 'R': 'R͟', + 'S': 'S͟', + 'T': 'T͟', + 'U': 'U͟', + 'V': 'V͟', + 'W': 'W͟', + 'X': 'X͟', + 'Y': 'Y͟', + 'Z': 'Z͟' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def ladybug(text): + style = { + 'a': 'ꍏ', + 'b': 'ꌃ', + 'c': 'ꏳ', + 'd': 'ꀷ', + 'e': 'ꏂ', + 'f': 'ꎇ', + 'g': 'ꁅ', + 'h': 'ꀍ', + 'i': 'ꀤ', + 'j': '꒻', + 'k': 'ꀘ', + 'l': '꒒', + 'm': 'ꎭ', + 'n': 'ꈤ', + 'o': 'ꂦ', + 'p': 'ᖘ', + 'q': 'ꆰ', + 'r': 'ꋪ', + 's': 'ꌚ', + 't': '꓄', + 'u': 'ꀎ', + 'v': '꒦', + 'w': 'ꅐ', + 'x': 'ꉧ', + 'y': 'ꌩ', + 'z': 'ꁴ', + 'A': 'ꍏ', + 'B': 'ꌃ', + 'C': 'ꏳ', + 'D': 'ꀷ', + 'E': 'ꏂ', + 'F': 'ꎇ', + 'G': 'ꁅ', + 'H': 'ꀍ', + 'I': 'ꀤ', + 'J': '꒻', + 'K': 'ꀘ', + 'L': '꒒', + 'M': 'ꎭ', + 'N': 'ꈤ', + 'O': 'ꂦ', + 'P': 'ᖘ', + 'Q': 'ꆰ', + 'R': 'ꋪ', + 'S': 'ꌚ', + 'T': '꓄', + 'U': 'ꀎ', + 'V': '꒦', + 'W': 'ꅐ', + 'X': 'ꉧ', + 'Y': 'ꌩ', + 'Z': 'ꁴ' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def rays(text): + style = { + 'a': 'a҉', + 'b': 'b҉', + 'c': 'c҉', + 'd': 'd҉', + 'e': 'e҉', + 'f': 'f҉', + 'g': 'g҉', + 'h': 'h҉', + 'i': 'i҉', + 'j': 'j҉', + 'k': 'k҉', + 'l': 'l҉', + 'm': 'm҉', + 'n': 'n҉', + 'o': 'o҉', + 'p': 'p҉', + 'q': 'q҉', + 'r': 'r҉', + 's': 's҉', + 't': 't҉', + 'u': 'u҉', + 'v': 'v҉', + 'w': 'w҉', + 'x': 'x҉', + 'y': 'y҉', + 'z': 'z҉', + 'A': 'A҉', + 'B': 'B҉', + 'C': 'C҉', + 'D': 'D҉', + 'E': 'E҉', + 'F': 'F҉', + 'G': 'G҉', + 'H': 'H҉', + 'I': 'I҉', + 'J': 'J҉', + 'K': 'K҉', + 'L': 'L҉', + 'M': 'M҉', + 'N': 'N҉', + 'O': 'O҉', + 'P': 'P҉', + 'Q': 'Q҉', + 'R': 'R҉', + 'S': 'S҉', + 'T': 'T҉', + 'U': 'U҉', + 'V': 'V҉', + 'W': 'W҉', + 'X': 'X҉', + 'Y': 'Y҉', + 'Z': 'Z҉' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def birds(text): + style = { + 'a': 'a҈', + 'b': 'b҈', + 'c': 'c҈', + 'd': 'd҈', + 'e': 'e҈', + 'f': 'f҈', + 'g': 'g҈', + 'h': 'h҈', + 'i': 'i҈', + 'j': 'j҈', + 'k': 'k҈', + 'l': 'l҈', + 'm': 'm҈', + 'n': 'n҈', + 'o': 'o҈', + 'p': 'p҈', + 'q': 'q҈', + 'r': 'r҈', + 's': 's҈', + 't': 't҈', + 'u': 'u҈', + 'v': 'v҈', + 'w': 'w҈', + 'x': 'x҈', + 'y': 'y҈', + 'z': 'z҈', + 'A': 'A҈', + 'B': 'B҈', + 'C': 'C҈', + 'D': 'D҈', + 'E': 'E҈', + 'F': 'F҈', + 'G': 'G҈', + 'H': 'H҈', + 'I': 'I҈', + 'J': 'J҈', + 'K': 'K҈', + 'L': 'L҈', + 'M': 'M҈', + 'N': 'N҈', + 'O': 'O҈', + 'P': 'P҈', + 'Q': 'Q҈', + 'R': 'R҈', + 'S': 'S҈', + 'T': 'T҈', + 'U': 'U҈', + 'V': 'V҈', + 'W': 'W҈', + 'X': 'X҈', + 'Y': 'Y҈', + 'Z': 'Z҈' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def slash(text): + style = { + 'a': 'a̸', + 'b': 'b̸', + 'c': 'c̸', + 'd': 'd̸', + 'e': 'e̸', + 'f': 'f̸', + 'g': 'g̸', + 'h': 'h̸', + 'i': 'i̸', + 'j': 'j̸', + 'k': 'k̸', + 'l': 'l̸', + 'm': 'm̸', + 'n': 'n̸', + 'o': 'o̸', + 'p': 'p̸', + 'q': 'q̸', + 'r': 'r̸', + 's': 's̸', + 't': 't̸', + 'u': 'u̸', + 'v': 'v̸', + 'w': 'w̸', + 'x': 'x̸', + 'y': 'y̸', + 'z': 'z̸', + 'A': 'A̸', + 'B': 'B̸', + 'C': 'C̸', + 'D': 'D̸', + 'E': 'E̸', + 'F': 'F̸', + 'G': 'G̸', + 'H': 'H̸', + 'I': 'I̸', + 'J': 'J̸', + 'K': 'K̸', + 'L': 'L̸', + 'M': 'M̸', + 'N': 'N̸', + 'O': 'O̸', + 'P': 'P̸', + 'Q': 'Q̸', + 'R': 'R̸', + 'S': 'S̸', + 'T': 'T̸', + 'U': 'U̸', + 'V': 'V̸', + 'W': 'W̸', + 'X': 'X̸', + 'Y': 'Y̸', + 'Z': 'Z̸' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def stop(text): + style = { + 'a': 'a⃠', + 'b': 'b⃠', + 'c': 'c⃠', + 'd': 'd⃠', + 'e': 'e⃠', + 'f': 'f⃠', + 'g': 'g⃠', + 'h': 'h⃠', + 'i': 'i⃠', + 'j': 'j⃠', + 'k': 'k⃠', + 'l': 'l⃠', + 'm': 'm⃠', + 'n': 'n⃠', + 'o': 'o⃠', + 'p': 'p⃠', + 'q': 'q⃠', + 'r': 'r⃠', + 's': 's⃠', + 't': 't⃠', + 'u': 'u⃠', + 'v': 'v⃠', + 'w': 'w⃠', + 'x': 'x⃠', + 'y': 'y⃠', + 'z': 'z⃠', + 'A': 'A⃠', + 'B': 'B⃠', + 'C': 'C⃠', + 'D': 'D⃠', + 'E': 'E⃠', + 'F': 'F⃠', + 'G': 'G⃠', + 'H': 'H⃠', + 'I': 'I⃠', + 'J': 'J⃠', + 'K': 'K⃠', + 'L': 'L⃠', + 'M': 'M⃠', + 'N': 'N⃠', + 'O': 'O⃠', + 'P': 'P⃠', + 'Q': 'Q⃠', + 'R': 'R⃠', + 'S': 'S⃠', + 'T': 'T⃠', + 'U': 'U⃠', + 'V': 'V⃠', + 'W': 'W⃠', + 'X': 'X⃠', + 'Y': 'Y⃠', + 'Z': 'Z⃠' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def skyline(text): + style = { + 'a': 'a̺͆', + 'b': 'b̺͆', + 'c': 'c̺͆', + 'd': 'd̺͆', + 'e': 'e̺͆', + 'f': 'f̺͆', + 'g': 'g̺͆', + 'h': 'h̺͆', + 'i': 'i̺͆', + 'j': 'j̺͆', + 'k': 'k̺͆', + 'l': 'l̺͆', + 'm': 'm̺͆', + 'n': 'n̺͆', + 'o': 'o̺͆', + 'p': 'p̺͆', + 'q': 'q̺͆', + 'r': 'r̺͆', + 's': 's̺͆', + 't': 't̺͆', + 'u': 'u̺͆', + 'v': 'v̺͆', + 'w': 'w̺͆', + 'x': 'x̺͆', + 'y': 'y̺͆', + 'z': 'z̺͆', + 'A': 'A̺͆', + 'B': 'B̺͆', + 'C': 'C̺͆', + 'D': 'D̺͆', + 'E': 'E̺͆', + 'F': 'F̺͆', + 'G': 'G̺͆', + 'H': 'H̺͆', + 'I': 'I̺͆', + 'J': 'J̺͆', + 'K': 'K̺͆', + 'L': 'L̺͆', + 'M': 'M̺͆', + 'N': 'N̺͆', + 'O': 'O̺͆', + 'P': 'P̺͆', + 'Q': 'Q̺͆', + 'R': 'R̺͆', + 'S': 'S̺͆', + 'T': 'T̺͆', + 'U': 'U̺͆', + 'V': 'V̺͆', + 'W': 'W̺͆', + 'X': 'X̺͆', + 'Y': 'Y̺͆', + 'Z': 'Z̺͆' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def arrows(text): + style = { + 'a': 'a͎', + 'b': 'b͎', + 'c': 'c͎', + 'd': 'd͎', + 'e': 'e͎', + 'f': 'f͎', + 'g': 'g͎', + 'h': 'h͎', + 'i': 'i͎', + 'j': 'j͎', + 'k': 'k͎', + 'l': 'l͎', + 'm': 'm͎', + 'n': 'n͎', + 'o': 'o͎', + 'p': 'p͎', + 'q': 'q͎', + 'r': 'r͎', + 's': 's͎', + 't': 't͎', + 'u': 'u͎', + 'v': 'v͎', + 'w': 'w͎', + 'x': 'x͎', + 'y': 'y͎', + 'z': 'z͎', + 'A': 'A͎', + 'B': 'B͎', + 'C': 'C͎', + 'D': 'D͎', + 'E': 'E͎', + 'F': 'F͎', + 'G': 'G͎', + 'H': 'H͎', + 'I': 'I͎', + 'J': 'J͎', + 'K': 'K͎', + 'L': 'L͎', + 'M': 'M͎', + 'N': 'N͎', + 'O': 'O͎', + 'P': 'P͎', + 'Q': 'Q͎', + 'R': 'R͎', + 'S': 'S͎', + 'T': 'T͎', + 'U': 'U͎', + 'V': 'V͎', + 'W': 'W͎', + 'X': 'X͎', + 'Y': 'Y͎', + 'Z': 'Z͎' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def rvnes(text): + style = { + 'a': 'ል', + 'b': 'ጌ', + 'c': 'ር', + 'd': 'ዕ', + 'e': 'ቿ', + 'f': 'ቻ', + 'g': 'ኗ', + 'h': 'ዘ', + 'i': 'ጎ', + 'j': 'ጋ', + 'k': 'ጕ', + 'l': 'ረ', + 'm': 'ጠ', + 'n': 'ክ', + 'o': 'ዐ', + 'p': 'የ', + 'q': 'ዒ', + 'r': 'ዪ', + 's': 'ነ', + 't': 'ፕ', + 'u': 'ሁ', + 'v': 'ሀ', + 'w': 'ሠ', + 'x': 'ሸ', + 'y': 'ሃ', + 'z': 'ጊ', + 'A': 'ል', + 'B': 'ጌ', + 'C': 'ር', + 'D': 'ዕ', + 'E': 'ቿ', + 'F': 'ቻ', + 'G': 'ኗ', + 'H': 'ዘ', + 'I': 'ጎ', + 'J': 'ጋ', + 'K': 'ጕ', + 'L': 'ረ', + 'M': 'ጠ', + 'N': 'ክ', + 'O': 'ዐ', + 'P': 'የ', + 'Q': 'ዒ', + 'R': 'ዪ', + 'S': 'ነ', + 'T': 'ፕ', + 'U': 'ሁ', + 'V': 'ሀ', + 'W': 'ሠ', + 'X': 'ሸ', + 'Y': 'ሃ', + 'Z': 'ጊ' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def strike(text): + style = { + 'a': 'a̶', + 'b': 'b̶', + 'c': 'c̶', + 'd': 'd̶', + 'e': 'e̶', + 'f': 'f̶', + 'g': 'g̶', + 'h': 'h̶', + 'i': 'i̶', + 'j': 'j̶', + 'k': 'k̶', + 'l': 'l̶', + 'm': 'm̶', + 'n': 'n̶', + 'o': 'o̶', + 'p': 'p̶', + 'q': 'q̶', + 'r': 'r̶', + 's': 's̶', + 't': 't̶', + 'u': 'u̶', + 'v': 'v̶', + 'w': 'w̶', + 'x': 'x̶', + 'y': 'y̶', + 'z': 'z̶', + 'A': 'A̶', + 'B': 'B̶', + 'C': 'C̶', + 'D': 'D̶', + 'E': 'E̶', + 'F': 'F̶', + 'G': 'G̶', + 'H': 'H̶', + 'I': 'I̶', + 'J': 'J̶', + 'K': 'K̶', + 'L': 'L̶', + 'M': 'M̶', + 'N': 'N̶', + 'O': 'O̶', + 'P': 'P̶', + 'Q': 'Q̶', + 'R': 'R̶', + 'S': 'S̶', + 'T': 'T̶', + 'U': 'U̶', + 'V': 'V̶', + 'W': 'W̶', + 'X': 'X̶', + 'Y': 'Y̶', + 'Z': 'Z̶' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + + def frozen(text): + style = { + 'a': 'a༙', + 'b': 'b༙', + 'c': 'c༙', + 'd': 'd༙', + 'e': 'e༙', + 'f': 'f༙', + 'g': 'g༙', + 'h': 'h༙', + 'i': 'i༙', + 'j': 'j༙', + 'k': 'k༙', + 'l': 'l༙', + 'm': 'm༙', + 'n': 'n༙', + 'o': 'o༙', + 'p': 'p༙', + 'q': 'q༙', + 'r': 'r༙', + 's': 's༙', + 't': 't༙', + 'u': 'u༙', + 'v': 'v༙', + 'w': 'w༙', + 'x': 'x༙', + 'y': 'y༙', + 'z': 'z༙', + 'A': 'A༙', + 'B': 'B༙', + 'C': 'C༙', + 'D': 'D༙', + 'E': 'E༙', + 'F': 'F༙', + 'G': 'G༙', + 'H': 'H༙', + 'I': 'I༙', + 'J': 'J༙', + 'K': 'K༙', + 'L': 'L༙', + 'M': 'M༙', + 'N': 'N༙', + 'O': 'O༙', + 'P': 'P༙', + 'Q': 'Q༙', + 'R': 'R༙', + 'S': 'S༙', + 'T': 'T༙', + 'U': 'U༙', + 'V': 'V༙', + 'W': 'W༙', + 'X': 'X༙', + 'Y': 'Y༙', + 'Z': 'Z༙' + } + for i, j in style.items(): + text = text.replace(i, j) + return text + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\admin_control.py +from pyrogram import Client, filters, enums +from pyrogram.errors import ChatAdminRequired +from pyrogram.types import Message, InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery +from pyrogram.errors.exceptions.bad_request_400 import MessageTooLong, PeerIdInvalid, UserNotParticipant, MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty + +from info import ADMINS, LOG_CHANNEL, SUPPORT_CHAT, WELCOM_PIC, WELCOM_TEXT, IMDB_TEMPLATE +from utils import get_size, temp, extract_user, get_file_id, get_poster, humanbytes +from database.users_chats_db import db +from database.ia_filterdb import Media +from datetime import datetime +from Script import script +import logging, re, asyncio, time, shutil, psutil, os, sys + +logger = logging.getLogger(__name__) +logger.setLevel(logging.ERROR) + + +@Client.on_message(filters.new_chat_members & filters.group) +async def savegroup_and_welcome(bot, message): + r_j_check = [u.id for u in message.new_chat_members] + if bot.id in r_j_check: + if not await db.get_chat(message.chat.id): + total=await bot.get_chat_members_count(message.chat.id) + r_j = message.from_user.mention if message.from_user else "Anonymous" + await bot.send_message(LOG_CHANNEL, script.LOG_TEXT_G.format(a=message.chat.title, b=message.chat.id, c=message.chat.username, d=total, e=r_j, f=bot.mention)) + await db.add_chat(message.chat.id, message.chat.title, message.chat.username) + if message.chat.id in temp.BANNED_CHATS: + buttons = [[InlineKeyboardButton('Sᴜᴩᴩᴏʀᴛ', url=f'https://t.me/{SUPPORT_CHAT}')]] + k = await message.reply("CHAT NOT ALLOWED 🐞\n\nMʏ Aᴅᴍɪɴs Hᴀs Rᴇsᴛʀɪᴄᴛᴇᴅ Mᴇ Fʀᴏᴍ Wᴏʀᴋɪɴɢ Hᴇʀᴇ ! Iғ Yᴏᴜ Wᴀɴᴛ Tᴏ Kɴᴏᴡ Mᴏʀᴇ Aʙᴏᴜᴛ Iᴛ Cᴏɴᴛᴀᴄᴛ Sᴜᴘᴘᴏʀᴛ", reply_markup=InlineKeyboardMarkup(buttons)) + try: await k.pin() + except: pass + return await bot.leave_chat(message.chat.id) + + buttons = [[InlineKeyboardButton('Hᴇʟᴩ', url=f"https://t.me/{temp.U_NAME}?start=help")]] + await message.reply(text="❤️ Tʜᴀɴᴋs Tᴏ Aᴅᴅ Mᴇ Tᴏ Yᴏᴜ'ʀ Gʀᴏᴜᴘ.\n» Dᴏɴ'ᴛ Fᴏʀɢᴇᴛ Tᴏ Mᴀᴋᴇ Mᴇ Aᴅᴍɪɴ.\n» Is Aɴʏ Dᴏᴜʙᴛ's Aʙᴏᴜᴛ Usɪɴɢ Mᴇ Cʟɪᴄᴋ Bᴇʟᴏᴡ Bᴜᴛᴛᴏɴ...✨", reply_markup=InlineKeyboardMarkup(buttons)) + else: + for u in message.new_chat_members: + if (temp.MELCOW).get('welcome') is not None: + try: await (temp.MELCOW['welcome']).delete() + except: pass + if WELCOM_PIC: temp.MELCOW['welcome'] = await message.reply_photo(photo=WELCOM_PIC, caption=WELCOM_TEXT.format(user=u.mention, chat=message.chat.title)) + else: temp.MELCOW['welcome'] = await message.reply_text(text=WELCOM_TEXT.format(user=u.mention, chat=message.chat.title)) + + +@Client.on_message(filters.command('leave') & filters.user(ADMINS)) +async def leave_a_chat(bot, message): + if len(message.command) == 1: return await message.reply('Gɪᴠᴇ Mᴇ A Cʜᴀᴛ Iᴅ') + chat = message.command[1] + try: chat = int(chat) + except: chat = chat + try: + buttons = [[InlineKeyboardButton('Sᴜᴩᴩᴏʀᴛ', url=f'https://t.me/{SUPPORT_CHAT}')]] + await bot.send_message(chat_id=chat, text='Hᴇʟʟᴏ Fʀɪᴇɴᴅs, \nMʏ Aᴅᴍɪɴ Hᴀs Tᴏʟᴅ Mᴇ Tᴏ Lᴇᴀᴠᴇ Fʀᴏᴍ Gʀᴏᴜᴘ Sᴏ I Gᴏ! Iғ Yᴏᴜ Wᴀɴɴᴀ Aᴅᴅ Mᴇ Aɢᴀɪɴ Cᴏɴᴛᴀᴄᴛ Mʏ Sᴜᴘᴘᴏʀᴛ Gʀᴏᴜᴘ', reply_markup=InlineKeyboardMarkup(buttons)) + await bot.leave_chat(chat) + except Exception as e: + await message.reply(f'Eʀʀᴏʀ: {e}') + +@Client.on_message(filters.command('disable') & filters.user(ADMINS)) +async def disable_chat(bot, message): + if len(message.command) == 1: return await message.reply('Gɪᴠᴇ Mᴇ A Cʜᴀᴛ Iᴅ') + r = message.text.split(None) + if len(r) > 2: + reason = message.text.split(None, 2)[2] + chat = message.text.split(None, 2)[1] + else: + chat = message.command[1] + reason = "No Reason Provided" + try: + chat_ = int(chat) + except: + return await message.reply('Gɪᴠᴇ Mᴇ A Vᴀʟɪᴅ Cʜᴀᴛ ID') + cha_t = await db.get_chat(int(chat_)) + if not cha_t: + return await message.reply("Cʜᴀᴛ Nᴏᴛ Fᴏᴜɴᴅ Iɴ DB") + if cha_t['is_disabled']: + return await message.reply(f"Tʜɪꜱ Cʜᴀᴛ Is Aʟʀᴇᴅʏ Dɪꜱᴀʙʟᴇᴅ:\nRᴇᴀꜱᴏɴ: {cha_t['reason']} ") + await db.disable_chat(int(chat_), reason) + temp.BANNED_CHATS.append(int(chat_)) + await message.reply('Cʜᴀᴛ Sᴜᴄᴄᴇꜱꜰᴜʟʟʏ Dɪꜱᴀʙʟᴇᴅ') + try: + buttons = [[InlineKeyboardButton('Sᴜᴩᴩᴏʀᴛ', url=f'https://t.me/{SUPPORT_CHAT}')]] + await bot.send_message(chat_id=chat_, text=f'Hᴇʟʟᴏ Fʀɪᴇɴᴅs, \nᴍʏ Aᴅᴍɪɴ Hᴀs Tᴏʟᴅ Mᴇ Tᴏ Lᴇᴀᴠᴇ Fʀᴏᴍ Gʀᴏᴜᴘ Sᴏ I Gᴏ! Iғ Yᴏᴜ Wᴀɴɴᴀ Aᴅᴅ Mᴇ Aɢᴀɪɴ Cᴏɴᴛᴀᴄᴛ Mʏ Sᴜᴘᴘᴏʀᴛ Gʀᴏᴜᴘ. \nRᴇᴀꜱᴏɴ : {reason}', reply_markup=InlineKeyboardMarkup(buttons)) + await bot.leave_chat(chat_) + except Exception as e: + await message.reply(f"Eʀʀᴏʀ: {e}") + + +@Client.on_message(filters.command('enable') & filters.user(ADMINS)) +async def re_enable_chat(bot, message): + if len(message.command) == 1: return await message.reply('Gɪᴠᴇ Mᴇ A Cʜᴀᴛ Iᴅ') + chat = message.command[1] + try: chat_ = int(chat) + except: return await message.reply('Gɪᴠᴇ Mᴇ A Vᴀʟɪᴅ Cʜᴀᴛ ID') + sts = await db.get_chat(int(chat)) + if not sts: return await message.reply("Cʜᴀᴛ Nᴏᴛ Fᴏᴜɴᴅ Iɴ DB") + if not sts.get('is_disabled'): + return await message.reply('Tʜɪꜱ Cʜᴀᴛ Iꜱ Nᴏᴛ Yᴇᴛ Dɪꜱᴀʙʟᴇᴅ') + await db.re_enable_chat(int(chat_)) + temp.BANNED_CHATS.remove(int(chat_)) + await message.reply("Cʜᴀᴛ Sᴜᴄᴄᴇꜱꜰᴜʟʟʏ Rᴇ-Eɴᴀʙʟᴇᴅ") + + +@Client.on_message(filters.command('stats') & filters.incoming) +async def get_ststs(bot, message): + rju = await message.reply('Pʟᴇᴀꜱᴇ Wᴀɪᴛ...') + total_users = await db.total_users_count() + totl_chats = await db.total_chat_count() + files = await Media.count_documents() + size = await db.get_db_size() + free = 536870912 - size + size = get_size(size) + free = get_size(free) + await rju.edit(script.STATUS_TXT.format(files, total_users, totl_chats, size, free)) + + +@Client.on_message(filters.command('invite') & filters.user(ADMINS)) +async def gen_invite(bot, message): + if len(message.command) == 1: return await message.reply('Gɪᴠᴇ Mᴇ A Cʜᴀᴛ Iᴅ') + chat = message.command[1] + try: chat = int(chat) + except: return await message.reply('Gɪᴠᴇ Mᴇ A Vᴀʟɪᴅ Cʜᴀᴛ ID') + try: + link = await bot.create_chat_invite_link(chat) + except ChatAdminRequired: + return await message.reply("Iɴᴠɪᴛᴇ Lɪɴᴋ Gᴇɴᴇʀᴀᴛɪᴏɴ Fᴀɪʟᴇᴅ, Iᴀᴍ Nᴏᴛ Hᴀᴠɪɴɢ Sᴜғғɪᴄɪᴇɴᴛ Rɪɢʜᴛs") + except Exception as e: + return await message.reply(f'Eʀʀᴏʀ: {e}') + await message.reply(f'Hᴇʀᴇ Iꜱ Yᴏᴜʀ Iɴᴠɪᴛᴇ Lɪɴᴋ: {link.invite_link}') + +@Client.on_message(filters.command('ban_user') & filters.user(ADMINS)) +async def ban_a_user(bot, message): + if len(message.command) == 1: return await message.reply('Gɪᴠᴇ Mᴇ A Uꜱᴇʀ Iᴅ / Uꜱᴇʀɴᴀᴍᴇ') + r = message.text.split(None) + if len(r) > 2: + reason = message.text.split(None, 2)[2] + chat = message.text.split(None, 2)[1] + else: + chat = message.command[1] + reason = "No reason Provided" + try: chat = int(chat) + except: pass + try: k = await bot.get_users(chat) + except PeerIdInvalid: return await message.reply("Tʜɪs Is Aɴ Iɴᴠᴀʟɪᴅ Usᴇʀ, Mᴀᴋᴇ Sᴜʀᴇ Iᴀ Hᴀᴠᴇ Mᴇᴛ Hɪᴍ Bᴇғᴏʀᴇ") + except IndexError: return await message.reply("Tʜɪs Mɪɢʜᴛ Bᴇ A Cʜᴀɴɴᴇʟ, Mᴀᴋᴇ Sᴜʀᴇ Iᴛs A Usᴇʀ.") + except Exception as e: return await message.reply(f'Eʀʀᴏʀ: {e}') + else: + jar = await db.get_ban_status(k.id) + if jar['is_banned']: return await message.reply(f"{k.mention} Iꜱ Aʟʀᴇᴅʏ Bᴀɴɴᴇᴅ\nRᴇᴀꜱᴏɴ: {jar['ban_reason']}") + await db.ban_user(k.id, reason) + temp.BANNED_USERS.append(k.id) + await message.reply(f"Sᴜᴄᴄᴇꜱꜰᴜʟʟʏ Bᴀɴɴᴇᴅ {k.mention}") + + + +@Client.on_message(filters.command('unban_user') & filters.user(ADMINS)) +async def unban_a_user(bot, message): + if len(message.command) == 1: return await message.reply('Gɪᴠᴇ Mᴇ A Uꜱᴇʀ Iᴅ / Uꜱᴇʀɴᴀᴍᴇ') + r = message.text.split(None) + if len(r) > 2: + reason = message.text.split(None, 2)[2] + chat = message.text.split(None, 2)[1] + else: + chat = message.command[1] + reason = "No reason Provided" + try: chat = int(chat) + except: pass + try: k = await bot.get_users(chat) + except PeerIdInvalid: return await message.reply("Tʜɪs Is Aɴ Iɴᴠᴀʟɪᴅ Usᴇʀ, Mᴀᴋᴇ Sᴜʀᴇ Iᴀ Hᴀᴠᴇ Mᴇᴛ Hɪᴍ Bᴇғᴏʀᴇ") + except IndexError: return await message.reply("Tʜɪs Mɪɢʜᴛ Bᴇ A Cʜᴀɴɴᴇʟ, Mᴀᴋᴇ Sᴜʀᴇ Iᴛs A Usᴇʀ.") + except Exception as e: return await message.reply(f'Eʀʀᴏʀ: {e}') + else: + jar = await db.get_ban_status(k.id) + if not jar['is_banned']: return await message.reply(f"{k.mention} Iꜱ Nᴏᴛ Yᴇᴛ Bᴀɴɴᴇᴅ") + await db.remove_ban(k.id) + temp.BANNED_USERS.remove(k.id) + await message.reply(f"Sᴜᴄᴄᴇꜱꜰᴜʟʟʏ Uɴʙᴀɴɴᴇᴅ {k.mention}") + + + +@Client.on_message(filters.command('users') & filters.user(ADMINS)) +async def list_users(bot, message): + sps = await message.reply('Gᴇᴛᴛɪɴɢ Lɪꜱᴛ Oꜰ Uꜱᴇʀꜱ') + users = await db.get_all_users() + out = "Uꜱᴇʀꜱ Sᴀᴠᴇᴅ Iɴ DB Aʀᴇ:\n\n" + async for user in users: + out += f"{user['name']}\n" + try: + await sps.edit_text(out) + except MessageTooLong: + with open('users.txt', 'w+') as outfile: + outfile.write(out) + await message.reply_document('users.txt', caption="Lɪꜱᴛ Oꜰ Uꜱᴇʀꜱ") + +@Client.on_message(filters.command('chats') & filters.user(ADMINS)) +async def list_chats(bot, message): + sps = await message.reply('Gᴇᴛᴛɪɴɢ Lɪꜱᴛ Oꜰ Cʜᴀᴛꜱ') + chats = await db.get_all_chats() + out = "Cʜᴀᴛꜱ Sᴀᴠᴇᴅ Iɴ DB Aʀᴇ:\n\n" + async for chat in chats: + username = chat['username'] + username = "private" if not username else "@" + username + out += f"**- Tɪᴛʟᴇ:** `{chat['title']}`\n**- ID:** `{chat['id']}`\n**Uꜱᴇʀɴᴀᴍᴇ:** {username}\n" + try: + await sps.edit_text(out) + except MessageTooLong: + with open('chats.txt', 'w+') as outfile: + outfile.write(out) + await message.reply_document('chats.txt', caption="Lɪꜱᴛ Oꜰ Cʜᴀᴛꜱ") + + + +@Client.on_message(filters.command('id')) +async def show_id(client, message): + chat_type = message.chat.type + if chat_type == enums.ChatType.PRIVATE: + user_id = message.chat.id + first = message.from_user.first_name + last = message.from_user.last_name or "" + username = message.from_user.username + dc_id = message.from_user.dc_id or "" + await message.reply_text(f"➲ ꜰɪʀꜱᴛ ɴᴀᴍᴇ: {first}\n➲ ʟᴀꜱᴛ ɴᴀᴍᴇ: {last}\n➲ ᴜꜱᴇʀɴᴀᴍᴇ: {username}\n➲ ᴛᴇʟᴇɢʀᴀᴍ ɪᴅ: {user_id}\n➲ ᴅᴄ ɪᴅ: {dc_id}", quote=True) + + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + _id = "" + _id += f"➲ ᴄʜᴀᴛ ɪᴅ: {message.chat.id}\n" + + if message.reply_to_message: + _id += ( + "➲ ᴜꜱᴇʀ ɪᴅ: " + f"{message.from_user.id if message.from_user else 'Anonymous'}\n" + "➲ ʀᴇᴩʟɪᴇᴅ ᴜꜱᴇʀ ɪᴅ: " + f"{message.reply_to_message.from_user.id if message.reply_to_message.from_user else 'Anonymous'}\n" + ) + file_info = get_file_id(message.reply_to_message) + else: + _id += ( + "➲ ᴜꜱᴇʀ ɪᴅ: " + f"{message.from_user.id if message.from_user else 'Anonymous'}\n" + ) + file_info = get_file_id(message) + if file_info: + _id += ( + f"{file_info.message_type}: " + f"{file_info.file_id}\n" + ) + await message.reply_text(_id, quote=True) + + +@Client.on_message(filters.command(["info"])) +async def user_info(client, message): + status_message = await message.reply_text("`ᴩʟᴇᴀꜱᴇ ᴡᴀɪᴛ....`") + from_user = None + from_user_id, _ = extract_user(message) + try: + from_user = await client.get_users(from_user_id) + except Exception as error: + return await status_message.edit(str(error)) + if from_user is None: + return await status_message.edit("ɴᴏ ᴠᴀʟɪᴅ ᴜsᴇʀ_ɪᴅ / ᴍᴇssᴀɢᴇ sᴘᴇᴄɪғɪᴇᴅ") + message_out_str = "" + message_out_str += f"➲ꜰɪʀꜱᴛ ɴᴀᴍᴇ: {from_user.first_name}\n" + last_name = from_user.last_name or "ɴᴏɴᴇ" + message_out_str += f"➲ʟᴀꜱᴛ ɴᴀᴍᴇ: {last_name}\n" + message_out_str += f"➲ᴛɢ-ɪᴅ: {from_user.id}\n" + username = from_user.username or "ɴᴏɴᴇ" + dc_id = from_user.dc_id or "[ᴜꜱᴇʀ ᴅᴏꜱᴇ'ᴛ ʜᴀᴠᴇ ᴀ ᴠᴀʟɪᴅ ᴅᴩ]" + message_out_str += f"➲ᴅᴄ-ɪᴅ: {dc_id}\n" + message_out_str += f"➲ᴜꜱᴇʀɴᴀᴍᴇ: @{username}\n" + message_out_str += f"➲ᴜꜱᴇʀ ʟɪɴᴋ: ᴄʟɪᴄᴋ ʜᴇʀᴇ\n" + if message.chat.type in ((enums.ChatType.SUPERGROUP, enums.ChatType.CHANNEL)): + try: + chat_member_p = await message.chat.get_member(from_user.id) + joined_date = (chat_member_p.joined_date or datetime.now()).strftime("%Y.%m.%d %H:%M:%S") + message_out_str += f"➲ᴊᴏɪɴᴇᴅ ᴛʜɪꜱ ᴄʜᴀᴛ ᴏɴ: {joined_date}\n" + except UserNotParticipant: pass + chat_photo = from_user.photo + if chat_photo: + local_user_photo = await client.download_media(message=chat_photo.big_file_id) + buttons = [[InlineKeyboardButton('ᴄʟᴏꜱᴇ ✘', callback_data='close_data')]] + await message.reply_photo( + photo=local_user_photo, + quote=True, + reply_markup=InlineKeyboardMarkup(buttons), + caption=message_out_str, + parse_mode=enums.ParseMode.HTML, + disable_notification=True + ) + os.remove(local_user_photo) + else: + buttons = [[InlineKeyboardButton('ᴄʟᴏꜱᴇ ✘', callback_data='close_data')]] + await message.reply_text( + text=message_out_str, + reply_markup=InlineKeyboardMarkup(buttons), + quote=True, + parse_mode=enums.ParseMode.HTML, + disable_notification=True + ) + await status_message.delete() + +@Client.on_message(filters.command(["imdb", 'search'])) +async def imdb_search(client, message): + if ' ' in message.text: + k = await message.reply('ꜱᴇᴀʀᴄʜɪɴɢ ɪᴍᴅʙ..') + r, title = message.text.split(None, 1) + movies = await get_poster(title, bulk=True) + if not movies: + return await message.reply("ɴᴏ ʀᴇꜱᴜʟᴛ ꜰᴏᴜɴᴅ") + btn = [[InlineKeyboardButton(f"{movie.get('title')} - {movie.get('year')}", callback_data=f"imdb#{movie.movieID}")] for movie in movies ] + await k.edit('Hᴇʀᴇ Is Wʜᴀᴛ I Fᴏᴜɴᴅ Oɴ Iᴍᴅʙ', reply_markup=InlineKeyboardMarkup(btn)) + else: + await message.reply('Gɪᴠᴇ Mᴇ A Mᴏᴠɪᴇ / Sᴇʀɪᴇs Nᴀᴍᴇ') + + +@Client.on_callback_query(filters.regex('^imdb')) +async def imdb_callback(bot: Client, quer_y: CallbackQuery): + i, movie = quer_y.data.split('#') + imdb = await get_poster(query=movie, id=True) + btn = [[InlineKeyboardButton(f"{imdb.get('title')}", url=imdb['url'])]] + message = quer_y.message.reply_to_message or quer_y.message + if imdb: + caption = IMDB_TEMPLATE.format( + query = imdb['title'], + title = imdb['title'], + votes = imdb['votes'], + aka = imdb["aka"], + seasons = imdb["seasons"], + box_office = imdb['box_office'], + localized_title = imdb['localized_title'], + kind = imdb['kind'], + imdb_id = imdb["imdb_id"], + cast = imdb["cast"], + runtime = imdb["runtime"], + countries = imdb["countries"], + certificates = imdb["certificates"], + languages = imdb["languages"], + director = imdb["director"], + writer = imdb["writer"], + producer = imdb["producer"], + composer = imdb["composer"], + cinematographer = imdb["cinematographer"], + music_team = imdb["music_team"], + distributors = imdb["distributors"], + release_date = imdb['release_date'], + year = imdb['year'], + genres = imdb['genres'], + poster = imdb['poster'], + plot = imdb['plot'], + rating = imdb['rating'], + url = imdb['url'], + **locals() + ) + else: + caption = "ɴᴏ ʀᴇꜱᴜʟᴛꜱ" + if imdb.get('poster'): + try: + await quer_y.message.reply_photo(photo=imdb['poster'], caption=caption, reply_markup=InlineKeyboardMarkup(btn)) + except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty): + pic = imdb.get('poster') + poster = pic.replace('.jpg', "._V1_UX360.jpg") + await quer_y.message.reply_photo(photo=poster, caption=caption, reply_markup=InlineKeyboardMarkup(btn)) + except Exception as e: + logger.exception(e) + await quer_y.message.reply(caption, reply_markup=InlineKeyboardMarkup(btn), disable_web_page_preview=False) + await quer_y.message.delete() + else: + await quer_y.message.edit(caption, reply_markup=InlineKeyboardMarkup(btn), disable_web_page_preview=False) + + +@Client.on_message(filters.command('logs') & filters.user(ADMINS)) +async def log_file(bot, msg): + try: await message.reply_document('BotLog.txt') + except Exception as e: await message.reply(str(e)) + + +@Client.on_message(filters.command("restart") & filters.user(ADMINS)) +async def restart_bot(bot, msg): + await msg.reply("Rᴇꜱᴛᴀᴛɪɴɢ........") + await asyncio.sleep(2) + await sts.delete() + os.execl(sys.executable, sys.executable, *sys.argv) + + + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\banned.py +from pyrogram.types import Message, InlineKeyboardButton, InlineKeyboardMarkup +from pyrogram import Client, filters +from database.users_chats_db import db +from info import SUPPORT_CHAT +from utils import temp + +async def banned_users(_, client, message: Message): + if message.from_user.is_bot: return + return (message.from_user is not None or not message.sender_chat) and (message.from_user.id in temp.BANNED_USERS) + +async def disabled_chat(_, client, message: Message): + return message.chat.id in temp.BANNED_CHATS + +@Client.on_message(filters.private & filters.incoming & filters.create(banned_users)) +async def ban_reply(bot, message): + ban = await db.get_ban_status(message.from_user.id) + await message.reply(f"Sᴏʀʀʏ Dᴜᴅᴇ, Yᴏᴜ Aʀᴇ Bᴀɴɴᴇᴅ Tᴏ Usᴇ Mᴇ. \nBᴀɴ Rᴇᴀsᴏɴ: {ban['ban_reason']}") + +@Client.on_message(filters.group & filters.incoming & filters.create(disabled_chat)) +async def grp_bd(bot, message): + buttons = [[InlineKeyboardButton('Sᴜᴩᴩᴏʀᴛ', url=f'https://t.me/{SUPPORT_CHAT}')]] + chat = await db.get_chat(message.chat.id) + k = await message.reply(text=f"CHAT NOT ALLOWED 🐞\n\nMʏ Aᴅᴍɪɴs Hᴀs Rᴇsᴛʀɪᴄᴛᴇᴅ Mᴇ Fʀᴏᴍ Wᴏʀᴋɪɴɢ Hᴇʀᴇ ! Iғ Yᴏᴜ Wᴀɴᴛ Tᴏ Kɴᴏᴡ Mᴏʀᴇ Aʙᴏᴜᴛ Iᴛ Cᴏɴᴛᴀᴄᴛ Sᴜᴘᴘᴏʀᴛ..\nRᴇᴀꜱᴏɴ : {chat['reason']}.", reply_markup=InlineKeyboardMarkup(buttons)) + try: await k.pin() + except: pass + await bot.leave_chat(message.chat.id) + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\broadcast.py +import datetime, time, os, asyncio,logging +from pyrogram.errors import InputUserDeactivated, UserNotParticipant, FloodWait, UserIsBlocked, PeerIdInvalid +from pyrogram.errors.exceptions.bad_request_400 import MessageTooLong, PeerIdInvalid +from pyrogram.types import Message, InlineKeyboardButton +from pyrogram import Client, filters, enums +from database.users_chats_db import db +from info import ADMINS + + +@Client.on_message(filters.command("broadcast") & filters.user(ADMINS) & filters.reply) +async def broadcast(bot, message): + users = await db.get_all_users() + b_msg = message.reply_to_message + sts = await message.reply_text('Bʀᴏᴀᴅᴄᴀsᴛɪɴɢ Yᴏᴜʀ Mᴇssᴀɢᴇs...') + start_time = time.time() + total_users = await db.total_users_count() + done = 0 + blocked = 0 + deleted = 0 + failed =0 + success = 0 + async for user in users: + pti, sh = await broadcast_messages(int(user['id']), b_msg) + if pti: + success += 1 + elif pti == False: + if sh == "Blocked": + blocked+=1 + elif sh == "Deleted": + deleted += 1 + elif sh == "Error": + failed += 1 + done += 1 + if not done % 20: + await sts.edit(f"Bʀᴏᴀᴅᴄᴀsᴛ Iɴ Pʀᴏɢʀᴇss:\n\nTᴏᴛᴀʟ Uꜱᴇʀꜱ {total_users}\nCᴏᴍᴩʟᴇᴛᴇᴅ: {done} / {total_users}\nSᴜᴄᴄᴇꜱꜱ: {success}\nBʟᴏᴄᴋᴇᴅ: {blocked}\nDᴇʟᴇᴛᴇᴅ: {deleted}") + time_taken = datetime.timedelta(seconds=int(time.time()-start_time)) + await sts.delete() + await bot.send_message(message.chat.id, f"Bʀᴏᴀᴅᴄᴀsᴛ Coᴍᴩʟᴇᴛᴇᴅ:\nTɪᴍᴇ Tᴀᴋᴇᴅ{time_taken} Sᴇᴄ\n\nTᴏᴛᴀʟ Uꜱᴇʀꜱ: {total_users}\nCᴏᴍᴩʟᴇᴛᴇᴅ: {done} / {total_users}\nSucᴄᴇꜱꜱ: {success}\nBʟᴏᴄᴋᴇᴅ: {blocked}\nDᴇʟᴇᴛᴇᴅ: {deleted}") + + +@Client.on_message(filters.command("clear_junk") & filters.user(ADMINS)) +async def remove_junkuser__db(bot, message): + users = await db.get_all_users() + b_msg = message + sts = await message.reply_text('IN PROGRESS.......') + start_time = time.time() + total_users = await db.total_users_count() + blocked = 0 + deleted = 0 + failed = 0 + done = 0 + async for user in users: + pti, sh = await clear_junk(int(user['id']), b_msg) + if pti == False: + if sh == "Blocked": + blocked+=1 + elif sh == "Deleted": + deleted += 1 + elif sh == "Error": + failed += 1 + done += 1 + if not done % 20: + await sts.edit(f"In Progress:\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nBlocked: {blocked}\nDeleted: {deleted}") + time_taken = datetime.timedelta(seconds=int(time.time()-start_time)) + await sts.delete() + await bot.send_message(message.chat.id, f"Completed:\nCompleted in {time_taken} seconds.\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nBlocked: {blocked}\nDeleted: {deleted}") + + +@Client.on_message(filters.command("group_broadcast") & filters.user(ADMINS) & filters.reply) +async def broadcast_group(bot, message): + groups = await db.get_all_chats() + b_msg = message.reply_to_message + sts = await message.reply_text(text='Broadcasting your messages To Groups...') + start_time = time.time() + total_groups = await db.total_chat_count() + done = 0 + failed = "" + success = 0 + deleted = 0 + async for group in groups: + pti, sh, ex = await broadcast_messages_group(int(group['id']), b_msg) + if pti == True: + if sh == "Succes": + success += 1 + elif pti == False: + if sh == "deleted": + deleted+=1 + failed += ex + try: + await bot.leave_chat(int(group['id'])) + except Exception as e: + print(f"{e} > {group['id']}") + done += 1 + if not done % 20: + await sts.edit(f"Broadcast in progress:\n\nTotal Groups {total_groups}\nCompleted: {done} / {total_groups}\nSuccess: {success}\nDeleted: {deleted}") + time_taken = datetime.timedelta(seconds=int(time.time()-start_time)) + await sts.delete() + try: + await message.reply_text(f"Broadcast Completed:\nCompleted in {time_taken} seconds.\n\nTotal Groups {total_groups}\nCompleted: {done} / {total_groups}\nSuccess: {success}\nDeleted: {deleted}\n\nFiled Reson:- {failed}") + except MessageTooLong: + with open('reason.txt', 'w+') as outfile: + outfile.write(failed) + await message.reply_document('reason.txt', caption=f"Completed:\nCompleted in {time_taken} seconds.\n\nTotal Groups {total_groups}\nCompleted: {done} / {total_groups}\nSuccess: {success}\nDeleted: {deleted}") + os.remove("reason.txt") + + +@Client.on_message(filters.command(["junk_group", "clear_junk_group"]) & filters.user(ADMINS)) +async def junk_clear_group(bot, message): + groups = await db.get_all_chats() + b_msg = message + sts = await message.reply_text(text='..............') + start_time = time.time() + total_groups = await db.total_chat_count() + done = 0 + failed = "" + deleted = 0 + async for group in groups: + pti, sh, ex = await junk_group(int(group['id']), b_msg) + if pti == False: + if sh == "deleted": + deleted+=1 + failed += ex + try: + await bot.leave_chat(int(group['id'])) + except Exception as e: + print(f"{e} > {group['id']}") + done += 1 + if not done % 20: + await sts.edit(f"in progress:\n\nTotal Groups {total_groups}\nCompleted: {done} / {total_groups}\nDeleted: {deleted}") + time_taken = datetime.timedelta(seconds=int(time.time()-start_time)) + await sts.delete() + try: + await bot.send_message(message.chat.id, f"Completed:\nCompleted in {time_taken} seconds.\n\nTotal Groups {total_groups}\nCompleted: {done} / {total_groups}\nDeleted: {deleted}\n\nFiled Reson:- {failed}") + except MessageTooLong: + with open('junk.txt', 'w+') as outfile: + outfile.write(failed) + await message.reply_document('junk.txt', caption=f"Completed:\nCompleted in {time_taken} seconds.\n\nTotal Groups {total_groups}\nCompleted: {done} / {total_groups}\nDeleted: {deleted}") + os.remove("junk.txt") + +async def broadcast_messages_group(chat_id, message): + try: + await message.copy(chat_id=chat_id) + return True, "Succes", 'mm' + except FloodWait as e: + await asyncio.sleep(e.value) + return await broadcast_messages_group(chat_id, message) + except Exception as e: + await db.delete_chat(int(chat_id)) + logging.info(f"{chat_id} - PeerIdInvalid") + return False, "deleted", f'{e}\n\n' + +async def junk_group(chat_id, message): + try: + kk = await message.copy(chat_id=chat_id) + await kk.delete(True) + return True, "Succes", 'mm' + except FloodWait as e: + await asyncio.sleep(e.value) + return await junk_group(chat_id, message) + except Exception as e: + await db.delete_chat(int(chat_id)) + logging.info(f"{chat_id} - PeerIdInvalid") + return False, "deleted", f'{e}\n\n' + + +async def clear_junk(user_id, message): + try: + key = await message.copy(chat_id=user_id) + await key.delete(True) + return True, "Success" + except FloodWait as e: + await asyncio.sleep(e.value) + return await clear_junk(user_id, message) + except InputUserDeactivated: + await db.delete_user(int(user_id)) + logging.info(f"{user_id}-Removed from Database, since deleted account.") + return False, "Deleted" + except UserIsBlocked: + logging.info(f"{user_id} -Blocked the bot.") + return False, "Blocked" + except PeerIdInvalid: + await db.delete_user(int(user_id)) + logging.info(f"{user_id} - PeerIdInvalid") + return False, "Error" + except Exception as e: + return False, "Error" + + + +async def broadcast_messages(user_id, message): + try: + await message.copy(chat_id=user_id) + return True, "Success" + except FloodWait as e: + await asyncio.sleep(e.value) + return await broadcast_messages(user_id, message) + except InputUserDeactivated: + await db.delete_user(int(user_id)) + logging.info(f"{user_id}-Removed from Database, since deleted account.") + return False, "Deleted" + except UserIsBlocked: + logging.info(f"{user_id} -Blocked the bot.") + return False, "Blocked" + except PeerIdInvalid: + await db.delete_user(int(user_id)) + logging.info(f"{user_id} - PeerIdInvalid") + return False, "Error" + except Exception as e: + return False, "Error" + + + + + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\commands.py +import os, re, json, base64, logging, random, asyncio + +from Script import script +from database.users_chats_db import db +from pyrogram import Client, filters, enums +from pyrogram.errors import ChatAdminRequired, FloodWait +from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup +from database.ia_filterdb import Media, get_file_details, unpack_new_file_id +from info import CHANNELS, ADMINS, AUTH_CHANNEL, LOG_CHANNEL, PICS, BATCH_FILE_CAPTION, CUSTOM_FILE_CAPTION, PROTECT_CONTENT, START_MESSAGE, FORCE_SUB_TEXT, SUPPORT_CHAT +from utils import get_settings, get_size, is_subscribed, save_group_settings, temp +from database.connections_mdb import active_connection + +logger = logging.getLogger(__name__) +BATCH_FILES = {} + +@Client.on_message(filters.command("start") & filters.incoming) +async def start(client, message): + if message.chat.type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + buttons = [[ + InlineKeyboardButton('📢 Uᴩᴅᴀᴛᴇꜱ 📢', url=f'https://t.me/{SUPPORT_CHAT}') + ],[ + InlineKeyboardButton('ℹ️ Hᴇʟᴩ ℹ️', url=f"https://t.me/{temp.U_NAME}?start=help") + ]] + await message.reply(START_MESSAGE.format(user=message.from_user.mention if message.from_user else message.chat.title, bot=client.mention), reply_markup=InlineKeyboardMarkup(buttons), disable_web_page_preview=True) + await asyncio.sleep(2) + if not await db.get_chat(message.chat.id): + total = await client.get_chat_members_count(message.chat.id) + await client.send_message(LOG_CHANNEL, script.LOG_TEXT_G.format(a=message.chat.title, b=message.chat.id, c=message.chat.username, d=total, f=client.mention, e="Unknown")) + await db.add_chat(message.chat.id, message.chat.title, message.chat.username) + return + if not await db.is_user_exist(message.from_user.id): + await db.add_user(message.from_user.id, message.from_user.first_name) + await client.send_message(LOG_CHANNEL, script.LOG_TEXT_P.format(message.from_user.id, message.from_user.mention, message.from_user.username, temp.U_NAME)) + if len(message.command) != 2: + buttons = [[ + InlineKeyboardButton("➕️ Aᴅᴅ Mᴇ Tᴏ Yᴏᴜʀ Cʜᴀᴛ ➕", url=f"http://t.me/{temp.U_NAME}?startgroup=true") + ],[ + InlineKeyboardButton("Sᴇᴀʀᴄʜ 🔎", switch_inline_query_current_chat=''), + InlineKeyboardButton("Cʜᴀɴɴᴇʟ 🔈", url="https://t.me/mkn_bots_updates") + ],[ + InlineKeyboardButton("Hᴇʟᴩ 🕸️", callback_data="help"), + InlineKeyboardButton("Aʙᴏᴜᴛ ✨", callback_data="about") + ]] + m = await message.reply_sticker("CAACAgUAAxkBAAEBvlVk7YKnYxIHVnKW2PUwoibIR2ygGAACBAADwSQxMYnlHW4Ls8gQHgQ") + await asyncio.sleep(2) + await message.reply_photo(photo=random.choice(PICS), caption=START_MESSAGE.format(user=message.from_user.mention, bot=client.mention), reply_markup=InlineKeyboardMarkup(buttons), parse_mode=enums.ParseMode.HTML) + return await m.delete() + + if AUTH_CHANNEL and not await is_subscribed(client, message): + try: + invite_link = await client.create_chat_invite_link(int(AUTH_CHANNEL)) + except ChatAdminRequired: + logger.error("MAKE SURE BOT IS ADMIN IN FORCESUB CHANNEL") + return + btn = [[InlineKeyboardButton("Jᴏɪɴ Mʏ Cʜᴀɴɴᴇʟ ✨", url=invite_link.invite_link)]] + if message.command[1] != "subscribe": + try: + kk, file_id = message.command[1].split("_", 1) + pre = 'checksubp' if kk == 'filep' else 'checksub' + btn.append([InlineKeyboardButton("⟳ Tʀʏ Aɢᴀɪɴ", callback_data=f"{pre}#{file_id}")]) + except (IndexError, ValueError): + btn.append([InlineKeyboardButton("⟳ Tʀʏ Aɢᴀɪɴ", url=f"https://t.me/{temp.U_NAME}?start={message.command[1]}")]) + + try: + return await client.send_message(chat_id=message.from_user.id, text=FORCE_SUB_TEXT, reply_markup=InlineKeyboardMarkup(btn), parse_mode=enums.ParseMode.DEFAULT) + except Exception as e: + print(f"Force Sub Text Error\n{e}") + return await client.send_message(chat_id=message.from_user.id, text=script.FORCE_SUB_TEXT, reply_markup=InlineKeyboardMarkup(btn), parse_mode=enums.ParseMode.DEFAULT) + + if len(message.command) == 2 and message.command[1] in ["subscribe", "error", "okay", "help"]: + buttons = [[ + InlineKeyboardButton("➕️ Aᴅᴅ Mᴇ Tᴏ Yᴏᴜʀ Cʜᴀᴛ ➕", url=f"http://t.me/{temp.U_NAME}?startgroup=true") + ],[ + InlineKeyboardButton("Sᴇᴀʀᴄʜ 🔎", switch_inline_query_current_chat=''), + InlineKeyboardButton("Cʜᴀɴɴᴇʟ 🔈", url="https://t.me/mkn_bots_updates") + ],[ + InlineKeyboardButton("Hᴇʟᴩ 🕸️", callback_data="help"), + InlineKeyboardButton("Aʙᴏᴜᴛ ✨", callback_data="about") + ]] + m = await message.reply_sticker("CAACAgUAAxkBAAEBvlVk7YKnYxIHVnKW2PUwoibIR2ygGAACBAADwSQxMYnlHW4Ls8gQHgQ") + await asyncio.sleep(2) + await message.reply_photo(photo=random.choice(PICS), caption=START_MESSAGE.format(user=message.from_user.mention, bot=client.mention), reply_markup=InlineKeyboardMarkup(buttons), parse_mode=enums.ParseMode.HTML) + return await m.delete() + + data = message.command[1] + try: + pre, file_id = data.split('_', 1) + except: + file_id = data + pre = "" + + if data.split("-", 1)[0] == "BATCH": + sts = await message.reply("PLEASE WAIT......") + file_id = data.split("-", 1)[1] + msgs = BATCH_FILES.get(file_id) + if not msgs: + file = await client.download_media(file_id) + try: + with open(file) as file_data: + msgs=json.loads(file_data.read()) + except: + await sts.edit("FAILED") + return await client.send_message(LOG_CHANNEL, "UNABLE TO OPEN FILE.") + os.remove(file) + BATCH_FILES[file_id] = msgs + for msg in msgs: + title = msg.get("title") + size=get_size(int(msg.get("size", 0))) + f_caption=msg.get("caption", "") + if BATCH_FILE_CAPTION: + try: + f_caption=BATCH_FILE_CAPTION.format(mention=message.from_user.mention, file_name= '' if title is None else title, file_size='' if size is None else size, file_caption='' if f_caption is None else f_caption) + except Exception as e: + logger.exception(e) + f_caption=f_caption + if f_caption is None: + f_caption = f"{title}" + try: + await client.send_cached_media(chat_id=message.from_user.id, file_id=msg.get("file_id"), caption=f_caption, protect_content=msg.get('protect', False)) + except FloodWait as e: + await asyncio.sleep(e.value) + await client.send_cached_media(chat_id=message.from_user.id, file_id=msg.get("file_id"), caption=f_caption, protect_content=msg.get('protect', False)) + except Exception as e: + logger.warning(e, exc_info=True) + continue + await asyncio.sleep(1) + return await sts.delete() + + elif data.split("-", 1)[0] == "DSTORE": + sts = await message.reply("PLEASE WAIT....") + b_string = data.split("-", 1)[1] + decoded = (base64.urlsafe_b64decode(b_string + "=" * (-len(b_string) % 4))).decode("ascii") + try: + f_msg_id, l_msg_id, f_chat_id, protect = decoded.split("_", 3) + except: + f_msg_id, l_msg_id, f_chat_id = decoded.split("_", 2) + protect = "/pbatch" if PROTECT_CONTENT else "batch" + diff = int(l_msg_id) - int(f_msg_id) + async for msg in client.iter_messages(int(f_chat_id), int(l_msg_id), int(f_msg_id)): + if msg.media: + media = getattr(msg, msg.media) + if BATCH_FILE_CAPTION: + try: + f_caption=BATCH_FILE_CAPTION.format(mention=message.from_user.mention, file_name=getattr(media, 'file_name', ''), file_size=getattr(media, 'file_size', ''), file_caption=getattr(msg, 'caption', '')) + except Exception as e: + logger.exception(e) + f_caption = getattr(msg, 'caption', '') + else: + media = getattr(msg, msg.media) + file_name = getattr(media, 'file_name', '') + f_caption = getattr(msg, 'caption', file_name) + try: + await msg.copy(message.chat.id, caption=f_caption, protect_content=True if protect == "/pbatch" else False) + except FloodWait as e: + await asyncio.sleep(e.value) + await msg.copy(message.chat.id, caption=f_caption, protect_content=True if protect == "/pbatch" else False) + except Exception as e: + logger.exception(e) + continue + elif msg.empty: + continue + else: + try: + await msg.copy(message.chat.id, protect_content=True if protect == "/pbatch" else False) + except FloodWait as e: + await asyncio.sleep(e.value) + await msg.copy(message.chat.id, protect_content=True if protect == "/pbatch" else False) + except Exception as e: + logger.exception(e) + continue + await asyncio.sleep(1) + return await sts.delete() + + + files_ = await get_file_details(file_id) + if not files_: + pre, file_id = ((base64.urlsafe_b64decode(data + "=" * (-len(data) % 4))).decode("ascii")).split("_", 1) + try: + msg = await client.send_cached_media(chat_id=message.from_user.id, file_id=file_id, protect_content=True if pre == 'filep' else False,) + filetype = msg.media + file = getattr(msg, filetype) + title = file.file_name + size=get_size(file.file_size) + f_caption = f"{title}" + if CUSTOM_FILE_CAPTION: + try: f_caption=CUSTOM_FILE_CAPTION.format(mention=message.from_user.mention, file_name= '' if title is None else title, file_size='' if size is None else size, file_caption='') + except: return + return await msg.edit_caption(f_caption) + except: pass + return await message.reply('NO SUCH FILE EXIST...') + + files = files_[0] + title = files.file_name + size=get_size(files.file_size) + f_caption=files.caption + if CUSTOM_FILE_CAPTION: + try: + f_caption=CUSTOM_FILE_CAPTION.format(mention=message.from_user.mention, file_name= '' if title is None else title, file_size='' if size is None else size, file_caption='' if f_caption is None else f_caption) + except Exception as e: + logger.exception(e) + f_caption=f_caption + if f_caption is None: + f_caption = f"{files.file_name}" + await client.send_cached_media(chat_id=message.from_user.id, file_id=file_id, caption=f_caption, protect_content=True if pre == 'filep' else False,) + + + +@Client.on_message(filters.command('channel') & filters.user(ADMINS)) +async def channel_info(bot, message): + if isinstance(CHANNELS, (int, str)): channels = [CHANNELS] + elif isinstance(CHANNELS, list): channels = CHANNELS + else: raise ValueError("Unexpected Type Of CHANNELS") + text = '📑 **Indexed channels/groups**\n' + for channel in channels: + chat = await bot.get_chat(channel) + if chat.username: text += '\n@' + chat.username + else: text += '\n' + chat.title or chat.first_name + text += f'\n\n**Total:** {len(CHANNELS)}' + if len(text) < 4096: await message.reply(text) + else: + file = 'Indexed channels.txt' + with open(file, 'w') as f: + f.write(text) + await message.reply_document(file) + os.remove(file) + + +@Client.on_message(filters.command('delete') & filters.user(ADMINS)) +async def delete(bot, message): + reply = message.reply_to_message + if reply and reply.media: msg = await message.reply("Processing...⏳", quote=True) + else: return await message.reply('Reply to file with /delete which you want to delete', quote=True) + for file_type in ("document", "video", "audio"): + media = getattr(reply, file_type, None) + if media is not None: break + else: return await msg.edit('This Is Not Supported File Format') + file_id, file_ref = unpack_new_file_id(media.file_id) + result = await Media.collection.delete_one({'_id': file_id}) + if result.deleted_count: await msg.edit('File Is Successfully Deleted From Database') + else: + file_name = re.sub(r"(_|\-|\.|\+)", " ", str(media.file_name)) + result = await Media.collection.delete_many({ + 'file_name': file_name, + 'file_size': media.file_size, + 'mime_type': media.mime_type + }) + if result.deleted_count: await msg.edit('File Is Successfully Deleted From Database') + else: + result = await Media.collection.delete_many({ + 'file_name': media.file_name, + 'file_size': media.file_size, + 'mime_type': media.mime_type + }) + if result.deleted_count: await msg.edit('File Is Successfully Deleted From Database') + else: await msg.edit('File Not Found In Database') + + +@Client.on_message(filters.command('deleteall') & filters.user(ADMINS)) +async def delete_all_index(bot, message): + button = [[ + InlineKeyboardButton("YES", callback_data="autofilter_delete") + ],[ + InlineKeyboardButton("CANCEL", callback_data="close_data") + ]] + await message.reply_text('This Will Delete All Indexed Files.\ndo You Want To Continue??', quote=True, reply_markup=InlineKeyboardMarkup(button)) + + +@Client.on_callback_query(filters.regex(r'^autofilter_delete')) +async def delete_all_index_confirm(bot, message): + await Media.collection.drop() + await message.message.edit('Succesfully Deleted All The Indexed Files.') + + +@Client.on_message(filters.command('settings')) +async def settings(client, message): + userid = message.from_user.id if message.from_user else None + if not userid: return await message.reply(f"Yᴏᴜ Aʀᴇ Aɴᴏɴʏᴍᴏᴜs Aᴅᴍɪɴ. Usᴇ /connect {message.chat.id} Iɴ PM") + chat_type = message.chat.type + if chat_type == enums.ChatType.PRIVATE: + grpid = await active_connection(str(userid)) + if grpid is not None: + grp_id = grpid + try: + chat = await client.get_chat(grpid) + title = chat.title + except: + return await message.reply_text("Mᴀᴋᴇ Sᴜʀᴇ I'ᴍ Pʀᴇsᴇɴᴛ Iɴ Yᴏᴜʀ Gʀᴏᴜᴘ!!", quote=True) + else: return await message.reply_text("I'ᴍ Nᴏᴛ Cᴏɴɴᴇᴄᴛᴇᴅ Tᴏ Aɴʏ Gʀᴏᴜᴘs!", quote=True) + + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + grp_id = message.chat.id + title = message.chat.title + else: return + + st = await client.get_chat_member(grp_id, userid) + if ( + st.status != enums.ChatMemberStatus.ADMINISTRATOR + and st.status != enums.ChatMemberStatus.OWNER + and str(userid) not in ADMINS + ): return + + settings = await get_settings(grp_id) + if settings is not None: + buttons = [[ + InlineKeyboardButton(f"ꜰɪʟᴛᴇʀ ʙᴜᴛᴛᴏɴ : {'sɪɴɢʟᴇ' if settings['button'] else 'ᴅᴏᴜʙʟᴇ'}", f'setgs#button#{settings["button"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ꜰɪʟᴇ ɪɴ ᴩᴍ ꜱᴛᴀʀᴛ: {'ᴏɴ' if settings['botpm'] else 'ᴏꜰꜰ'}", f'setgs#botpm#{settings["botpm"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ʀᴇꜱᴛʀɪᴄᴛ ᴄᴏɴᴛᴇɴᴛ : {'ᴏɴ' if settings['file_secure'] else 'ᴏꜰꜰ'}", f'setgs#file_secure#{settings["file_secure"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ɪᴍᴅʙ ɪɴ ꜰɪʟᴛᴇʀ : {'ᴏɴ' if settings['imdb'] else 'ᴏꜰꜰ'}", f'setgs#imdb#{settings["imdb"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ꜱᴩᴇʟʟɪɴɢ ᴄʜᴇᴄᴋ : {'ᴏɴ' if settings['spell_check'] else 'ᴏꜰꜰ'}", f'setgs#spell_check#{settings["spell_check"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ᴡᴇʟᴄᴏᴍᴇ ᴍᴇꜱꜱᴀɢᴇ : {'ᴏɴ' if settings['welcome'] else 'ᴏꜰꜰ'}", f'setgs#welcome#{settings["welcome"]}#{str(grp_id)}') + ]] + await message.reply_text( + text=f"Cʜᴀɴɢᴇ Yᴏᴜʀ Sᴇᴛᴛɪɴɢꜱ Fᴏʀ {title} Aꜱ Yᴏᴜʀ Wɪꜱʜ ⚙", + reply_markup=InlineKeyboardMarkup(buttons), + quote=True, + disable_web_page_preview=True, + parse_mode=enums.ParseMode.HTML, + ) + + + +@Client.on_message(filters.command('set_template')) +async def save_template(client, message): + sts = await message.reply("Cʜᴇᴄᴋɪɴɢ Tᴇᴍᴘʟᴀᴛᴇ") + userid = message.from_user.id if message.from_user else None + if not userid: return await message.reply(f"Yᴏᴜ Aʀᴇ Aɴᴏɴʏᴍᴏᴜs Aᴅᴍɪɴ. Usᴇ /connect {message.chat.id} Iɴ PM") + chat_type = message.chat.type + if chat_type == enums.ChatType.PRIVATE: + grpid = await active_connection(str(userid)) + if grpid is not None: + grp_id = grpid + try: + chat = await client.get_chat(grpid) + title = chat.title + except: + return await message.reply_text("Mᴀᴋᴇ Sᴜʀᴇ I'ᴍ Pʀᴇsᴇɴᴛ Iɴ Yᴏᴜʀ Gʀᴏᴜᴘ !!", quote=True) + else: + return await message.reply_text("I'ᴍ Nᴏᴛ Cᴏɴɴᴇᴄᴛᴇᴅ Tᴏ Aɴʏ Gʀᴏᴜᴘs!", quote=True) + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + grp_id = message.chat.id + title = message.chat.title + else: return + st = await client.get_chat_member(grp_id, userid) + if ( + st.status != enums.ChatMemberStatus.ADMINISTRATOR + and st.status != enums.ChatMemberStatus.OWNER + and str(userid) not in ADMINS + ): return + if len(message.command) < 2: return await sts.edit("No Iɴᴩᴜᴛ!!") + template = message.text.split(" ", 1)[1] + await save_group_settings(grp_id, 'template', template) + await sts.edit(f"Sᴜᴄᴄᴇssғᴜʟʟʏ Cʜᴀɴɢᴇᴅ Tᴇᴍᴘʟᴀᴛᴇ Fᴏʀ {title} Tᴏ\n\n{template}") + + +@Client.on_message(filters.command('get_template')) +async def geg_template(client, message): + sts = await message.reply("Cʜᴇᴄᴋɪɴɢ Tᴇᴍᴘʟᴀᴛᴇ") + userid = message.from_user.id if message.from_user else None + if not userid: return await message.reply(f"Yᴏᴜ Aʀᴇ Aɴᴏɴʏᴍᴏᴜs Aᴅᴍɪɴ. Usᴇ /connect {message.chat.id} Iɴ PM") + chat_type = message.chat.type + if chat_type == enums.ChatType.PRIVATE: + grpid = await active_connection(str(userid)) + if grpid is not None: + grp_id = grpid + try: + chat = await client.get_chat(grpid) + title = chat.title + except: + return await message.reply_text("Mᴀᴋᴇ Sᴜʀᴇ I'ᴍ Pʀᴇsᴇɴᴛ Iɴ Yᴏᴜʀ Gʀᴏᴜᴘ !!", quote=True) + else: + return await message.reply_text("I'ᴍ Nᴏᴛ Cᴏɴɴᴇᴄᴛᴇᴅ Tᴏ Aɴʏ Gʀᴏᴜᴘs!", quote=True) + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + grp_id = message.chat.id + title = message.chat.title + else: return + st = await client.get_chat_member(grp_id, userid) + if ( + st.status != enums.ChatMemberStatus.ADMINISTRATOR + and st.status != enums.ChatMemberStatus.OWNER + and str(userid) not in ADMINS + ): return + settings = await get_settings(grp_id) + template = settings['template'] + await sts.edit(f"Cᴜʀʀᴇɴᴛ Tᴇᴍᴘʟᴀᴛᴇ Fᴏʀ {title} Iꜱ\n\n{template}") + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\connection.py +from pyrogram import filters, Client, enums +from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup +from database.connections_mdb import add_connection, all_connections, if_active, delete_connection +from info import ADMINS +import logging + +logger = logging.getLogger(__name__) +logger.setLevel(logging.ERROR) + + +@Client.on_message((filters.private | filters.group) & filters.command('connect')) +async def addconnection(client, message): + userid = message.from_user.id if message.from_user else None + if not userid: + return await message.reply(f"You are anonymous admin. Use /connect {message.chat.id} in PM") + chat_type = message.chat.type + + if chat_type == enums.ChatType.PRIVATE: + try: + cmd, group_id = message.text.split(" ", 1) + except: + await message.reply_text( + "Enter in correct format!\n\n" + "/connect groupid\n\n" + "Get your Group id by adding this bot to your group and use /id", + quote=True + ) + return + + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + group_id = message.chat.id + + try: + st = await client.get_chat_member(group_id, userid) + if ( + st.status != enums.ChatMemberStatus.ADMINISTRATOR + and st.status != enums.ChatMemberStatus.OWNER + and userid not in ADMINS + ): + return await message.reply_text("You should be an admin in Given group!", quote=True) + except Exception as e: + logger.exception(e) + return await message.reply_text("Invalid Group ID!\n\nIf correct, Make sure I'm present in your group!!", quote=True,) + try: + st = await client.get_chat_member(group_id, "me") + if st.status == enums.ChatMemberStatus.ADMINISTRATOR: + ttl = await client.get_chat(group_id) + title = ttl.title + + addcon = await add_connection(str(group_id), str(userid)) + if addcon: + await message.reply_text( + f"Successfully connected to **{title}**\nNow manage your group from my pm !", + quote=True, + parse_mode=enums.ParseMode.MARKDOWN + ) + if chat_type in ["group", "supergroup"]: + await client.send_message( + userid, + f"Connected to **{title}** !", + parse_mode=enums.ParseMode.MARKDOWN + ) + else: + await message.reply_text("You're already connected to this chat!", quote=True) + else: + await message.reply_text("Add me as an admin in group", quote=True) + except Exception as e: + logger.exception(e) + return await message.reply_text('Some error occurred! Try again later.', quote=True) + + +@Client.on_message((filters.private | filters.group) & filters.command('disconnect')) +async def deleteconnection(client, message): + userid = message.from_user.id if message.from_user else None + if not userid: + return await message.reply(f"You are anonymous admin. Use /connect {message.chat.id} in PM") + chat_type = message.chat.type + if chat_type == enums.ChatType.PRIVATE: + await message.reply_text("Run /connections to view or disconnect from groups!", quote=True) + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + group_id = message.chat.id + + st = await client.get_chat_member(group_id, userid) + if ( + st.status != enums.ChatMemberStatus.ADMINISTRATOR + and st.status != enums.ChatMemberStatus.OWNER + and str(userid) not in ADMINS + ): + return + + delcon = await delete_connection(str(userid), str(group_id)) + if delcon: + await message.reply_text("Successfully disconnected from this chat", quote=True) + else: + await message.reply_text("This chat isn't connected to me!\nDo /connect to connect.", quote=True) + + +@Client.on_message(filters.private & filters.command(["connections"])) +async def connections(client, message): + userid = message.from_user.id + groupids = await all_connections(str(userid)) + if groupids is None: + return await message.reply_text("There are no active connections!! Connect to some groups first.", quote=True) + buttons = [] + for groupid in groupids: + try: + ttl = await client.get_chat(int(groupid)) + title = ttl.title + active = await if_active(str(userid), str(groupid)) + act = " - ACTIVE" if active else "" + buttons.append([InlineKeyboardButton(f"{title}{act}", callback_data=f"groupcb:{groupid}:{act}")]) + except: + pass + if buttons: + await message.reply_text("Your connected group details ;\n\n", reply_markup=InlineKeyboardMarkup(buttons), quote=True) + else: + await message.reply_text("There are no active connections!! Connect to some groups first.", quote=True) + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\file_store.py +import re, os, json, base64, logging +from pyrogram import filters, Client, enums +from pyrogram.errors.exceptions.bad_request_400 import ChannelInvalid, UsernameInvalid, UsernameNotModified +from info import ADMINS, LOG_CHANNEL, FILE_STORE_CHANNEL, PUBLIC_FILE_STORE +from database.ia_filterdb import unpack_new_file_id +from utils import temp + +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + +async def allowed(_, __, message): + if PUBLIC_FILE_STORE: + return True + if message.from_user and message.from_user.id in ADMINS: + return True + return False + +@Client.on_message(filters.command(['link', 'plink']) & filters.create(allowed)) +async def gen_link_s(bot, message): + replied = message.reply_to_message + if not replied: + return await message.reply('Reply to a message to get a shareable link.') + file_type = replied.media + if file_type not in [enums.MessageMediaType.VIDEO, enums.MessageMediaType.AUDIO, enums.MessageMediaType.DOCUMENT]: + return await message.reply("Reply to a supported media") + if message.has_protected_content and message.chat.id not in ADMINS: + return await message.reply("okDa") + file_id, ref = unpack_new_file_id((getattr(replied, file_type.value)).file_id) + string = 'filep_' if message.text.lower().strip() == "/plink" else 'file_' + string += file_id + outstr = base64.urlsafe_b64encode(string.encode("ascii")).decode().strip("=") + await message.reply(f"Here is your Link:\nhttps://t.me/{temp.U_NAME}?start={outstr}") + + +@Client.on_message(filters.command(['batch', 'pbatch']) & filters.create(allowed)) +async def gen_link_batch(bot, message): + if " " not in message.text: + return await message.reply("Use correct format.\nExample /batch https://t.me/TeamEvamaria/10 https://t.me/TeamEvamaria/20.") + links = message.text.strip().split(" ") + if len(links) != 3: + return await message.reply("Use correct format.\nExample /batch https://t.me/TeamEvamaria/10 https://t.me/TeamEvamaria/20.") + cmd, first, last = links + regex = re.compile("(https://)?(t\.me/|telegram\.me/|telegram\.dog/)(c/)?(\d+|[a-zA-Z_0-9]+)/(\d+)$") + match = regex.match(first) + if not match: + return await message.reply('Invalid link') + f_chat_id = match.group(4) + f_msg_id = int(match.group(5)) + if f_chat_id.isnumeric(): + f_chat_id = int(("-100" + f_chat_id)) + + match = regex.match(last) + if not match: + return await message.reply('Invalid link') + l_chat_id = match.group(4) + l_msg_id = int(match.group(5)) + if l_chat_id.isnumeric(): + l_chat_id = int(("-100" + l_chat_id)) + + if f_chat_id != l_chat_id: + return await message.reply("Chat ids not matched.") + try: + chat_id = (await bot.get_chat(f_chat_id)).id + except ChannelInvalid: + return await message.reply('This may be a private channel / group. Make me an admin over there to index the files.') + except (UsernameInvalid, UsernameNotModified): + return await message.reply('Invalid Link specified.') + except Exception as e: + return await message.reply(f'Errors - {e}') + + sts = await message.reply("Generating link for your message.\nThis may take time depending upon number of messages") + if chat_id in FILE_STORE_CHANNEL: + string = f"{f_msg_id}_{l_msg_id}_{chat_id}_{cmd.lower().strip()}" + b_64 = base64.urlsafe_b64encode(string.encode("ascii")).decode().strip("=") + return await sts.edit(f"Here is your link https://t.me/{temp.U_NAME}?start=DSTORE-{b_64}") + + FRMT = "Generating Link...\nTotal Messages: `{total}`\nDone: `{current}`\nRemaining: `{rem}`\nStatus: `{sts}`" + + outlist = [] + + # file store without db channel + og_msg = 0 + tot = 0 + async for msg in bot.iter_messages(f_chat_id, l_msg_id, f_msg_id): + tot += 1 + if msg.empty or msg.service: + continue + if not msg.media: + # only media messages supported. + continue + try: + file_type = msg.media + file = getattr(msg, file_type.value) + caption = getattr(msg, 'caption', '') + if caption: + caption = caption.html + if file: + file = { + "file_id": file.file_id, + "caption": caption, + "title": getattr(file, "file_name", ""), + "size": file.file_size, + "protect": cmd.lower().strip() == "/pbatch", + } + + og_msg +=1 + outlist.append(file) + except: + pass + if not og_msg % 20: + try: + await sts.edit(FRMT.format(total=l_msg_id-f_msg_id, current=tot, rem=((l_msg_id-f_msg_id) - tot), sts="Saving Messages")) + except: + pass + with open(f"batchmode_{message.from_user.id}.json", "w+") as out: + json.dump(outlist, out) + post = await bot.send_document(LOG_CHANNEL, f"batchmode_{message.from_user.id}.json", file_name="Batch.json", caption="⚠️Generated for filestore.") + os.remove(f"batchmode_{message.from_user.id}.json") + file_id, ref = unpack_new_file_id(post.document.file_id) + await sts.edit(f"Here is your link\nContains `{og_msg}` files.\n https://t.me/{temp.U_NAME}?start=BATCH-{file_id}") + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\filters_global.py +import io +from pyrogram import filters, Client, enums +from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup + +from database.filters_mdb import add_filter, get_filters, delete_filter, count_filters +from database.gfilters_mdb import add_gfilter, get_gfilters, delete_gfilter, count_gfilters, del_allg +from database.connections_mdb import active_connection +from utils import get_file_id, parser, split_quotes +from info import ADMINS + + + +@Client.on_message(filters.command(['filter', 'add']) & filters.incoming) +async def addfilter(client, message): + userid = message.from_user.id if message.from_user else None + if not userid: + return await message.reply(f"You are anonymous admin. Use /connect {message.chat.id} in PM") + chat_type = message.chat.type + args = message.text.html.split(None, 1) + + if chat_type == enums.ChatType.PRIVATE: + grpid = await active_connection(str(userid)) + if grpid is not None: + grp_id = grpid + try: + chat = await client.get_chat(grpid) + title = chat.title + except: + await message.reply_text("Make sure I'm present in your group!!", quote=True) + return + else: + await message.reply_text("I'm not connected to any groups!", quote=True) + return + + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + grp_id = message.chat.id + title = message.chat.title + + else: + return + + st = await client.get_chat_member(grp_id, userid) + if ( + st.status != enums.ChatMemberStatus.ADMINISTRATOR + and st.status != enums.ChatMemberStatus.OWNER + and str(userid) not in ADMINS + ): + return + + + if len(args) < 2: + await message.reply_text("Command Incomplete :(", quote=True) + return + + extracted = split_quotes(args[1]) + text = extracted[0].lower() + + if not message.reply_to_message and len(extracted) < 2: + await message.reply_text("Add some content to save your filter!", quote=True) + return + + if (len(extracted) >= 2) and not message.reply_to_message: + reply_text, btn, alert = parser(extracted[1], text, "alertmessage") + fileid = None + if not reply_text: + await message.reply_text("You cannot have buttons alone, give some text to go with it!", quote=True) + return + + elif message.reply_to_message and message.reply_to_message.reply_markup: + try: + rm = message.reply_to_message.reply_markup + btn = rm.inline_keyboard + msg = get_file_id(message.reply_to_message) + if msg: + fileid = msg.file_id + reply_text = message.reply_to_message.caption.html + else: + reply_text = message.reply_to_message.text.html + fileid = None + alert = None + except: + reply_text = "" + btn = "[]" + fileid = None + alert = None + + elif message.reply_to_message and message.reply_to_message.media: + try: + msg = get_file_id(message.reply_to_message) + fileid = msg.file_id if msg else None + reply_text, btn, alert = parser(extracted[1], text, "alertmessage") if message.reply_to_message.sticker else parser(message.reply_to_message.caption.html, text, "alertmessage") + except: + reply_text = "" + btn = "[]" + alert = None + elif message.reply_to_message and message.reply_to_message.text: + try: + fileid = None + reply_text, btn, alert = parser(message.reply_to_message.text.html, text, "alertmessage") + except: + reply_text = "" + btn = "[]" + alert = None + else: + return + + await add_filter(grp_id, text, reply_text, btn, fileid, alert) + + await message.reply_text( + f"Filter for `{text}` added in **{title}**", + quote=True, + parse_mode=enums.ParseMode.MARKDOWN + ) + + +@Client.on_message(filters.command(['viewfilters', 'filters']) & filters.incoming) +async def get_all(client, message): + + chat_type = message.chat.type + userid = message.from_user.id if message.from_user else None + if not userid: + return await message.reply(f"You are anonymous admin. Use /connect {message.chat.id} in PM") + if chat_type == enums.ChatType.PRIVATE: + grpid = await active_connection(str(userid)) + if grpid is not None: + grp_id = grpid + try: + chat = await client.get_chat(grpid) + title = chat.title + except: + await message.reply_text("Make sure I'm present in your group!!", quote=True) + return + else: + await message.reply_text("I'm not connected to any groups!", quote=True) + return + + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + grp_id = message.chat.id + title = message.chat.title + + else: + return + + st = await client.get_chat_member(grp_id, userid) + if ( + st.status != enums.ChatMemberStatus.ADMINISTRATOR + and st.status != enums.ChatMemberStatus.OWNER + and str(userid) not in ADMINS + ): + return + + texts = await get_filters(grp_id) + count = await count_filters(grp_id) + if count: + filterlist = f"Total number of filters in **{title}** : {count}\n\n" + + for text in texts: + keywords = " × `{}`\n".format(text) + + filterlist += keywords + + if len(filterlist) > 4096: + with io.BytesIO(str.encode(filterlist.replace("`", ""))) as keyword_file: + keyword_file.name = "keywords.txt" + await message.reply_document( + document=keyword_file, + quote=True + ) + return + else: + filterlist = f"There are no active filters in **{title}**" + + await message.reply_text( + text=filterlist, + quote=True, + parse_mode=enums.ParseMode.MARKDOWN + ) + +@Client.on_message(filters.command('del') & filters.incoming) +async def deletefilter(client, message): + userid = message.from_user.id if message.from_user else None + if not userid: + return await message.reply(f"You are anonymous admin. Use /connect {message.chat.id} in PM") + chat_type = message.chat.type + + if chat_type == enums.ChatType.PRIVATE: + grpid = await active_connection(str(userid)) + if grpid is not None: + grp_id = grpid + try: + chat = await client.get_chat(grpid) + title = chat.title + except: + await message.reply_text("Make sure I'm present in your group!!", quote=True) + return + else: + await message.reply_text("I'm not connected to any groups!", quote=True) + return + + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + grp_id = message.chat.id + title = message.chat.title + + else: + return + + st = await client.get_chat_member(grp_id, userid) + if ( + st.status != enums.ChatMemberStatus.ADMINISTRATOR + and st.status != enums.ChatMemberStatus.OWNER + and str(userid) not in ADMINS + ): + return + + try: + cmd, text = message.text.split(" ", 1) + except: + await message.reply_text( + "Mention the filtername which you wanna delete!\n\n" + "/del filtername\n\n" + "Use /viewfilters to view all available filters", + quote=True + ) + return + + query = text.lower() + + await delete_filter(message, query, grp_id) + + +@Client.on_message(filters.command('delall') & filters.incoming) +async def delallconfirm(client, message): + userid = message.from_user.id if message.from_user else None + if not userid: + return await message.reply(f"You are anonymous admin. Use /connect {message.chat.id} in PM") + chat_type = message.chat.type + + if chat_type == enums.ChatType.PRIVATE: + grpid = await active_connection(str(userid)) + if grpid is not None: + grp_id = grpid + try: + chat = await client.get_chat(grpid) + title = chat.title + except: + await message.reply_text("Make sure I'm present in your group!!", quote=True) + return + else: + await message.reply_text("I'm not connected to any groups!", quote=True) + return + + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + grp_id = message.chat.id + title = message.chat.title + + else: + return + + + st = await client.get_chat_member(grp_id, userid) + if (st.status == enums.ChatMemberStatus.OWNER) or (str(userid) in ADMINS): + await message.reply_text( + f"This will delete all filters from '{title}'.\nDo you want to continue??", + reply_markup=InlineKeyboardMarkup([ + [InlineKeyboardButton(text="YES",callback_data="delallconfirm")], + [InlineKeyboardButton(text="CANCEL",callback_data="delallcancel")] + ]), + quote=True + ) + + +# Kanged from https://github.com/KDBotz +@Client.on_message(filters.command(['gfilter', 'addg']) & filters.incoming & filters.user(ADMINS)) +async def addgfilter(client, message): + args = message.text.html.split(None, 1) + + if len(args) < 2: + await message.reply_text("Command Incomplete :(", quote=True) + return + + extracted = split_quotes(args[1]) + text = extracted[0].lower() + + if not message.reply_to_message and len(extracted) < 2: + await message.reply_text("Add some content to save your filter!", quote=True) + return + + if (len(extracted) >= 2) and not message.reply_to_message: + reply_text, btn, alert = parser(extracted[1], text, "galert") + fileid = None + if not reply_text: + await message.reply_text("You cannot have buttons alone, give some text to go with it!", quote=True) + return + + elif message.reply_to_message and message.reply_to_message.reply_markup: + try: + rm = message.reply_to_message.reply_markup + btn = rm.inline_keyboard + msg = get_file_id(message.reply_to_message) + if msg: + fileid = msg.file_id + reply_text = message.reply_to_message.caption.html + else: + reply_text = message.reply_to_message.text.html + fileid = None + alert = None + except: + reply_text = "" + btn = "[]" + fileid = None + alert = None + + elif message.reply_to_message and message.reply_to_message.media: + try: + msg = get_file_id(message.reply_to_message) + fileid = msg.file_id if msg else None + reply_text, btn, alert = parser(extracted[1], text, "galert") if message.reply_to_message.sticker else parser(message.reply_to_message.caption.html, text, "galert") + except: + reply_text = "" + btn = "[]" + alert = None + elif message.reply_to_message and message.reply_to_message.text: + try: + fileid = None + reply_text, btn, alert = parser(message.reply_to_message.text.html, text, "galert") + except: + reply_text = "" + btn = "[]" + alert = None + else: + return + + await add_gfilter('gfilters', text, reply_text, btn, fileid, alert) + + await message.reply_text( + f"GFilter for `{text}` added", + quote=True, + parse_mode=enums.ParseMode.MARKDOWN + ) + + +@Client.on_message(filters.command(['viewgfilters', 'gfilters']) & filters.incoming & filters.user(ADMINS)) +async def get_all_gfilters(client, message): + texts = await get_gfilters('gfilters') + count = await count_gfilters('gfilters') + if count: + gfilterlist = f"Total number of gfilters : {count}\n\n" + + for text in texts: + keywords = " × `{}`\n".format(text) + + gfilterlist += keywords + + if len(gfilterlist) > 4096: + with io.BytesIO(str.encode(gfilterlist.replace("`", ""))) as keyword_file: + keyword_file.name = "keywords.txt" + await message.reply_document( + document=keyword_file, + quote=True + ) + return + else: + gfilterlist = f"There are no active gfilters." + + await message.reply_text( + text=gfilterlist, + quote=True, + parse_mode=enums.ParseMode.MARKDOWN + ) + +@Client.on_message(filters.command('delg') & filters.incoming & filters.user(ADMINS)) +async def deletegfilter(client, message): + try: + cmd, text = message.text.split(" ", 1) + except: + await message.reply_text( + "Mention the gfiltername which you wanna delete!\n\n" + "/delg gfiltername\n\n" + "Use /viewgfilters to view all available gfilters", + quote=True + ) + return + + query = text.lower() + + await delete_gfilter(message, query, 'gfilters') + + +@Client.on_message(filters.command('delallg') & filters.user(ADMINS)) +async def delallgfill(client, message): + await message.reply_text( + f"Do you want to continue??", + reply_markup=InlineKeyboardMarkup([ + [InlineKeyboardButton(text="YES",callback_data="gconforme")], + [InlineKeyboardButton(text="CANCEL",callback_data="close_data")] + ]), + quote=True + ) + + +@Client.on_callback_query(filters.regex("gconforme")) +async def dellacbd(client, message): + await del_allg(message.message, 'gfilters') + return await message.reply("👍 Done") + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\group_filter.py +import asyncio, re, ast, math, logging +from pyrogram.errors.exceptions.bad_request_400 import MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty +from Script import script +from utils import get_shortlink, admin_filter +import pyrogram +from database.connections_mdb import active_connection, all_connections, delete_connection, if_active, make_active, make_inactive +from info import ADMINS, AUTH_CHANNEL, AUTH_USERS, CUSTOM_FILE_CAPTION, AUTH_GROUPS, P_TTI_SHOW_OFF, IMDB, PM_IMDB, SINGLE_BUTTON, PROTECT_CONTENT, \ + SPELL_CHECK_REPLY, IMDB_TEMPLATE, IMDB_DELET_TIME, START_MESSAGE, PMFILTER, G_FILTER, BUTTON_LOCK, BUTTON_LOCK_TEXT, SHORT_URL, SHORT_API + +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery +from pyrogram import Client, filters, enums +from pyrogram.errors import FloodWait, UserIsBlocked, MessageNotModified, PeerIdInvalid +from utils import get_size, is_subscribed, get_poster, search_gagala, temp, get_settings, save_group_settings +from database.users_chats_db import db +from database.ia_filterdb import Media, get_file_details, get_search_results +from database.filters_mdb import del_all, find_filter, get_filters +from database.gfilters_mdb import find_gfilter, get_gfilters + +logger = logging.getLogger(__name__) +logger.setLevel(logging.ERROR) + + +FILTER_MODE = {} +G_MODE = {} +SPELL_CHECK = {} + +@Client.on_message(filters.command('autofilter') & filters.group & filters.create(admin_filter)) +async def fil_mod(client, message): + mode_on = ["yes", "on", "true"] + mode_of = ["no", "off", "false"] + + try: + args = message.text.split(None, 1)[1].lower() + except: + return await message.reply("**ɪɴᴄᴏᴍᴩʟᴇᴛᴇ ᴄᴏᴍᴍᴀɴᴅ...**") + + m = await message.reply("**ꜱᴇᴛᴛɪɴɢ....**") + + if args in mode_on: + FILTER_MODE[str(message.chat.id)] = "True" + await m.edit("**ᴀᴜᴛᴏꜰɪʟᴛᴇʀ ᴇɴᴀʙʟᴇᴅ**") + + elif args in mode_of: + FILTER_MODE[str(message.chat.id)] = "False" + await m.edit("**ᴀᴜᴛᴏꜰɪʟᴛᴇʀ ᴅɪꜱᴀʙʟᴇᴅ**") + else: + await m.edit("ᴜꜱᴇ :- `/autofilter on` ᴏʀ `/autofilter off`") + + +@Client.on_message(filters.command('g_filter') & filters.group & filters.create(admin_filter)) +async def g_fil_mod(client, message): + mode_on = ["yes", "on", "true"] + mode_of = ["no", "off", "false"] + + try: + args = message.text.split(None, 1)[1].lower() + except: + return await message.reply("**ɪɴᴄᴏᴍᴩʟᴇᴛᴇ ᴄᴏᴍᴍᴀɴᴅ...**") + + m = await message.reply("**ꜱᴇᴛᴛɪɴɢ...**") + + if args in mode_on: + G_MODE[str(message.chat.id)] = "True" + await m.edit("**ɢʟᴏʙᴀʟ ꜰɪʟᴛᴇʀ ᴇɴᴀʙʟᴇᴅ**") + + elif args in mode_of: + G_MODE[str(message.chat.id)] = "False" + await m.edit("**ɢʟᴏʙᴀʟ ꜰɪʟᴛᴇʀ ᴅɪꜱᴀʙʟᴇᴅ**") + else: + await m.edit("ᴜꜱᴇ :- `/g_filter on` ᴏʀ `/g_filter off`") + + +@Client.on_callback_query(filters.create(lambda _, __, query: query.data.startswith("next"))) +async def next_page(bot, query): + ident, req, key, offset = query.data.split("_") + if int(req) not in [query.from_user.id, 0]: + return await query.answer(BUTTON_LOCK_TEXT.format(query.from_user.first_name), show_alert=True) + try: offset = int(offset) + except: offset = 0 + search = temp.GP_BUTTONS.get(key) + if not search: return await query.answer("Yᴏᴜ Aʀᴇ Usɪɴɢ Oɴᴇ Oғ Mʏ Oʟᴅ Mᴇssᴀɢᴇs, Pʟᴇᴀsᴇ Sᴇɴᴅ Tʜᴇ Rᴇǫᴜᴇsᴛ Aɢᴀɪɴ", show_alert=True) + + files, n_offset, total = await get_search_results(search, offset=offset, filter=True) + try: n_offset = int(n_offset) + except: n_offset = 0 + + if not files: return + settings = await get_settings(query.message.chat.id) + nxreq = query.from_user.id if query.from_user else 0 + if SHORT_URL and SHORT_API: + if settings["button"]: + btn = [[InlineKeyboardButton(text=f"[{get_size(file.file_size)}] {file.file_name}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=files_{file.file_id}"))] for file in files ] + else: + btn = [[InlineKeyboardButton(text=f"{file.file_name}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=files_{file.file_id}")), + InlineKeyboardButton(text=f"{get_size(file.file_size)}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=files_{file.file_id}"))] for file in files ] + else: + if settings["button"]: + btn = [[InlineKeyboardButton(text=f"[{get_size(file.file_size)}] {file.file_name}", callback_data=f'files#{nxreq}#{file.file_id}')] for file in files ] + else: + btn = [[InlineKeyboardButton(text=f"{file.file_name}", callback_data=f'files#{nxreq}#{file.file_id}'), + InlineKeyboardButton(text=f"{get_size(file.file_size)}", callback_data=f'files#{nxreq}#{file.file_id}')] for file in files ] + + btn.insert(0, [InlineKeyboardButton("🔗 ʜᴏᴡ ᴛᴏ ᴅᴏᴡɴʟᴏᴀᴅ 🔗", "howdl")]) + if 0 < offset <= 10: + off_set = 0 + elif offset == 0: + off_set = None + else: + off_set = offset - 10 + if n_offset == 0: + btn.append( + [InlineKeyboardButton("⬅️ ʙᴀᴄᴋ", callback_data=f"next_{req}_{key}_{off_set}"), + InlineKeyboardButton(f"❄️ ᴩᴀɢᴇꜱ {math.ceil(int(offset) / 10) + 1} / {math.ceil(total / 10)}", callback_data="pages")] + ) + elif off_set is None: + btn.append( + [InlineKeyboardButton(f"❄️ {math.ceil(int(offset) / 10) + 1} / {math.ceil(total / 10)}", callback_data="pages"), + InlineKeyboardButton("ɴᴇxᴛ ➡️", callback_data=f"next_{req}_{key}_{n_offset}")]) + else: + btn.append( + [ + InlineKeyboardButton("⬅️ ʙᴀᴄᴋ", callback_data=f"next_{req}_{key}_{off_set}"), + InlineKeyboardButton(f"❄️ {math.ceil(int(offset) / 10) + 1} / {math.ceil(total / 10)}", callback_data="pages"), + InlineKeyboardButton("ɴᴇxᴛ ➡️", callback_data=f"next_{req}_{key}_{n_offset}") + ], + ) + + try: + await query.edit_message_reply_markup( reply_markup=InlineKeyboardMarkup(btn)) + except MessageNotModified: + pass + await query.answer() + + +@Client.on_callback_query(filters.create(lambda _, __, query: query.data.startswith("spolling"))) +async def advantage_spoll_choker(bot, query): + _, user, movie_ = query.data.split('#') + if int(user) != 0 and query.from_user.id != int(user): + return await query.answer("okDa", show_alert=True) + if movie_ == "close_spellcheck": + return await query.message.delete() + movies = temp.GP_SPELL.get(query.message.reply_to_message.id) + if not movies: + return await query.answer("Yᴏᴜ Aʀᴇ Usɪɴɢ Oɴᴇ Oғ Mʏ Oʟᴅ Mᴇssᴀɢᴇs, Pʟᴇᴀsᴇ Sᴇɴᴅ Tʜᴇ Rᴇǫᴜᴇsᴛ Aɢᴀɪɴ", show_alert=True) + movie = movies[(int(movie_))] + await query.answer('Checking for Movie in database...') + k = await manual_filters(bot, query.message, text=movie) + if k == False: + files, offset, total_results = await get_search_results(movie, offset=0, filter=True) + if files: + k = (movie, files, offset, total_results) + await auto_filter(bot, query, k) + else: + k = await query.message.edit('This Movie Not Found In DataBase') + await asyncio.sleep(10) + await k.delete() + + +@Client.on_message(filters.group & filters.text & filters.incoming & filters.chat(AUTH_GROUPS) if AUTH_GROUPS else filters.text & filters.incoming & filters.group) +async def give_filter(client, message): + if G_FILTER: + if G_MODE.get(str(message.chat.id)) == "False": + return + else: + kd = await global_filters(client, message) + if kd == False: + k = await manual_filters(client, message) + if k == False: + if FILTER_MODE.get(str(message.chat.id)) == "False": + return + else: + await auto_filter(client, message) + else: + k = await manual_filters(client, message) + if k == False: + if FILTER_MODE.get(str(message.chat.id)) == "False": + return + else: + await auto_filter(client, message) + + +async def auto_filter(client, msg, spoll=False): + if not spoll: + message = msg + settings = await get_settings(message.chat.id) + if message.text.startswith("/"): return # ignore commands + if re.findall("((^\/|^,|^!|^\.|^[\U0001F600-\U000E007F]).*)", message.text): + return + if 2 < len(message.text) < 100: + search = message.text + files, offset, total_results = await get_search_results(search.lower(), offset=0, filter=True) + if not files: + if settings["spell_check"]: + return await advantage_spell_chok(msg) + else: + return + else: + return + else: + settings = await get_settings(msg.message.chat.id) + message = msg.message.reply_to_message # msg will be callback query + search, files, offset, total_results = spoll + pre = 'filep' if settings['file_secure'] else 'file' + req = message.from_user.id if message.from_user else 0 + + if SHORT_URL and SHORT_API: + if settings["button"]: + btn = [[InlineKeyboardButton(text=f"[{get_size(file.file_size)}] {file.file_name}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=pre_{file.file_id}"))] for file in files ] + else: + btn = [[InlineKeyboardButton(text=f"{file.file_name}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=pre_{file.file_id}")), + InlineKeyboardButton(text=f"{get_size(file.file_size)}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=pre_{file.file_id}"))] for file in files ] + else: + if settings["button"]: + btn = [[InlineKeyboardButton(text=f"[{get_size(file.file_size)}] {file.file_name}", callback_data=f'{pre}#{req}#{file.file_id}')] for file in files ] + else: + btn = [[InlineKeyboardButton(text=f"{file.file_name}", callback_data=f'{pre}#{req}#{file.file_id}'), + InlineKeyboardButton(text=f"{get_size(file.file_size)}", callback_data=f'{pre}#{req}#{file.file_id}')] for file in files ] + + btn.insert(0, [InlineKeyboardButton("🔗 ʜᴏᴡ ᴛᴏ ᴅᴏᴡɴʟᴏᴀᴅ 🔗", "howdl")]) + if offset != "": + key = f"{message.chat.id}-{message.id}" + temp.GP_BUTTONS[key] = search + req = message.from_user.id if message.from_user else 0 + btn.append( + [InlineKeyboardButton(text=f"❄️ ᴩᴀɢᴇꜱ 1/{math.ceil(int(total_results) / 6)}", callback_data="pages"), + InlineKeyboardButton(text="➡️ ɴᴇxᴛ", callback_data=f"next_{req}_{key}_{offset}")] + ) + else: + btn.append( + [InlineKeyboardButton(text="❄️ ᴩᴀɢᴇꜱ 1/1", callback_data="pages")] + ) + + imdb = await get_poster(search, file=(files[0]).file_name) if settings["imdb"] else None + TEMPLATE = settings['template'] + if imdb: + cap = TEMPLATE.format( + group = message.chat.title, + requested = message.from_user.mention, + query = search, + title = imdb['title'], + votes = imdb['votes'], + aka = imdb["aka"], + seasons = imdb["seasons"], + box_office = imdb['box_office'], + localized_title = imdb['localized_title'], + kind = imdb['kind'], + imdb_id = imdb["imdb_id"], + cast = imdb["cast"], + runtime = imdb["runtime"], + countries = imdb["countries"], + certificates = imdb["certificates"], + languages = imdb["languages"], + director = imdb["director"], + writer = imdb["writer"], + producer = imdb["producer"], + composer = imdb["composer"], + cinematographer = imdb["cinematographer"], + music_team = imdb["music_team"], + distributors = imdb["distributors"], + release_date = imdb['release_date'], + year = imdb['year'], + genres = imdb['genres'], + poster = imdb['poster'], + plot = imdb['plot'], + rating = imdb['rating'], + url = imdb['url'], + **locals() + ) + else: + cap = f"Hᴇʀᴇ Is Wʜᴀᴛ I Fᴏᴜɴᴅ Fᴏʀ Yᴏᴜʀ Qᴜᴇʀʏ {search}" + if imdb and imdb.get('poster'): + try: + hehe = await message.reply_photo(photo=imdb.get('poster'), caption=cap, reply_markup=InlineKeyboardMarkup(btn)) + await asyncio.sleep(IMDB_DELET_TIME) + await hehe.delete() + await message.delete() + except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty): + pic = imdb.get('poster') + poster = pic.replace('.jpg', "._V1_UX360.jpg") + hmm = await message.reply_photo(photo=poster, caption=cap, reply_markup=InlineKeyboardMarkup(btn)) + await asyncio.sleep(IMDB_DELET_TIME) + await hmm.delete() + await message.delete() + except Exception as e: + logger.exception(e) + cdb = await message.reply_text(cap, reply_markup=InlineKeyboardMarkup(btn)) + await asyncio.sleep(IMDB_DELET_TIME) + await cdb.delete() + await message.delete() + else: + crl = await message.reply_text(cap, reply_markup=InlineKeyboardMarkup(btn)) + await asyncio.sleep(IMDB_DELET_TIME) + await crl.delete() + await message.delete() + if spoll: + await msg.message.delete() + + + +async def advantage_spell_chok(msg): + query = re.sub(r"\b(pl(i|e)*?(s|z+|ease|se|ese|(e+)s(e)?)|((send|snd|giv(e)?|gib)(\sme)?)|movie(s)?|new|latest|br((o|u)h?)*|^h(e|a)?(l)*(o)*|mal(ayalam)?|t(h)?amil|file|that|find|und(o)*|kit(t(i|y)?)?o(w)?|thar(u)?(o)*w?|kittum(o)*|aya(k)*(um(o)*)?|full\smovie|any(one)|with\ssubtitle(s)?)","", msg.text, flags=re.IGNORECASE) # plis contribute some common words + query = query.strip() + " movie" + g_s = await search_gagala(query) + g_s += await search_gagala(msg.text) + gs_parsed = [] + if not g_s: + k = await msg.reply("I Cᴏᴜʟᴅɴ'ᴛ Fɪɴᴅ Aɴʏ Mᴏᴠɪᴇ Iɴ Tʜᴀᴛ Nᴀᴍᴇ") + await asyncio.sleep(8) + return await k.delete() + regex = re.compile(r".*(imdb|wikipedia).*", re.IGNORECASE) # look for imdb / wiki results + gs = list(filter(regex.match, g_s)) + gs_parsed = [re.sub(r'\b(\-([a-zA-Z-\s])\-\simdb|(\-\s)?imdb|(\-\s)?wikipedia|\(|\)|\-|reviews|full|all|episode(s)?|film|movie|series)', '', i, flags=re.IGNORECASE) for i in gs] + if not gs_parsed: + reg = re.compile(r"watch(\s[a-zA-Z0-9_\s\-\(\)]*)*\|.*", re.IGNORECASE) # match something like Watch Niram | Amazon Prime + for mv in g_s: + match = reg.match(mv) + if match: + gs_parsed.append(match.group(1)) + user = msg.from_user.id if msg.from_user else 0 + movielist = [] + gs_parsed = list(dict.fromkeys(gs_parsed)) # removing duplicates https://stackoverflow.com/a/7961425 + if len(gs_parsed) > 3: + gs_parsed = gs_parsed[:3] + if gs_parsed: + for mov in gs_parsed: + imdb_s = await get_poster(mov.strip(), bulk=True) # searching each keyword in imdb + if imdb_s: + movielist += [movie.get('title') for movie in imdb_s] + movielist += [(re.sub(r'(\-|\(|\)|_)', '', i, flags=re.IGNORECASE)).strip() for i in gs_parsed] + movielist = list(dict.fromkeys(movielist)) # removing duplicates + if not movielist: + k = await msg.reply("I Cᴏᴜʟᴅɴ'ᴛ Fɪɴᴅ Aɴʏᴛʜɪɴɢ Rᴇʟᴀᴛᴇᴅ Tᴏ Tʜᴀᴛ. Cʜᴇᴄᴋ Yᴏᴜʀ Sᴘᴇʟʟɪɴɢ") + await asyncio.sleep(8) + return await k.delete() + temp.GP_SPELL[msg.id] = movielist + btn = [[InlineKeyboardButton(text=movie.strip(), callback_data=f"spolling#{user}#{k}",)] for k, movie in enumerate(movielist)] + btn.append([InlineKeyboardButton(text="Close", callback_data=f'spolling#{user}#close_spellcheck')]) + await msg.reply("I Cᴏᴜʟᴅɴ'ᴛ Fɪɴᴅ Aɴʏᴛʜɪɴɢ Rᴇʟᴀᴛᴇᴅ Tᴏ Tʜᴀᴛ. Dɪᴅ Yᴏᴜ Mᴇᴀɴ Aɴʏ Oɴᴇ Oғ Tʜᴇsᴇ?", reply_markup=InlineKeyboardMarkup(btn)) + + +async def manual_filters(client, message, text=False): + group_id = message.chat.id + name = text or message.text + reply_id = message.reply_to_message.id if message.reply_to_message else message.id + keywords = await get_filters(group_id) + for keyword in reversed(sorted(keywords, key=len)): + pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])" + if re.search(pattern, name, flags=re.IGNORECASE): + reply_text, btn, alert, fileid = await find_filter(group_id, keyword) + + if reply_text: + reply_text = reply_text.replace("\\n", "\n").replace("\\t", "\t") + + if btn is not None: + try: + if fileid == "None": + if btn == "[]": + await client.send_message(group_id, reply_text, disable_web_page_preview=True, reply_to_message_id=reply_id) + else: + button = eval(btn) + await client.send_message( + group_id, + reply_text, + disable_web_page_preview=True, + reply_markup=InlineKeyboardMarkup(button), + reply_to_message_id=reply_id + ) + elif btn == "[]": + await client.send_cached_media( + group_id, + fileid, + caption=reply_text or "", + reply_to_message_id=reply_id + ) + else: + button = eval(btn) + await message.reply_cached_media( + fileid, + caption=reply_text or "", + reply_markup=InlineKeyboardMarkup(button), + reply_to_message_id=reply_id + ) + except Exception as e: + logger.exception(e) + break + else: + return False + + + +async def global_filters(client, message, text=False): + group_id = message.chat.id + name = text or message.text + reply_id = message.reply_to_message.id if message.reply_to_message else message.id + keywords = await get_gfilters('gfilters') + for keyword in reversed(sorted(keywords, key=len)): + pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])" + if re.search(pattern, name, flags=re.IGNORECASE): + reply_text, btn, alert, fileid = await find_gfilter('gfilters', keyword) + + if reply_text: + reply_text = reply_text.replace("\\n", "\n").replace("\\t", "\t") + + if btn is not None: + try: + if fileid == "None": + if btn == "[]": + knd3 = await client.send_message( + group_id, + reply_text, + disable_web_page_preview=True, + reply_to_message_id=reply_id + ) + await asyncio.sleep(IMDB_DELET_TIME) + await knd3.delete() + await message.delete() + + else: + button = eval(btn) + knd2 = await client.send_message( + group_id, + reply_text, + disable_web_page_preview=True, + reply_markup=InlineKeyboardMarkup(button), + reply_to_message_id=reply_id + ) + await asyncio.sleep(IMDB_DELET_TIME) + await knd2.delete() + await message.delete() + + elif btn == "[]": + knd1 = await client.send_cached_media( + group_id, + fileid, + caption=reply_text or "", + reply_to_message_id=reply_id + ) + await asyncio.sleep(IMDB_DELET_TIME) + await knd1.delete() + await message.delete() + + else: + button = eval(btn) + knd = await message.reply_cached_media( + fileid, + caption=reply_text or "", + reply_markup=InlineKeyboardMarkup(button), + reply_to_message_id=reply_id + ) + await asyncio.sleep(IMDB_DELET_TIME) + await knd.delete() + await message.delete() + + except Exception as e: + logger.exception(e) + break + else: + return False + + + + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\index.py +import logging, re, asyncio +from pyrogram import Client, filters, enums +from pyrogram.errors import FloodWait +from pyrogram.errors.exceptions.bad_request_400 import ChannelInvalid, ChatAdminRequired, UsernameInvalid, UsernameNotModified +from info import CHANNELS, LOG_CHANNEL, ADMINS +from database.ia_filterdb import save_file +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton +from utils import temp + +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) +lock = asyncio.Lock() + + +@Client.on_message(filters.chat(CHANNELS) & (filters.document | filters.video | filters.audio)) +async def media(bot, message): + for file_type in ("document", "video", "audio"): + media = getattr(message, file_type, None) + if media is not None: break + else: return + media.file_type = file_type + media.caption = message.caption + await save_file(media) + + + +@Client.on_callback_query(filters.regex(r'^index')) +async def index_files(bot, query): + if query.data.startswith('index_cancel'): + temp.CANCEL = True + return await query.answer("Cᴀɴᴄᴇʟʟɪɴɢ Iɴᴅᴇxɪɴɢ", show_alert=True) + + perfx, chat, lst_msg_id = query.data.split("#") + if lock.locked(): + return await query.answer('Wᴀɪᴛ Uɴᴛɪʟ Pʀᴇᴠɪᴏᴜs Pʀᴏᴄᴇss Cᴏᴍᴘʟᴇᴛᴇ', show_alert=True) + msg = query.message + button = InlineKeyboardMarkup([[ + InlineKeyboardButton('🚫 ᴄᴀɴᴄᴇʟʟ', "index_cancel") + ]]) + await msg.edit("ɪɴᴅᴇxɪɴɢ ɪs sᴛᴀʀᴛᴇᴅ ✨", reply_markup=button) + try: chat = int(chat) + except: chat = chat + await index_files_to_db(int(lst_msg_id), chat, msg, bot) + + +@Client.on_message((filters.forwarded | (filters.regex("(https://)?(t\.me/|telegram\.me/|telegram\.dog/)(c/)?(\d+|[a-zA-Z_0-9]+)/(\d+)$")) & filters.text ) & filters.private & filters.incoming & filters.user(ADMINS)) +async def send_for_index(bot, message): + if message.text: + regex = re.compile("(https://)?(t\.me/|telegram\.me/|telegram\.dog/)(c/)?(\d+|[a-zA-Z_0-9]+)/(\d+)$") + match = regex.match(message.text) + if not match: return await message.reply('Invalid link') + chat_id = match.group(4) + last_msg_id = int(match.group(5)) + if chat_id.isnumeric(): chat_id = int(("-100" + chat_id)) + elif message.forward_from_chat.type == enums.ChatType.CHANNEL: + last_msg_id = message.forward_from_message_id + chat_id = message.forward_from_chat.username or message.forward_from_chat.id + else: return + try: await bot.get_chat(chat_id) + except ChannelInvalid: return await message.reply('This may be a private channel / group. Make me an admin over there to index the files.') + except (UsernameInvalid, UsernameNotModified): return await message.reply('Invalid Link specified.') + except Exception as e: return await message.reply(f'Errors - {e}') + try: k = await bot.get_messages(chat_id, last_msg_id) + except: return await message.reply('Make Sure That Iam An Admin In The Channel, if channel is private') + if k.empty: return await message.reply('This may be group and iam not a admin of the group.') + buttons = InlineKeyboardMarkup([[ + InlineKeyboardButton('✨ ʏᴇꜱ', callback_data=f'index#{chat_id}#{last_msg_id}') + ],[ + InlineKeyboardButton('🚫 ᴄʟᴏꜱᴇ', callback_data='close_data') + ]]) + await message.reply(f'Do You Want To Index This Channel/ Group ?\n\nChat ID/ Username: {chat_id}\nLast Message ID: {last_msg_id}', reply_markup=buttons) + + +@Client.on_message(filters.command('setskip') & filters.user(ADMINS)) +async def set_skip_number(bot, message): + if len(message.command) == 2: + try: skip = int(message.text.split(" ", 1)[1]) + except: return await message.reply("Skip Number Should Be An Integer.") + await message.reply(f"Successfully Set Skip Number As {skip}") + temp.CURRENT = int(skip) + else: + await message.reply("Give Me A Skip Number") + + +async def index_files_to_db(lst_msg_id, chat, msg, bot): + total_files = 0 + duplicate = 0 + errors = 0 + deleted = 0 + no_media = 0 + unsupported = 0 + async with lock: + try: + current = temp.CURRENT + temp.CANCEL = False + async for message in bot.iter_messages(chat, lst_msg_id, temp.CURRENT): + if temp.CANCEL: + await msg.edit(f"Successfully Cancelled!!\n\nSaved {total_files} files to dataBase!\nDuplicate Files Skipped: {duplicate}\nDeleted Messages Skipped: {deleted}\nNon-Media messages skipped: {no_media + unsupported}(Unsupported Media - `{unsupported}` )\nErrors Occurred: {errors}") + break + current += 1 + if current % 100 == 0: + can = [[InlineKeyboardButton('Cancel', callback_data='index_cancel')]] + reply = InlineKeyboardMarkup(can) + try: + await msg.edit_text(text=f"Total Messages Fetched: {current}\nTotal Messages Saved: {total_files}\nDuplicate Files Skipped: {duplicate}\nDeleted Messages Skipped: {deleted}\nNon-Media messages skipped: {no_media + unsupported}(Unsupported Media - `{unsupported}` )\nErrors Occurred: {errors}", reply_markup=reply) + except FloodWait as t: + await asyncio.sleep(t.value) + await msg.edit_text(text=f"Total Messages Fetched: {current}\nTotal Messages Saved: {total_files}\nDuplicate Files Skipped: {duplicate}\nDeleted Messages Skipped: {deleted}\nNon-Media messages skipped: {no_media + unsupported}(Unsupported Media - `{unsupported}` )\nErrors Occurred: {errors}", reply_markup=reply) + if message.empty: + deleted += 1 + continue + elif not message.media: + no_media += 1 + continue + elif message.media not in [enums.MessageMediaType.VIDEO, enums.MessageMediaType.AUDIO, enums.MessageMediaType.DOCUMENT]: + unsupported += 1 + continue + media = getattr(message, message.media.value, None) + if not media: + unsupported += 1 + continue + media.file_type = message.media.value + media.caption = message.caption + aynav, vnay = await save_file(media) + if aynav: + total_files += 1 + elif vnay == 0: + duplicate += 1 + elif vnay == 2: + errors += 1 + except Exception as e: + logger.exception(e) + await msg.edit(f'Error: {e}') + else: + await msg.edit(f'Succesfully Saved {total_files} To Database!\nDuplicate Files Skipped: {duplicate}\nDeleted Messages Skipped: {deleted}\nNon-Media Messages Skipped: {no_media + unsupported}(Unsupported Media - `{unsupported}` )\nErrors Occurred: {errors}') + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\inline.py +import logging +from pyrogram import Client, emoji, filters +from pyrogram.errors.exceptions.bad_request_400 import QueryIdInvalid +from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, InlineQueryResultCachedDocument, InlineQuery +from database.ia_filterdb import get_search_results +from utils import is_subscribed, get_size, temp +from info import CACHE_TIME, AUTH_USERS, AUTH_CHANNEL, CUSTOM_FILE_CAPTION + +logger = logging.getLogger(__name__) +cache_time = 0 if AUTH_USERS or AUTH_CHANNEL else CACHE_TIME + +async def inline_users(query: InlineQuery): + if AUTH_USERS: + if query.from_user and query.from_user.id in AUTH_USERS: + return True + else: + return False + if query.from_user and query.from_user.id not in temp.BANNED_USERS: + return True + return False + +@Client.on_inline_query() +async def answer(bot, query): + if not await inline_users(query): + await query.answer(results=[], + cache_time=0, + switch_pm_text='okDa', + switch_pm_parameter="hehe") + return + + if AUTH_CHANNEL and not await is_subscribed(bot, query): + await query.answer(results=[], + cache_time=0, + switch_pm_text='You have to subscribe my channel to use the bot', + switch_pm_parameter="subscribe") + return + + results = [] + if '|' in query.query: + string, file_type = query.query.split('|', maxsplit=1) + string = string.strip() + file_type = file_type.strip().lower() + else: + string = query.query.strip() + file_type = None + + offset = int(query.offset or 0) + reply_markup = get_reply_markup(query=string) + files, next_offset, total = await get_search_results(string, file_type=file_type, max_results=10, offset=offset) + + for file in files: + title=file.file_name + size=get_size(file.file_size) + f_caption=file.caption + if CUSTOM_FILE_CAPTION: + try: + f_caption=CUSTOM_FILE_CAPTION.format(mention=query.from_user.mention, file_name= '' if title is None else title, file_size='' if size is None else size, file_caption='' if f_caption is None else f_caption) + except Exception as e: + logger.exception(e) + f_caption=f_caption + if f_caption is None: + f_caption = f"{file.file_name}" + results.append( + InlineQueryResultCachedDocument( + title=file.file_name, + document_file_id=file.file_id, + caption=f_caption, + description=f'Size: {get_size(file.file_size)}\nType: {file.file_type}', + reply_markup=reply_markup)) + + if results: + switch_pm_text = f"{emoji.FILE_FOLDER} Results - {total}" + if string: + switch_pm_text += f" for {string}" + try: + await query.answer(results=results, + is_personal = True, + cache_time=cache_time, + switch_pm_text=switch_pm_text, + switch_pm_parameter="start", + next_offset=str(next_offset)) + except QueryIdInvalid: + pass + except Exception as e: + logging.exception(str(e)) + else: + switch_pm_text = f'{emoji.CROSS_MARK} No Results' + if string: + switch_pm_text += f' for "{string}"' + + await query.answer(results=[], + is_personal = True, + cache_time=cache_time, + switch_pm_text=switch_pm_text, + switch_pm_parameter="okay") + + +def get_reply_markup(query): + buttons = [[InlineKeyboardButton('⟳ ꜱᴇᴀʀᴄʜ ᴀɢᴀɪɴ', switch_inline_query_current_chat=query)]] + return InlineKeyboardMarkup(buttons) + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\pm_filter.py +import asyncio, re, ast, math, logging, pyrogram +from pyrogram.errors.exceptions.bad_request_400 import MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty +from Script import script +from utils import get_shortlink +from info import AUTH_USERS, PM_IMDB, SINGLE_BUTTON, PROTECT_CONTENT, SPELL_CHECK_REPLY, IMDB_TEMPLATE, IMDB_DELET_TIME, PMFILTER, G_FILTER, SHORT_URL, SHORT_API +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery +from pyrogram import Client, filters, enums +from pyrogram.errors import FloodWait, UserIsBlocked, MessageNotModified, PeerIdInvalid +from utils import get_size, is_subscribed, get_poster, search_gagala, temp, get_settings, save_group_settings +from database.users_chats_db import db +from database.ia_filterdb import Media, get_file_details, get_search_results +from plugins.group_filter import global_filters + +logger = logging.getLogger(__name__) +logger.setLevel(logging.ERROR) + + +@Client.on_message(filters.private & filters.text & filters.chat(AUTH_USERS) if AUTH_USERS else filters.text & filters.private) +async def auto_pm_fill(b, m): + if PMFILTER: + if G_FILTER: + kd = await global_filters(b, m) + if kd == False: await pm_AutoFilter(b, m) + else: await pm_AutoFilter(b, m) + else: return + +@Client.on_callback_query(filters.create(lambda _, __, query: query.data.startswith("pmnext"))) +async def pm_next_page(bot, query): + ident, req, key, offset = query.data.split("_") + try: offset = int(offset) + except: offset = 0 + search = temp.PM_BUTTONS.get(str(key)) + if not search: return await query.answer("Yᴏᴜ Aʀᴇ Usɪɴɢ Oɴᴇ Oғ Mʏ Oʟᴅ Mᴇssᴀɢᴇs, Pʟᴇᴀsᴇ Sᴇɴᴅ Tʜᴇ Rᴇǫᴜᴇsᴛ Aɢᴀɪɴ", show_alert=True) + + files, n_offset, total = await get_search_results(search.lower(), offset=offset, filter=True) + try: n_offset = int(n_offset) + except: n_offset = 0 + if not files: return + + if SHORT_URL and SHORT_API: + if SINGLE_BUTTON: + btn = [[InlineKeyboardButton(text=f"[{get_size(file.file_size)}] {file.file_name}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=files_{file.file_id}"))] for file in files ] + else: + btn = [[InlineKeyboardButton(text=f"{file.file_name}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=files_{file.file_id}")), + InlineKeyboardButton(text=f"{get_size(file.file_size)}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=files_{file.file_id}"))] for file in files ] + else: + if SINGLE_BUTTON: + btn = [[InlineKeyboardButton(text=f"[{get_size(file.file_size)}] {file.file_name}", callback_data=f'pmfile#{file.file_id}')] for file in files ] + else: + btn = [[InlineKeyboardButton(text=f"{file.file_name}", callback_data=f'pmfile#{file.file_id}'), + InlineKeyboardButton(text=f"{get_size(file.file_size)}", callback_data=f'pmfile#{file.file_id}')] for file in files ] + + btn.insert(0, [InlineKeyboardButton("🔗 ʜᴏᴡ ᴛᴏ ᴅᴏᴡɴʟᴏᴀᴅ 🔗", "howdl")]) + if 0 < offset <= 10: off_set = 0 + elif offset == 0: off_set = None + else: off_set = offset - 10 + if n_offset == 0: + btn.append( + [InlineKeyboardButton("⬅️ ʙᴀᴄᴋ", callback_data=f"pmnext_{req}_{key}_{off_set}"), + InlineKeyboardButton(f"❄️ ᴩᴀɢᴇꜱ {math.ceil(int(offset) / 10) + 1} / {math.ceil(total / 10)}", callback_data="pages")] + ) + elif off_set is None: + btn.append( + [InlineKeyboardButton(f"❄️ {math.ceil(int(offset) / 10) + 1} / {math.ceil(total / 10)}", callback_data="pages"), + InlineKeyboardButton("ɴᴇxᴛ ➡️", callback_data=f"pmnext_{req}_{key}_{n_offset}")]) + else: + btn.append([ + InlineKeyboardButton("⬅️ ʙᴀᴄᴋ", callback_data=f"pmnext_{req}_{key}_{off_set}"), + InlineKeyboardButton(f"❄️ {math.ceil(int(offset) / 10) + 1} / {math.ceil(total / 10)}", callback_data="pages"), + InlineKeyboardButton("ɴᴇxᴛ ➡️", callback_data=f"pmnext_{req}_{key}_{n_offset}") + ]) + try: + await query.edit_message_reply_markup(reply_markup=InlineKeyboardMarkup(btn)) + except MessageNotModified: + pass + await query.answer() + + +@Client.on_callback_query(filters.create(lambda _, __, query: query.data.startswith("pmspolling"))) +async def pm_spoll_tester(bot, query): + _, user, movie_ = query.data.split('#') + if movie_ == "close_spellcheck": + return await query.message.delete() + movies = temp.PM_SPELL.get(str(query.message.reply_to_message.id)) + if not movies: + return await query.answer("Yᴏᴜ Aʀᴇ Usɪɴɢ Oɴᴇ Oғ Mʏ Oʟᴅ Mᴇssᴀɢᴇs, Pʟᴇᴀsᴇ Sᴇɴᴅ Tʜᴇ Rᴇǫᴜᴇsᴛ Aɢᴀɪɴ", show_alert=True) + movie = movies[(int(movie_))] + await query.answer('Cʜᴇᴄᴋɪɴɢ Fᴏʀ Mᴏᴠɪᴇ Iɴ Dᴀᴛᴀʙᴀsᴇ...') + files, offset, total_results = await get_search_results(movie, offset=0, filter=True) + if files: + k = (movie, files, offset, total_results) + await pm_AutoFilter(bot, query, k) + else: + k = await query.message.edit('Tʜɪs Mᴏᴠɪᴇ Nᴏᴛ Fᴏᴜɴᴅ Iɴ Dᴀᴛᴀʙᴀsᴇ') + await asyncio.sleep(10) + await k.delete() + + +async def pm_AutoFilter(client, msg, pmspoll=False): + if not pmspoll: + message = msg + if message.text.startswith("/"): return # ignore commands + if re.findall("((^\/|^,|^!|^\.|^[\U0001F600-\U000E007F]).*)", message.text): return + if 2 < len(message.text) < 100: + search = message.text + files, offset, total_results = await get_search_results(search.lower(), offset=0, filter=True) + if not files: return await pm_spoll_choker(msg) + else: return + else: + message = msg.message.reply_to_message # msg will be callback query + search, files, offset, total_results = pmspoll + pre = 'pmfilep' if PROTECT_CONTENT else 'pmfile' + + if SHORT_URL and SHORT_API: + if SINGLE_BUTTON: + btn = [[InlineKeyboardButton(text=f"[{get_size(file.file_size)}] {file.file_name}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=pre_{file.file_id}"))] for file in files ] + else: + btn = [[InlineKeyboardButton(text=f"{file.file_name}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=pre_{file.file_id}")), + InlineKeyboardButton(text=f"{get_size(file.file_size)}", url=await get_shortlink(f"https://telegram.dog/{temp.U_NAME}?start=pre_{file.file_id}"))] for file in files ] + else: + if SINGLE_BUTTON: + btn = [[InlineKeyboardButton(text=f"[{get_size(file.file_size)}] {file.file_name}", callback_data=f'{pre}#{file.file_id}')] for file in files ] + else: + btn = [[InlineKeyboardButton(text=f"{file.file_name}", callback_data=f'{pre}#{req}#{file.file_id}'), + InlineKeyboardButton(text=f"{get_size(file.file_size)}", callback_data=f'{pre}#{file.file_id}')] for file in files ] + + btn.insert(0, [InlineKeyboardButton("🔗 ʜᴏᴡ ᴛᴏ ᴅᴏᴡɴʟᴏᴀᴅ 🔗", "howdl")]) + if offset != "": + key = f"{message.id}" + temp.PM_BUTTONS[key] = search + req = message.from_user.id if message.from_user else 0 + btn.append( + [InlineKeyboardButton(text=f"❄️ ᴩᴀɢᴇꜱ 1/{math.ceil(int(total_results) / 6)}", callback_data="pages"), + InlineKeyboardButton(text="ɴᴇxᴛ ➡️", callback_data=f"pmnext_{req}_{key}_{offset}")] + ) + else: + btn.append( + [InlineKeyboardButton(text="❄️ ᴩᴀɢᴇꜱ 1/1", callback_data="pages")] + ) + if PM_IMDB: + imdb = await get_poster(search) + else: + imdb = None + TEMPLATE = IMDB_TEMPLATE + if imdb: + cap = TEMPLATE.format( + group = message.chat.title, + requested = message.from_user.mention, + query = search, + title = imdb['title'], + votes = imdb['votes'], + aka = imdb["aka"], + seasons = imdb["seasons"], + box_office = imdb['box_office'], + localized_title = imdb['localized_title'], + kind = imdb['kind'], + imdb_id = imdb["imdb_id"], + cast = imdb["cast"], + runtime = imdb["runtime"], + countries = imdb["countries"], + certificates = imdb["certificates"], + languages = imdb["languages"], + director = imdb["director"], + writer = imdb["writer"], + producer = imdb["producer"], + composer = imdb["composer"], + cinematographer = imdb["cinematographer"], + music_team = imdb["music_team"], + distributors = imdb["distributors"], + release_date = imdb['release_date'], + year = imdb['year'], + genres = imdb['genres'], + poster = imdb['poster'], + plot = imdb['plot'], + rating = imdb['rating'], + url = imdb['url'], + **locals() + ) + else: + cap = f"Hᴇʀᴇ Is Wʜᴀᴛ I Fᴏᴜɴᴅ Fᴏʀ Yᴏᴜʀ Qᴜᴇʀʏ {search}" + if imdb and imdb.get('poster'): + try: + hehe = await message.reply_photo(photo=imdb.get('poster'), caption=cap, quote=True, reply_markup=InlineKeyboardMarkup(btn)) + await asyncio.sleep(IMDB_DELET_TIME) + await hehe.delete() + except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty): + pic = imdb.get('poster') + poster = pic.replace('.jpg', "._V1_UX360.jpg") + hmm = await message.reply_photo(photo=poster, caption=cap, quote=True, reply_markup=InlineKeyboardMarkup(btn)) + await asyncio.sleep(IMDB_DELET_TIME) + await hmm.delete() + except Exception as e: + logger.exception(e) + cdp = await message.reply_text(cap, quote=True, reply_markup=InlineKeyboardMarkup(btn)) + await asyncio.sleep(IMDB_DELET_TIME) + await cdp.delete() + else: + abc = await message.reply_text(cap, quote=True, reply_markup=InlineKeyboardMarkup(btn)) + await asyncio.sleep(IMDB_DELET_TIME) + await abc.delete() + if pmspoll: + await msg.message.delete() + + +async def pm_spoll_choker(msg): + query = re.sub(r"\b(pl(i|e)*?(s|z+|ease|se|ese|(e+)s(e)?)|((send|snd|giv(e)?|gib)(\sme)?)|movie(s)?|new|latest|br((o|u)h?)*|^h(e|a)?(l)*(o)*|mal(ayalam)?|t(h)?amil|file|that|find|und(o)*|kit(t(i|y)?)?o(w)?|thar(u)?(o)*w?|kittum(o)*|aya(k)*(um(o)*)?|full\smovie|any(one)|with\ssubtitle(s)?)", "", msg.text, flags=re.IGNORECASE) # plis contribute some common words + query = query.strip() + " movie" + g_s = await search_gagala(query) + g_s += await search_gagala(msg.text) + gs_parsed = [] + if not g_s: + k = await msg.reply("I Cᴏᴜʟᴅɴ'ᴛ Fɪɴᴅ Aɴʏ Mᴏᴠɪᴇ Iɴ Tʜᴀᴛ Nᴀᴍᴇ", quote=True) + await asyncio.sleep(10) + return await k.delete() + regex = re.compile(r".*(imdb|wikipedia).*", re.IGNORECASE) # look for imdb / wiki results + gs = list(filter(regex.match, g_s)) + gs_parsed = [re.sub(r'\b(\-([a-zA-Z-\s])\-\simdb|(\-\s)?imdb|(\-\s)?wikipedia|\(|\)|\-|reviews|full|all|episode(s)?|film|movie|series)', '', i, flags=re.IGNORECASE) for i in gs] + if not gs_parsed: + reg = re.compile(r"watch(\s[a-zA-Z0-9_\s\-\(\)]*)*\|.*", re.IGNORECASE) # match something like Watch Niram | Amazon Prime + for mv in g_s: + match = reg.match(mv) + if match: gs_parsed.append(match.group(1)) + user = msg.from_user.id if msg.from_user else 0 + movielist = [] + gs_parsed = list(dict.fromkeys(gs_parsed)) # removing duplicates https://stackoverflow.com/a/7961425 + if len(gs_parsed) > 3: gs_parsed = gs_parsed[:3] + if gs_parsed: + for mov in gs_parsed: + imdb_s = await get_poster(mov.strip(), bulk=True) # searching each keyword in imdb + if imdb_s: movielist += [movie.get('title') for movie in imdb_s] + movielist += [(re.sub(r'(\-|\(|\)|_)', '', i, flags=re.IGNORECASE)).strip() for i in gs_parsed] + movielist = list(dict.fromkeys(movielist)) # removing duplicates + if not movielist: + k = await msg.reply("I Cᴏᴜʟᴅɴ'ᴛ Fɪɴᴅ Aɴʏᴛʜɪɴɢ Rᴇʟᴀᴛᴇᴅ Tᴏ Tʜᴀᴛ. Cʜᴇᴄᴋ Yᴏᴜʀ Sᴘᴇʟʟɪɴɢ", quote=True) + await asyncio.sleep(10) + return await k.delete() + temp.PM_SPELL[str(msg.id)] = movielist + btn = [[InlineKeyboardButton(text=movie.strip(), callback_data=f"pmspolling#{user}#{k}")] for k, movie in enumerate(movielist)] + btn.append([InlineKeyboardButton(text="Close", callback_data=f'pmspolling#{user}#close_spellcheck')]) + await msg.reply("I Cᴏᴜʟᴅɴ'ᴛ Fɪɴᴅ Aɴʏᴛʜɪɴɢ Rᴇʟᴀᴛᴇᴅ Tᴏ Tʜᴀᴛ. Dɪᴅ Yᴏᴜ Mᴇᴀɴ Aɴʏ Oɴᴇ Oғ Tʜᴇsᴇ?", reply_markup=InlineKeyboardMarkup(btn), quote=True) + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\query.py +import asyncio, re, ast, time, math, logging, random, pyrogram, shutil, psutil + +# Pyrogram Functions +from pyrogram.errors.exceptions.bad_request_400 import MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery, InputMediaPhoto +from pyrogram import Client, filters, enums +from pyrogram.errors import FloodWait, UserIsBlocked, MessageNotModified, PeerIdInvalid + +# Helper Function +from Script import script +from utils import get_size, is_subscribed, get_poster, search_gagala, temp, get_settings, save_group_settings, get_shortlink, get_time, humanbytes +from .ExtraMods.carbon import make_carbon + +# Database Function +from database.connections_mdb import active_connection, all_connections, delete_connection, if_active, make_active, make_inactive +from database.ia_filterdb import Media, get_file_details, get_search_results +from database.filters_mdb import del_all, find_filter, get_filters +from database.gfilters_mdb import find_gfilter, get_gfilters +from database.users_chats_db import db + +# Image Editor Function +from image.edit_1 import bright, mix, black_white, g_blur, normal_blur, box_blur +from image.edit_2 import circle_with_bg, circle_without_bg, sticker, edge_curved, contrast, sepia_mode, pencil, cartoon +from image.edit_3 import green_border, blue_border, black_border, red_border +from image.edit_4 import rotate_90, rotate_180, rotate_270, inverted, round_sticker, removebg_white, removebg_plain, removebg_sticker +from image.edit_5 import normalglitch_1, normalglitch_2, normalglitch_3, normalglitch_4, normalglitch_5, scanlineglitch_1, scanlineglitch_2, scanlineglitch_3, scanlineglitch_4, scanlineglitch_5 + +# Configuration +from info import ADMINS, AUTH_CHANNEL, AUTH_USERS, CUSTOM_FILE_CAPTION, AUTH_GROUPS, P_TTI_SHOW_OFF, PICS, IMDB, PM_IMDB, SINGLE_BUTTON, PROTECT_CONTENT, \ + SPELL_CHECK_REPLY, IMDB_TEMPLATE, IMDB_DELET_TIME, START_MESSAGE, PMFILTER, G_FILTER, BUTTON_LOCK, BUTTON_LOCK_TEXT, SHORT_URL, SHORT_API + + +logger = logging.getLogger(__name__) +logger.setLevel(logging.ERROR) + + + +@Client.on_callback_query() +async def cb_handler(client: Client, query: CallbackQuery): + if query.data == "close_data": + await query.message.delete() + + elif query.data == "delallconfirm": + userid = query.from_user.id + chat_type = query.message.chat.type + if chat_type == enums.ChatType.PRIVATE: + grpid = await active_connection(str(userid)) + if grpid is not None: + grp_id = grpid + try: + chat = await client.get_chat(grpid) + title = chat.title + except: + return await query.message.edit_text("Make Sure I'm Present In Your Group!!", quote=True) + else: + return await query.message.edit_text("I'm Not Connected To Any Groups!\ncheck /Connections Or Connect To Any Groups", quote=True) + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + grp_id = query.message.chat.id + title = query.message.chat.title + else: return + st = await client.get_chat_member(grp_id, userid) + if (st.status == enums.ChatMemberStatus.OWNER) or (str(userid) in ADMINS): await del_all(query.message, grp_id, title) + else: await query.answer("You Need To Be Group Owner Or An Auth User To Do That!", show_alert=True) + + elif query.data == "delallcancel": + userid = query.from_user.id + chat_type = query.message.chat.type + if chat_type == enums.ChatType.PRIVATE: + await query.message.reply_to_message.delete() + await query.message.delete() + elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + grp_id = query.message.chat.id + st = await client.get_chat_member(grp_id, userid) + if (st.status == enums.ChatMemberStatus.OWNER) or (str(userid) in ADMINS): + await query.message.delete() + try: await query.message.reply_to_message.delete() + except: pass + else: await query.answer("Buddy Don't Touch Others Property 😁", show_alert=True) + + elif "groupcb" in query.data: + group_id = query.data.split(":")[1] + act = query.data.split(":")[2] + hr = await client.get_chat(int(group_id)) + title = hr.title + user_id = query.from_user.id + if act == "": + stat = "Connect" + cb = "connectcb" + else: + stat = "Disconnect" + cb = "disconnect" + keyboard = InlineKeyboardMarkup([[ + InlineKeyboardButton(f"{stat}", callback_data=f"{cb}:{group_id}"), + InlineKeyboardButton("Delete", callback_data=f"deletecb:{group_id}") + ],[ + InlineKeyboardButton("Back", callback_data="backcb")] + ]) + await query.message.edit_text(f"Group Name:- **{title}**\nGroup Id:- `{group_id}`", reply_markup=keyboard, parse_mode=enums.ParseMode.MARKDOWN) + + elif "connectcb" in query.data: + group_id = query.data.split(":")[1] + hr = await client.get_chat(int(group_id)) + title = hr.title + user_id = query.from_user.id + mkact = await make_active(str(user_id), str(group_id)) + if mkact: await query.message.edit_text(f"Connected To: **{title}**", parse_mode=enums.ParseMode.MARKDOWN,) + else: await query.message.edit_text('Some Error Occurred!!', parse_mode="md") + + elif "disconnect" in query.data: + group_id = query.data.split(":")[1] + hr = await client.get_chat(int(group_id)) + title = hr.title + user_id = query.from_user.id + mkinact = await make_inactive(str(user_id)) + if mkinact: await query.message.edit_text(f"Disconnected From **{title}**", parse_mode=enums.ParseMode.MARKDOWN) + else: await query.message.edit_text(f"Some Error Occurred!!", parse_mode=enums.ParseMode.MARKDOWN) + + elif "deletecb" in query.data: + user_id = query.from_user.id + group_id = query.data.split(":")[1] + delcon = await delete_connection(str(user_id), str(group_id)) + if delcon: await query.message.edit_text("Successfully Deleted Connection") + else: await query.message.edit_text(f"Some Error Occurred!!", parse_mode=enums.ParseMode.MARKDOWN) + + elif query.data == "backcb": + userid = query.from_user.id + groupids = await all_connections(str(userid)) + if groupids is None: + return await query.message.edit_text("There Are No Active Connections!! Connect To Some Groups First.") + buttons = [] + for groupid in groupids: + try: + ttl = await client.get_chat(int(groupid)) + title = ttl.title + active = await if_active(str(userid), str(groupid)) + act = " - ACTIVE" if active else "" + buttons.append([InlineKeyboardButton(f"{title}{act}", callback_data=f"groupcb:{groupid}:{act}")]) + except: pass + if buttons: await query.message.edit_text("Your Connected Group Details ;\n\n", reply_markup=InlineKeyboardMarkup(buttons)) + + elif "alertmessage" in query.data: + grp_id = query.message.chat.id + i = query.data.split(":")[1] + keyword = query.data.split(":")[2] + reply_text, btn, alerts, fileid = await find_filter(grp_id, keyword) + if alerts is not None: + alerts = ast.literal_eval(alerts) + alert = alerts[int(i)] + alert = alert.replace("\\n", "\n").replace("\\t", "\t") + await query.answer(alert, show_alert=True) + + elif "galert" in query.data: + i = query.data.split(":")[1] + keyword = query.data.split(":")[2] + reply_text, btn, alerts, fileid = await find_gfilter("gfilters", keyword) + if alerts is not None: + alerts = ast.literal_eval(alerts) + alert = alerts[int(i)] + alert = alert.replace("\\n", "\n").replace("\\t", "\t") + await query.answer(alert, show_alert=True) + + if query.data.startswith("pmfile"): + ident, file_id = query.data.split("#") + files_ = await get_file_details(file_id) + if not files_: return await query.answer('No Such File Exist.') + files = files_[0] + title = files.file_name + size = get_size(files.file_size) + f_caption = f_caption = f"{title}" + if CUSTOM_FILE_CAPTION: + try: f_caption = CUSTOM_FILE_CAPTION.format(mention=query.from_user.mention, file_name='' if title is None else title, file_size='' if size is None else size, file_caption='' if f_caption is None else f_caption) + except Exception as e: logger.exception(e) + try: + if AUTH_CHANNEL and not await is_subscribed(client, query): + return await query.answer(url=f"https://t.me/{temp.U_NAME}?start={ident}_{file_id}") + else: + await client.send_cached_media(chat_id=query.from_user.id, file_id=file_id, caption=f_caption, protect_content=True if ident == "pmfilep" else False) + except Exception as e: + await query.answer(f"⚠️ Eʀʀᴏʀ {e}", show_alert=True) + + if query.data.startswith("file"): + ident, req, file_id = query.data.split("#") + if BUTTON_LOCK: + if int(req) not in [query.from_user.id, 0]: + return await query.answer(BUTTON_LOCK_TEXT.format(query=query.from_user.first_name), show_alert=True) + files_ = await get_file_details(file_id) + if not files_: return await query.answer('No Such File Exist.') + files = files_[0] + title = files.file_name + size = get_size(files.file_size) + f_caption = f_caption = f"{title}" + settings = await get_settings(query.message.chat.id) + if CUSTOM_FILE_CAPTION: + try: f_caption = CUSTOM_FILE_CAPTION.format(mention=query.from_user.mention, file_name='' if title is None else title, file_size='' if size is None else size, file_caption='' if f_caption is None else f_caption) + except Exception as e: logger.exception(e) + try: + if AUTH_CHANNEL and not await is_subscribed(client, query): + return await query.answer(url=f"https://t.me/{temp.U_NAME}?start={ident}_{file_id}") + elif settings['botpm']: + return await query.answer(url=f"https://t.me/{temp.U_NAME}?start={ident}_{file_id}") + else: + await client.send_cached_media(chat_id=query.from_user.id, file_id=file_id, caption=f_caption, protect_content=True if ident == "filep" else False) + await query.answer('Cʜᴇᴄᴋ PM, I Hᴀᴠᴇ Sᴇɴᴛ Fɪʟᴇs Iɴ Pᴍ', show_alert=True) + except UserIsBlocked: + await query.answer('Uɴʙʟᴏᴄᴋ Tʜᴇ Bᴏᴛ Mᴀʜɴ !', show_alert=True) + except PeerIdInvalid: + await query.answer(url=f"https://t.me/{temp.U_NAME}?start={ident}_{file_id}") + except Exception as e: + await query.answer(url=f"https://t.me/{temp.U_NAME}?start={ident}_{file_id}") + + elif query.data.startswith("checksub"): + if AUTH_CHANNEL and not await is_subscribed(client, query): + return await query.answer("I Lɪᴋᴇ Yᴏᴜʀ Sᴍᴀʀᴛɴᴇss, Bᴜᴛ Dᴏɴ'ᴛ Bᴇ Oᴠᴇʀsᴍᴀʀᴛ Oᴋᴀʏ 😏", show_alert=True) + ident, file_id = query.data.split("#") + files_ = await get_file_details(file_id) + if not files_: return await query.answer('NO SUCH FILE EXIST....') + files = files_[0] + title = files.file_name + size = get_size(files.file_size) + f_caption = f_caption = f"{title}" + if CUSTOM_FILE_CAPTION: + try: f_caption = CUSTOM_FILE_CAPTION.format(mention=query.from_user.mention, file_name='' if title is None else title, file_size='' if size is None else size, file_caption='' if f_caption is None else f_caption) + except Exception as e: logger.exception(e) + await client.send_cached_media(chat_id=query.from_user.id, file_id=file_id, caption=f_caption, protect_content=True if ident == 'checksubp' else False) + + elif query.data == "removebg": + buttons = [[ + InlineKeyboardButton(text="𝖶𝗂𝗍𝗁 𝖶𝗁𝗂𝗍𝖾 𝖡𝖦", callback_data="rmbgwhite"), + InlineKeyboardButton(text="𝖶𝗂𝗍𝗁𝗈𝗎𝗍 𝖡𝖦", callback_data="rmbgplain"), + ],[ + InlineKeyboardButton(text="𝖲𝗍𝗂𝖼𝗄𝖾𝗋", callback_data="rmbgsticker"), + ],[ + InlineKeyboardButton('𝙱𝙰𝙲𝙺', callback_data='photo') + ]] + await query.message.edit_text("**Select Required Mode**", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "stick": + buttons = [[ + InlineKeyboardButton(text="𝖭𝗈𝗋𝗆𝖺𝗅", callback_data="stkr"), + InlineKeyboardButton(text="𝖤𝖽𝗀𝖾 𝖢𝗎𝗋𝗏𝖾𝖽", callback_data="cur_ved"), + ],[ + InlineKeyboardButton(text="𝖢𝗂𝗋𝖼𝗅𝖾", callback_data="circle_sticker") + ],[ + InlineKeyboardButton('𝙱𝙰𝙲𝙺', callback_data='photo') + ]] + await query.message.edit("**Select A Type**", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "rotate": + buttons = [[ + InlineKeyboardButton(text="180", callback_data="180"), + InlineKeyboardButton(text="90", callback_data="90") + ],[ + InlineKeyboardButton(text="270", callback_data="270") + ],[ + InlineKeyboardButton('𝙱𝙰𝙲𝙺', callback_data='photo') + ]] + await query.message.edit_text("**Select The Degree**", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "glitch": + buttons = [[ + InlineKeyboardButton(text="𝖭𝗈𝗋𝗆𝖺𝗅", callback_data="normalglitch"), + InlineKeyboardButton(text="𝖲𝖼𝖺𝗇 𝖫𝖺𝗂𝗇𝗌", callback_data="scanlineglitch") + ],[ + InlineKeyboardButton('𝙱𝙰𝙲𝙺', callback_data='photo') + ]] + await query.message.edit_text("**Select Required Mode**", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "normalglitch": + buttons = [[ + InlineKeyboardButton(text="1", callback_data="normalglitch1"), + InlineKeyboardButton(text="2", callback_data="normalglitch2"), + InlineKeyboardButton(text="3", callback_data="normalglitch3"), + ],[ + InlineKeyboardButton(text="4", callback_data="normalglitch4"), + InlineKeyboardButton(text="5", callback_data="normalglitch5"), + ],[ + InlineKeyboardButton('𝙱𝙰𝙲𝙺', callback_data='glitch') + ]] + await query.message.edit_text(text="**Select Glitch Power Level**", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "scanlineglitch": + buttons = [[ + InlineKeyboardButton(text="1", callback_data="scanlineglitch1"), + InlineKeyboardButton(text="2", callback_data="scanlineglitch2"), + InlineKeyboardButton(text="3", callback_data="scanlineglitch3"), + ],[ + InlineKeyboardButton(text="4", callback_data="scanlineglitch4"), + InlineKeyboardButton(text="5", callback_data="scanlineglitch5"), + ],[ + InlineKeyboardButton('𝙱𝙰𝙲𝙺', callback_data='glitch') + ]] + await query.message.edit_text("**Select Glitch Power Level**", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "blur": + buttons = [[ + InlineKeyboardButton(text="𝖡𝗈𝗑", callback_data="box"), + InlineKeyboardButton(text="𝖭𝗈𝗋𝗆𝖺𝗅", callback_data="normal"), + ],[ + InlineKeyboardButton(text="𝖦𝖺𝗎𝗌𝗌𝗂𝖺𝗇", callback_data="gas") + ],[ + InlineKeyboardButton('𝙱𝙰𝙲𝙺', callback_data='photo') + ]] + await query.message.edit("**Select A Type**", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "circle": + buttons = [[ + InlineKeyboardButton(text="𝖶𝗂𝗍𝗁 𝖡𝖦", callback_data="circlewithbg"), + InlineKeyboardButton(text="𝖶𝗂𝗍𝗁𝗈𝗎𝗍 𝖡𝖦", callback_data="circlewithoutbg"), + ],[ + InlineKeyboardButton('𝙱𝙰𝙲𝙺', callback_data='photo') + ]] + await query.message.edit_text("**Select Required Mode**", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "border": + buttons = [[ + InlineKeyboardButton(text="𝖱𝖾𝖽", callback_data="red"), + InlineKeyboardButton(text="𝖦𝗋𝖾𝖾𝗇", callback_data="green"), + ],[ + InlineKeyboardButton(text="𝖡𝗅𝖺𝖼𝗄", callback_data="black"), + InlineKeyboardButton(text="𝖡𝗅𝗎𝖾", callback_data="blue"), + ],[ + InlineKeyboardButton('𝙱𝙰𝙲𝙺', callback_data='photo') + ]] + await query.message.edit("**Select Border**", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "photo": + buttons = [[ + InlineKeyboardButton(text="𝖡𝗋𝗂𝗀𝗍𝗁", callback_data="bright"), + InlineKeyboardButton(text="𝖬𝗂𝗑𝖾𝖽", callback_data="mix"), + InlineKeyboardButton(text="𝖡 & 𝖶", callback_data="b|w"), + ],[ + InlineKeyboardButton(text="𝖢𝗂𝗋𝖼𝗅𝖾", callback_data="circle"), + InlineKeyboardButton(text="𝖡𝗅𝗎𝗋", callback_data="blur"), + InlineKeyboardButton(text="𝖡𝗈𝗋𝖽𝖾𝗋", callback_data="border"), + ],[ + InlineKeyboardButton(text="𝖲𝗍𝗂𝖼𝗄𝖾𝗋", callback_data="stick"), + InlineKeyboardButton(text="𝖱𝗈𝗍𝖺𝗍𝖾", callback_data="rotate"), + InlineKeyboardButton(text="𝖢𝗈𝗇𝗍𝗋𝖺𝗌𝗍", callback_data="contrast"), + ],[ + InlineKeyboardButton(text="𝖲𝖾𝗉𝗂𝖺", callback_data="sepia"), + InlineKeyboardButton(text="𝖯𝖾𝗇𝖼𝗂𝗅", callback_data="pencil"), + InlineKeyboardButton(text="𝖢𝖺𝗋𝗍𝗈𝗈𝗇", callback_data="cartoon"), + ],[ + InlineKeyboardButton(text="𝖨𝗇𝗏𝖾𝗋𝗍", callback_data="inverted"), + InlineKeyboardButton(text="𝖦𝗅𝗂𝗍𝖼𝗁", callback_data="glitch"), + InlineKeyboardButton(text="𝖱𝖾𝗆𝗈𝗏𝖾 𝖡𝖦", callback_data="removebg") + ],[ + InlineKeyboardButton(text="𝖢𝗅𝗈𝗌𝖾", callback_data="close_data") + ]] + await query.message.edit_text("Sᴇʟᴇᴄᴛ Yᴏᴜʀ Rᴇǫᴜɪʀᴇᴅ Mᴏᴅᴇ Fʀᴏᴍ Bᴇʟᴏᴡ!", reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "bright": + await bright(client, query.message) + elif query.data == "mix": + await mix(client, query.message) + elif query.data == "b|w": + await black_white(client, query.message) + elif query.data == "circlewithbg": + await circle_with_bg(client, query.message) + elif query.data == "circlewithoutbg": + await circle_without_bg(client, query.message) + elif query.data == "green": + await green_border(client, query.message) + elif query.data == "blue": + await blue_border(client, query.message) + elif query.data == "red": + await red_border(client, query.message) + elif query.data == "black": + await black_border(client, query.message) + elif query.data == "circle_sticker": + await round_sticker(client, query.message) + elif query.data == "inverted": + await inverted(client, query.message) + elif query.data == "stkr": + await sticker(client, query.message) + elif query.data == "cur_ved": + await edge_curved(client, query.message) + elif query.data == "90": + await rotate_90(client, query.message) + elif query.data == "180": + await rotate_180(client, query.message) + elif query.data == "270": + await rotate_270(client, query.message) + elif query.data == "contrast": + await contrast(client, query.message) + elif query.data == "box": + await box_blur(client, query.message) + elif query.data == "gas": + await g_blur(client, query.message) + elif query.data == "normal": + await normal_blur(client, query.message) + elif query.data == "sepia": + await sepia_mode(client, query.message) + elif query.data == "pencil": + await pencil(client, query.message) + elif query.data == "cartoon": + await cartoon(client, query.message) + elif query.data == "normalglitch1": + await normalglitch_1(client, query.message) + elif query.data == "normalglitch2": + await normalglitch_2(client, query.message) + elif query.data == "normalglitch3": + await normalglitch_3(client, query.message) + elif query.data == "normalglitch4": + await normalglitch_4(client, query.message) + elif query.data == "normalglitch5": + await normalglitch_5(client, query.message) + elif query.data == "scanlineglitch1": + await scanlineglitch_1(client, query.message) + elif query.data == "scanlineglitch2": + await scanlineglitch_2(client, query.message) + elif query.data == "scanlineglitch3": + await scanlineglitch_3(client, query.message) + elif query.data == "scanlineglitch4": + await scanlineglitch_4(client, query.message) + elif query.data == "scanlineglitch5": + await scanlineglitch_5(client, query.message) + elif query.data == "rmbgwhite": + await removebg_white(client, query.message) + elif query.data == "rmbgplain": + await removebg_plain(client, query.message) + elif query.data == "rmbgsticker": + await removebg_sticker(client, query.message) + elif query.data == "pages": + await query.answer("🤨 Cᴜʀɪᴏsɪᴛʏ Is A Lɪᴛᴛʟᴇ Mᴏʀᴇ, Isɴ'ᴛ Iᴛ? 😁", show_alert=True) + elif query.data == "howdl": + try: await query.answer(script.HOW_TO_DOWNLOAD.format(query.from_user.first_name), show_alert=True) + except: await query.message.edit(script.HOW_TO_DOWNLOAD.format(query.from_user.first_name)) + + elif query.data == "start": + buttons = [[ + InlineKeyboardButton("➕️ Aᴅᴅ Mᴇ Tᴏ Yᴏᴜʀ Cʜᴀᴛ ➕", url=f"http://t.me/{temp.U_NAME}?startgroup=true") + ],[ + InlineKeyboardButton("Sᴇᴀʀᴄʜ 🔎", switch_inline_query_current_chat=''), + InlineKeyboardButton("Cʜᴀɴɴᴇʟ 🔈", url="https://t.me/mkn_bots_updates") + ],[ + InlineKeyboardButton("Hᴇʟᴩ 🕸️", callback_data="help"), + InlineKeyboardButton("Aʙᴏᴜᴛ ✨", callback_data="about") + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), START_MESSAGE.format(user=query.from_user.mention, bot=client.mention), enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "help": + buttons = [[ + InlineKeyboardButton('⚙️ Aᴅᴍɪɴ Pᴀɴᴇʟ ⚙️', 'admin') + ],[ + InlineKeyboardButton('Fɪʟᴛᴇʀꜱ', 'openfilter'), + InlineKeyboardButton('Cᴏɴɴᴇᴄᴛ', 'coct') + ],[ + InlineKeyboardButton('Fɪʟᴇ Sᴛᴏʀᴇ', 'newdata'), + InlineKeyboardButton('Exᴛʀᴀ Mᴏᴅᴇ', 'extmod') + ],[ + InlineKeyboardButton('Gʀᴏᴜᴩ Mᴀɴᴀɢᴇʀ', 'gpmanager'), + InlineKeyboardButton('Bᴏᴛ Sᴛᴀᴛᴜꜱ ❄️', 'stats') + ],[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'start') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.HELP_TXT.format(query.from_user.mention), enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "about": + buttons= [[ + InlineKeyboardButton('Sᴏᴜʀᴄᴇ Cᴏᴅᴇ 📜', 'source') + ],[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'start') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.ABOUT_TXT.format(temp.B_NAME), enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "source": + buttons = [[ + InlineKeyboardButton('ꜱᴏᴜʀᴄᴇ ᴄᴏᴅᴇ', url='https://github.com/MrMKN/PROFESSOR-BOT') + ],[ + InlineKeyboardButton('‹ Bᴀᴄᴋ', 'about') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.SOURCE_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "admin": + buttons = [[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'help') + ]] + if query.from_user.id not in ADMINS: + return await query.answer("Sᴏʀʀʏ Tʜɪs Mᴇɴᴜ Oɴʟʏ Fᴏʀ Mʏ Aᴅᴍɪɴs ⚒️", show_alert=True) + await query.message.edit("Pʀᴏᴄᴇꜱꜱɪɴɢ Wᴀɪᴛ Fᴏʀ 15 ꜱᴇᴄ...") + total, used, free = shutil.disk_usage(".") + stats = script.SERVER_STATS.format(get_time(time.time() - client.uptime), psutil.cpu_percent(), psutil.virtual_memory().percent, humanbytes(total), humanbytes(used), psutil.disk_usage('/').percent, humanbytes(free)) + stats_pic = await make_carbon(stats, True) + await query.edit_message_media(InputMediaPhoto(stats_pic, script.ADMIN_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "openfilter": + buttons = [[ + InlineKeyboardButton('AᴜᴛᴏFɪʟᴛᴇʀ', 'autofilter'), + InlineKeyboardButton('MᴀɴᴜᴀʟFɪʟᴛᴇʀ', 'manuelfilter') + ],[ + InlineKeyboardButton('GʟᴏʙᴀʟFɪʟᴛᴇʀ', 'globalfilter') + ],[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'help') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.FILTER_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "autofilter": + buttons = [[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'openfilter') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.AUTOFILTER_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "manuelfilter": + buttons = [[ + InlineKeyboardButton('Bᴜᴛᴛᴏɴ Fᴏʀᴍᴀᴛ', 'button') + ],[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'openfilter') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.MANUELFILTER_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "globalfilter": + buttons = [[ + InlineKeyboardButton('Bᴜᴛᴛᴏɴ Fᴏʀᴍᴀᴛ', 'buttong') + ],[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'openfilter') + ]] + if query.from_user.id not in ADMINS: + return await query.answer("Sᴏʀʀʏ Tʜɪs Mᴇɴᴜ Oɴʟʏ Fᴏʀ Mʏ Aᴅᴍɪɴs ⚒️", show_alert=True) + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.GLOBALFILTER_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data.startswith("button"): + buttons = [[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', f"{'manuelfilter' if query.data == 'button' else 'globalfilter'}") + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.BUTTON_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "coct": + buttons = [[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'help') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.CONNECTION_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "newdata": + buttons = [[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'help') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.FILE_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "extmod": + buttons = [[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'help') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.EXTRAMOD_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "gpmanager": + buttons = [[ + InlineKeyboardButton('✘ Cʟᴏꜱᴇ', 'close_data'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'help') + ]] + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.GROUPMANAGER_TXT, enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data == "stats": + buttons = [[ + InlineKeyboardButton('⟳ Rᴇꜰʀᴇꜱʜ', 'stats'), + InlineKeyboardButton('« Bᴀᴄᴋ', 'help') + ]] + total = await Media.count_documents() + users = await db.total_users_count() + chats = await db.total_chat_count() + monsize = await db.get_db_size() + free = 536870912 - monsize + monsize = get_size(monsize) + free = get_size(free) + await query.message.edit('ʟᴏᴀᴅɪɴɢ....') + await query.edit_message_media(InputMediaPhoto(random.choice(PICS), script.STATUS_TXT.format(total, users, chats, monsize, free), enums.ParseMode.HTML), reply_markup=InlineKeyboardMarkup(buttons)) + + elif query.data.startswith("setgs"): + ident, set_type, status, grp_id = query.data.split("#") + grpid = await active_connection(str(query.from_user.id)) + if str(grp_id) != str(grpid): + return await query.message.edit("Yᴏᴜʀ Aᴄᴛɪᴠᴇ Cᴏɴɴᴇᴄᴛɪᴏɴ Hᴀs Bᴇᴇɴ Cʜᴀɴɢᴇᴅ. Gᴏ Tᴏ /settings") + if status == "True": await save_group_settings(grpid, set_type, False) + else: await save_group_settings(grpid, set_type, True) + settings = await get_settings(grpid) + if settings is not None: + buttons = [[ + InlineKeyboardButton(f"ꜰɪʟᴛᴇʀ ʙᴜᴛᴛᴏɴ : {'sɪɴɢʟᴇ' if settings['button'] else 'ᴅᴏᴜʙʟᴇ'}", f'setgs#button#{settings["button"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ꜰɪʟᴇ ɪɴ ᴩᴍ ꜱᴛᴀʀᴛ: {'ᴏɴ' if settings['botpm'] else 'ᴏꜰꜰ'}", f'setgs#botpm#{settings["botpm"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ʀᴇꜱᴛʀɪᴄᴛ ᴄᴏɴᴛᴇɴᴛ : {'ᴏɴ' if settings['file_secure'] else 'ᴏꜰꜰ'}", f'setgs#file_secure#{settings["file_secure"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ɪᴍᴅʙ ɪɴ ꜰɪʟᴛᴇʀ : {'ᴏɴ' if settings['imdb'] else 'ᴏꜰꜰ'}", f'setgs#imdb#{settings["imdb"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ꜱᴩᴇʟʟɪɴɢ ᴄʜᴇᴄᴋ : {'ᴏɴ' if settings['spell_check'] else 'ᴏꜰꜰ'}", f'setgs#spell_check#{settings["spell_check"]}#{str(grp_id)}') + ],[ + InlineKeyboardButton(f"ᴡᴇʟᴄᴏᴍᴇ ᴍᴇꜱꜱᴀɢᴇ : {'ᴏɴ' if settings['welcome'] else 'ᴏꜰꜰ'}", f'setgs#welcome#{settings["welcome"]}#{str(grp_id)}') + ]] + await query.message.edit_reply_markup(InlineKeyboardMarkup(buttons)) + + + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\carbon.py +from pyrogram import Client, filters +from pyrogram.types import * +from aiohttp import ClientSession +from telegraph import upload_file +from io import BytesIO + +ai_client = ClientSession() + +async def make_carbon(code, tele=False): + url = "https://carbonara.solopov.dev/api/cook" + async with ai_client.post(url, json={"code": code}) as resp: + image = BytesIO(await resp.read()) + image.name = "carbon.png" + if tele: + uf = upload_file(image) + image.close() + return f"https://graph.org{uf[0]}" + return image + + +@Client.on_message(filters.command("carbon")) +async def carbon_func(b, message): + if not message.reply_to_message: + return await message.reply_text("ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴛᴇxᴛ ᴍᴇssᴀɢᴇ ᴛᴏ ᴍᴀᴋᴇ ᴄᴀʀʙᴏɴ.") + if not message.reply_to_message.text: + return await message.reply_text("ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴛᴇxᴛ ᴍᴇssᴀɢᴇ ᴛᴏ ᴍᴀᴋᴇ ᴄᴀʀʙᴏɴ.") + user_id = message.from_user.id + m = await message.reply_text("ᴘʀᴏᴄᴇssɪɴɢ...") + carbon = await make_carbon(message.reply_to_message.text) + await m.edit("ᴜᴘʟᴏᴀᴅɪɴɢ..") + await message.reply_photo( + photo=carbon, + caption="**ᴍᴀᴅᴇ ʙʏ: @mkn_bots_updates**", + reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("ꜱᴜᴩᴩᴏʀᴛ ᴜꜱ", url="https://t.me/mkn_bots_updates")]]), + ) + await m.delete() + carbon.close() + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\font.py +import os +from image.font_string import Fonts +from pyrogram import Client, filters +from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup + + +@Client.on_message(filters.private & filters.command(["font"])) +async def style_buttons(c, m, cb=False): + buttons = [[ + InlineKeyboardButton('𝚃𝚢𝚙𝚎𝚠𝚛𝚒𝚝𝚎𝚛', callback_data='style+typewriter'), + InlineKeyboardButton('𝕆𝕦𝕥𝕝𝕚𝕟𝕖', callback_data='style+outline'), + InlineKeyboardButton('𝐒𝐞𝐫𝐢𝐟', callback_data='style+serif'), + ],[ + InlineKeyboardButton('𝑺𝒆𝒓𝒊𝒇', callback_data='style+bold_cool'), + InlineKeyboardButton('𝑆𝑒𝑟𝑖𝑓', callback_data='style+cool'), + InlineKeyboardButton('Sᴍᴀʟʟ Cᴀᴘs', callback_data='style+small_cap'), + ],[ + InlineKeyboardButton('𝓈𝒸𝓇𝒾𝓅𝓉', callback_data='style+script'), + InlineKeyboardButton('𝓼𝓬𝓻𝓲𝓹𝓽', callback_data='style+script_bolt'), + InlineKeyboardButton('ᵗⁱⁿʸ', callback_data='style+tiny'), + ],[ + InlineKeyboardButton('ᑕOᗰIᑕ', callback_data='style+comic'), + InlineKeyboardButton('𝗦𝗮𝗻𝘀', callback_data='style+sans'), + InlineKeyboardButton('𝙎𝙖𝙣𝙨', callback_data='style+slant_sans'), + ],[ + InlineKeyboardButton('𝘚𝘢𝘯𝘴', callback_data='style+slant'), + InlineKeyboardButton('𝖲𝖺𝗇𝗌', callback_data='style+sim'), + InlineKeyboardButton('Ⓒ︎Ⓘ︎Ⓡ︎Ⓒ︎Ⓛ︎Ⓔ︎Ⓢ︎', callback_data='style+circles') + ],[ + InlineKeyboardButton('🅒︎🅘︎🅡︎🅒︎🅛︎🅔︎🅢︎', callback_data='style+circle_dark'), + InlineKeyboardButton('𝔊𝔬𝔱𝔥𝔦𝔠', callback_data='style+gothic'), + InlineKeyboardButton('𝕲𝖔𝖙𝖍𝖎𝖈', callback_data='style+gothic_bolt'), + ],[ + InlineKeyboardButton('C͜͡l͜͡o͜͡u͜͡d͜͡s͜͡', callback_data='style+cloud'), + InlineKeyboardButton('H̆̈ă̈p̆̈p̆̈y̆̈', callback_data='style+happy'), + InlineKeyboardButton('S̑̈ȃ̈d̑̈', callback_data='style+sad'), + ],[ + InlineKeyboardButton('Next ➡️', callback_data="nxt") + ]] + if not cb: + if ' ' in m.text: + title = m.text.split(" ", 1)[1] + await m.reply_text(title, reply_markup=InlineKeyboardMarkup(buttons), reply_to_message_id=m.id) + else: + await m.reply_text(text="Ente Any Text Eg:- `/font [text]`") + else: + await m.answer() + await m.message.edit_reply_markup(InlineKeyboardMarkup(buttons)) + + +@Client.on_callback_query(filters.regex('^nxt')) +async def nxt(c, m): + if m.data == "nxt": + buttons = [[ + InlineKeyboardButton('🇸 🇵 🇪 🇨 🇮 🇦 🇱 ', callback_data='style+special'), + InlineKeyboardButton('🅂🅀🅄🄰🅁🄴🅂', callback_data='style+squares'), + InlineKeyboardButton('🆂︎🆀︎🆄︎🅰︎🆁︎🅴︎🆂︎', callback_data='style+squares_bold'), + ],[ + InlineKeyboardButton('ꪖꪀᦔꪖꪶꪊᥴ𝓲ꪖ', callback_data='style+andalucia'), + InlineKeyboardButton('爪卂几ᘜ卂', callback_data='style+manga'), + InlineKeyboardButton('S̾t̾i̾n̾k̾y̾', callback_data='style+stinky'), + ],[ + InlineKeyboardButton('B̥ͦu̥ͦb̥ͦb̥ͦl̥ͦe̥ͦs̥ͦ', callback_data='style+bubbles'), + InlineKeyboardButton('U͟n͟d͟e͟r͟l͟i͟n͟e͟', callback_data='style+underline'), + InlineKeyboardButton('꒒ꍏꀷꌩꌃꀎꁅ', callback_data='style+ladybug'), + ],[ + InlineKeyboardButton('R҉a҉y҉s҉', callback_data='style+rays'), + InlineKeyboardButton('B҈i҈r҈d҈s҈', callback_data='style+birds'), + InlineKeyboardButton('S̸l̸a̸s̸h̸', callback_data='style+slash'), + ],[ + InlineKeyboardButton('s⃠t⃠o⃠p⃠', callback_data='style+stop'), + InlineKeyboardButton('S̺͆k̺͆y̺͆l̺͆i̺͆n̺͆e̺͆', callback_data='style+skyline'), + InlineKeyboardButton('A͎r͎r͎o͎w͎s͎', callback_data='style+arrows'), + ],[ + InlineKeyboardButton('ዪሀክቿነ', callback_data='style+qvnes'), + InlineKeyboardButton('S̶t̶r̶i̶k̶e̶', callback_data='style+strike'), + InlineKeyboardButton('F༙r༙o༙z༙e༙n༙', callback_data='style+frozen') + ],[ + InlineKeyboardButton('⬅️ Back', callback_data='nxt+0') + ]] + await m.answer() + await m.message.edit_reply_markup(InlineKeyboardMarkup(buttons)) + else: + await style_buttons(c, m, cb=True) + + +@Client.on_callback_query(filters.regex('^style')) +async def style(c, m): + await m.answer() + cmd, style = m.data.split('+') + + if style == 'typewriter': + cls = Fonts.typewriter + if style == 'outline': + cls = Fonts.outline + if style == 'serif': + cls = Fonts.serief + if style == 'bold_cool': + cls = Fonts.bold_cool + if style == 'cool': + cls = Fonts.cool + if style == 'small_cap': + cls = Fonts.smallcap + if style == 'script': + cls = Fonts.script + if style == 'script_bolt': + cls = Fonts.bold_script + if style == 'tiny': + cls = Fonts.tiny + if style == 'comic': + cls = Fonts.comic + if style == 'sans': + cls = Fonts.san + if style == 'slant_sans': + cls = Fonts.slant_san + if style == 'slant': + cls = Fonts.slant + if style == 'sim': + cls = Fonts.sim + if style == 'circles': + cls = Fonts.circles + if style == 'circle_dark': + cls = Fonts.dark_circle + if style == 'gothic': + cls = Fonts.gothic + if style == 'gothic_bolt': + cls = Fonts.bold_gothic + if style == 'cloud': + cls = Fonts.cloud + if style == 'happy': + cls = Fonts.happy + if style == 'sad': + cls = Fonts.sad + if style == 'special': + cls = Fonts.special + if style == 'squares': + cls = Fonts.square + if style == 'squares_bold': + cls = Fonts.dark_square + if style == 'andalucia': + cls = Fonts.andalucia + if style == 'manga': + cls = Fonts.manga + if style == 'stinky': + cls = Fonts.stinky + if style == 'bubbles': + cls = Fonts.bubbles + if style == 'underline': + cls = Fonts.underline + if style == 'ladybug': + cls = Fonts.ladybug + if style == 'rays': + cls = Fonts.rays + if style == 'birds': + cls = Fonts.birds + if style == 'slash': + cls = Fonts.slash + if style == 'stop': + cls = Fonts.stop + if style == 'skyline': + cls = Fonts.skyline + if style == 'arrows': + cls = Fonts.arrows + if style == 'qvnes': + cls = Fonts.rvnes + if style == 'strike': + cls = Fonts.strike + if style == 'frozen': + cls = Fonts.frozen + + r, oldtxt = m.message.reply_to_message.text.split(None, 1) + new_text = cls(oldtxt) + try: + await m.message.edit_text(f"`{new_text}`\n\n👆 Click To Copy", reply_markup=m.message.reply_markup) + except Exception as e: + print(e) + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\group_manager.py +from pyrogram.types import * +from pyrogram.errors import FloodWait +from pyrogram import Client, filters, enums +from pyrogram.errors.exceptions.forbidden_403 import ChatWriteForbidden +from pyrogram.errors.exceptions.bad_request_400 import ChatAdminRequired, UserAdminInvalid + +from utils import extract_time, extract_user, admin_check, admin_filter +from info import ADMINS +from Script import script +from time import time +import asyncio + + + +@Client.on_message(filters.command("ban")) +async def ban_user(_, message): + is_admin = await admin_check(message) + if not is_admin: return + user_id, user_first_name = extract_user(message) + try: await message.chat.ban_member(user_id=user_id) + except Exception as error: await message.reply_text(str(error)) + else: + if str(user_id).lower().startswith("@"): + await message.reply_text(f"Someone else is dusting off..! \n{user_first_name} \nIs forbidden.") + else: + await message.reply_text(f"Someone else is dusting off..! \n{user_first_name} Is forbidden") + + +@Client.on_message(filters.command("tban")) +async def temp_ban_user(_, message): + is_admin = await admin_check(message) + if not is_admin: return + if not len(message.command) > 1: return + user_id, user_first_name = extract_user(message) + until_date_val = extract_time(message.command[1]) + if until_date_val is None: return await message.reply_text(text=f"Invalid time type specified. \nExpected m, h, or d, Got it: {message.command[1][-1]}") + try: await message.chat.ban_member(user_id=user_id, until_date=until_date_val) + except Exception as error: await message.reply_text(str(error)) + else: + if str(user_id).lower().startswith("@"): + await message.reply_text(f"Someone else is dusting off..!\n{user_first_name}\nbanned for {message.command[1]}!") + else: + await message.reply_text(f"Someone else is dusting off..!\nLavane\n banned for {message.command[1]}!") + + +@Client.on_message(filters.command(["unban", "unmute"])) +async def un_ban_user(_, message): + is_admin = await admin_check(message) + if not is_admin: return + user_id, user_first_name = extract_user(message) + try: await message.chat.unban_member(user_id=user_id) + except Exception as error: await message.reply_text(str(error)) + else: + if str(user_id).lower().startswith("@"): + await message.reply_text(f"Okay, changed ... now {user_first_name} To You can join the group!") + else: + await message.reply_text(f"Okay, changed ... now {user_first_name} To You can join the group!") + + +@Client.on_message(filters.command("mute")) +async def mute_user(_, message): + is_admin = await admin_check(message) + if not is_admin: return + user_id, user_first_name = extract_user(message) + try: await message.chat.restrict_member(user_id=user_id, permissions=ChatPermissions()) + except Exception as error: await message.reply_text(str(error)) + else: + if str(user_id).lower().startswith("@"): + await message.reply_text(f"👍🏻 {user_first_name} Lavender's mouth is shut! 🤐") + else: + await message.reply_text(f"👍🏻 Of lavender The mouth is closed! 🤐") + + +@Client.on_message(filters.command("tmute")) +async def temp_mute_user(_, message): + is_admin = await admin_check(message) + if not is_admin: return + if not len(message.command) > 1: return + user_id, user_first_name = extract_user(message) + until_date_val = extract_time(message.command[1]) + if until_date_val is None: + return await message.reply_text(f"Invalid time type specified. Expected m, h, or d, Got it: {message.command[1][-1]}") + try: + await message.chat.restrict_member(user_id=user_id, permissions=ChatPermissions(), until_date=until_date_val) + except Exception as error: + await message.reply_text(str(error)) + else: + if str(user_id).lower().startswith("@"): + await message.reply_text(f"Be quiet for a while! 😠 {user_first_name} muted for {message.command[1]}!") + else: + await message.reply_text(f"Be quiet for a while! 😠 Of lavender Mouth muted for {message.command[1]}!") + + +@Client.on_message(filters.command("pin") & filters.create(admin_filter)) +async def pin(_, message: Message): + if not message.reply_to_message: return + await message.reply_to_message.pin() + + +@Client.on_message(filters.command("unpin") & filters.create(admin_filter)) +async def unpin(_, message: Message): + if not message.reply_to_message: return + await message.reply_to_message.unpin() + + + +@Client.on_message(filters.command("purge") & (filters.group | filters.channel)) +async def purge(client, message): + if message.chat.type not in ((enums.ChatType.SUPERGROUP, enums.ChatType.CHANNEL)): return + is_admin = await admin_check(message) + if not is_admin: return + status_message = await message.reply_text("...", quote=True) + await message.delete() + message_ids = [] + count_del_etion_s = 0 + if message.reply_to_message: + for a_s_message_id in range(message.reply_to_message.id, message.id): + message_ids.append(a_s_message_id) + if len(message_ids) == "100": + await client.delete_messages(chat_id=message.chat.id, message_ids=message_ids, revoke=True) + count_del_etion_s += len(message_ids) + message_ids = [] + if len(message_ids) > 0: + await client.delete_messages(chat_id=message.chat.id, message_ids=message_ids, revoke=True) + count_del_etion_s += len(message_ids) + await status_message.edit_text(f"deleted {count_del_etion_s} messages") + await status_message.delete() + + +@Client.on_message(filters.group & filters.command('inkick')) +async def inkick(client, message): + user = await client.get_chat_member(message.chat.id, message.from_user.id) + if user.status not in (enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER): + note = await message.reply_text(script.CREATOR_REQUIRED) + await asyncio.sleep(3) + await note.delete() + return await message.delete() + if len(message.command) > 1: + input_str = message.command + sent_message = await message.reply_text(script.START_KICK) + await asyncio.sleep(2) + await message.delete() + count = 0 + for member in client.get_chat_members(message.chat.id): + if member.user.status in input_str and not member.status in (enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER): + try: + client.ban_chat_member(message.chat.id, member.user.id, int(time() + 45)) + count += 1 + except (ChatAdminRequired, UserAdminInvalid): + await sent_message.edit(script.ADMIN_REQUIRED) + await client.leave_chat(message.chat.id) + break + except FloodWait as e: + await asyncio.sleep(e.value) + try: + await sent_message.edit(script.KICKED.format(count)) + except ChatWriteForbidden: pass + else: + await message.reply_text(script.INPUT_REQUIRED) + + +@Client.on_message(filters.group & filters.command('dkick')) +async def dkick(client, message): + user = await client.get_chat_member(message.chat.id, message.from_user.id) + if user.status not in (enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER): + note = await message.reply_text(script.CREATOR_REQUIRED) + await asyncio.sleep(3) + await note.delete() + return await message.delete() + sent_message = await message.reply_text(script.START_KICK) + await message.delete() + count = 0 + for member in client.get_chat_members(message.chat.id): + if member.user.is_deleted and not member.status in (enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER): + try: + await client.ban_chat_member(message.chat.id, member.user.id, int(time() + 45)) + count += 1 + except (ChatAdminRequired, UserAdminInvalid): + await sent_message.edit(script.ADMIN_REQUIRED) + await client.leave_chat(message.chat.id) + break + except FloodWait as e: + await asyncio.sleep(e.value) + try: + await sent_message.edit(script.DKICK.format(count)) + except ChatWriteForbidden: pass + + +@Client.on_message((filters.channel | filters.group) & filters.command('instatus')) +async def instatus(client, message): + user = await client.get_chat_member(message.chat.id, message.from_user.id) + if user.status not in (enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER, ADMINS): + note = await message.reply("you are not administrator in this chat") + await asyncio.sleep(3) + await message.delete() + return await note.delete() + sent_message = await message.reply_text("🔁 Processing.....") + recently = 0 + within_week = 0 + within_month = 0 + long_time_ago = 0 + deleted_acc = 0 + uncached = 0 + bot = 0 + for member in client.get_chat_members(message.chat.id): + if member.user.is_deleted: deleted_acc += 1 + elif member.user.is_bot: bot += 1 + elif member.user.status == enums.UserStatus.RECENTLY: recently += 1 + elif member.user.status == enums.UserStatus.LAST_WEEK: within_week += 1 + elif member.user.status == enums.UserStatus.LAST_MONTH: within_month += 1 + elif member.user.status == enums.UserStatus.LONG_AGO: long_time_ago += 1 + else: uncached += 1 + if message.chat.type == enums.ChatType.CHANNEL: + await sent_message.edit(f"{message.chat.title}\nChat Member Status\n\nRecently - {recently}\nWithin Week - {within_week}\nWithin Month - {within_month}\nLong Time Ago - {long_time_ago}\n\nDeleted Account - {deleted_acc}\nBot - {bot}\nUnCached - {uncached}") + elif message.chat.type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: + await sent_message.edit(f"{message.chat.title}\nChat Member Status\n\nRecently - {recently}\nWithin Week - {within_week}\nWithin Month - {within_month}\nLong Time Ago - {long_time_ago}\n\nDeleted Account - {deleted_acc}\nBot - {bot}\nUnCached - {uncached}") + + + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\json.py +import os +from pyrogram import Client, filters +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, Message, CallbackQuery + +@Client.on_message(filters.command(["json", 'js'])) +async def jsonify(_, message): + the_real_message = None + reply_to_id = None + pk = InlineKeyboardMarkup([[InlineKeyboardButton(text="𝙲𝙻𝙾𝚂𝙴", callback_data="close_data")]]) + + if message.reply_to_message: + the_real_message = message.reply_to_message + else: + the_real_message = message + + try: + await message.reply_text(f"{the_real_message}", reply_markup=pk, quote=True) + except Exception as e: + with open("json.text", "w+", encoding="utf8") as out_file: + out_file.write(str(the_real_message)) + await message.reply_document( + document="json.text", + caption=str(e), + disable_notification=True, + quote=True, + reply_markup=reply_markup + ) + os.remove("json.text") + + +@Client.on_message(filters.command("written")) +async def create_file(c, message): + content = message.reply_to_message.text + file_name = message.text.split(" ", 1)[1] + try: + with open(str(file_name), "w+") as out: + out.write(str(content)) + await message.reply_document( + document=str(file_name), + caption="out put file" + ) + os.remove(str(file_name)) + except Exception as e: + await message.reply(e) + + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\lyrics.py +from pyrogram import Client, filters +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton +import requests, os + + +API = "https://apis.xditya.me/lyrics?song=" + +@Client.on_message(filters.text & filters.command(["lyrics"])) +async def sng(bot, message): + if not message.reply_to_message: + await message.reply_text("Pʟᴇᴀꜱᴇ Rᴇᴩʟʏ To A Mᴇꜱꜱᴀɢᴇ") + else: + mee = await message.reply_text("`Sᴇᴀʀᴄʜɪɴɢ 🔎`") + song = message.reply_to_message.text + chat_id = message.from_user.id + rpl = lyrics(song) + await mee.delete() + try: + await mee.delete() + await bot.send_message(chat_id, text = rpl, reply_to_message_id = message.id, reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton("ᴜᴘᴅᴀᴛᴇs", url = f"t.me/mkn_bots_updates")]])) + except Exception as e: + await message.reply_text(f"I Cᴀɴ'ᴛ Fɪɴᴅ A Sᴏɴɢ Wɪᴛʜ `{song}`", quote = True, reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton("ᴜᴘᴅᴀᴛᴇs", url = f"t.me/mkn_bots_updates")]])) + + +def search(song): + r = requests.get(API + song) + find = r.json() + return find + +def lyrics(song): + fin = search(song) + text = f'**🎶 Sᴜᴄᴄᴇꜱꜰᴜʟʟy Exᴛʀᴀᴄᴛᴇᴅ Lyɪʀɪᴄꜱ Oꜰ {song}**\n\n' + text += f'`{fin["lyrics"]}`' + text += '\n\n\n**Mᴀᴅᴇ Bʏ AI**' + return text + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\password.py +import random, os +from pyrogram import Client, filters, enums +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton + + +@Client.on_message(filters.command(["genpassword", 'genpw'])) +async def password(bot, update): + message = await update.reply_text(text="`Pʀᴏᴄᴇꜱꜱɪɴɢ..`") + password = "abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()_+".lower() + if len(update.command) > 1: + qw = update.text.split(" ", 1)[1] + else: + ST = ["5", "7", "6", "9", "10", "12", "14", "8", "13"] + qw = random.choice(ST) + limit = int(qw) + random_value = "".join(random.sample(password, limit)) + txt = f"Lɪᴍɪᴛ: {str(limit)} \nPᴀꜱꜱᴡᴏʀᴅ: {random_value}" + btn = InlineKeyboardMarkup([[InlineKeyboardButton('Mᴋɴ Bᴏᴛᴢ™️', url='https://t.me/mkn_bots_updates')]]) + await message.edit_text(text=txt, reply_markup=btn, parse_mode=enums.ParseMode.HTML) + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\paste.py +import os, re, json, aiohttp, requests +from pyrogram import Client, filters + +#Headers +headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36", + "content-type": "application/json", +} + +#Pastebins +async def p_paste(message, extension=None): + siteurl = "https://pasty.lus.pm/api/v1/pastes" + data = {"content": message} + try: + response = requests.post(url=siteurl, data=json.dumps(data), headers=headers) + except Exception as e: + return {"error": str(e)} + if response.ok: + response = response.json() + purl = ( + f"https://pasty.lus.pm/{response['id']}.{extension}" + if extension + else f"https://pasty.lus.pm/{response['id']}.txt" + ) + return { + "url": purl, + "raw": f"https://pasty.lus.pm/{response['id']}/raw", + "bin": "Pasty", + } + return {"error": "UNABLE TO REACH pasty.lus.pm"} + + + +@Client.on_message(filters.command(["tgpaste", "pasty", "paste"])) +async def pasty(client, message): + pablo = await message.reply_text("`Pʟᴇᴀꜱᴇ Wᴀɪᴛ...`") + tex_t = message.text + if ' ' in message.text: + message_s = message.text.split(" ", 1)[1] + elif message.reply_to_message: + message_s = message.reply_to_message.text + else: + await message.reply("Sᴏʀʀʏ No Iɴ Pᴜᴛ. Pʟᴇᴀꜱᴇ Rᴇᴩʟʏ To A Tᴇxᴛ Oʀ /paste Wɪᴛʜ Tᴇxᴛ") + if not tex_t: + if not message.reply_to_message: + await pablo.edit("Oɴʟʏ Tᴇxᴛ Aɴᴅ Dᴏᴄᴜᴍᴇɴᴛs Aʀᴇ Sᴜᴘᴘᴏʀᴛᴇᴅ") + return + if not message.reply_to_message.text: + file = await message.reply_to_message.download() + m_list = open(file, "r").read() + message_s = m_list + os.remove(file) + elif message.reply_to_message.text: + message_s = message.reply_to_message.text + + ext = "py" + x = await p_paste(message_s, ext) + p_link = x["url"] + p_raw = x["raw"] + + pasted = f"**Sᴜᴄᴄᴇssғᴜʟʟʏ Pᴀsᴛᴇ Tᴏ Pᴀsᴛʏ**\n\n**Lɪɴᴋ:** • [CʟɪᴄᴋHᴇʀᴇ]({p_link})\n\n**Rᴀᴡ Lɪɴᴋ:** • [CʟɪᴄᴋHᴇʀᴇ]({p_raw})" + await pablo.edit(pasted, disable_web_page_preview=True) + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\photo.py +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton +from pyrogram import Client, filters + + +@Client.on_message(filters.photo & filters.private) +async def photo_handler(client, message): + buttons = [[ + InlineKeyboardButton(text="𝖡𝗋𝗂𝗀𝗍𝗁", callback_data="bright"), + InlineKeyboardButton(text="𝖬𝗂𝗑𝖾𝖽", callback_data="mix"), + InlineKeyboardButton(text="𝖡 & 𝖶", callback_data="b|w"), + ],[ + InlineKeyboardButton(text="𝖢𝗂𝗋𝖼𝗅𝖾", callback_data="circle"), + InlineKeyboardButton(text="𝖡𝗅𝗎𝗋", callback_data="blur"), + InlineKeyboardButton(text="𝖡𝗈𝗋𝖽𝖾𝗋", callback_data="border"), + ],[ + InlineKeyboardButton(text="𝖲𝗍𝗂𝖼𝗄𝖾𝗋", callback_data="stick"), + InlineKeyboardButton(text="𝖱𝗈𝗍𝖺𝗍𝖾", callback_data="rotate"), + InlineKeyboardButton(text="𝖢𝗈𝗇𝗍𝗋𝖺𝗌𝗍", callback_data="contrast"), + ],[ + InlineKeyboardButton(text="𝖲𝖾𝗉𝗂𝖺", callback_data="sepia"), + InlineKeyboardButton(text="𝖯𝖾𝗇𝖼𝗂𝗅", callback_data="pencil"), + InlineKeyboardButton(text="𝖢𝖺𝗋𝗍𝗈𝗈𝗇", callback_data="cartoon"), + ],[ + InlineKeyboardButton(text="𝖨𝗇𝗏𝖾𝗋𝗍", callback_data="inverted"), + InlineKeyboardButton(text="𝖦𝗅𝗂𝗍𝖼𝗁", callback_data="glitch"), + InlineKeyboardButton(text="𝖱𝖾𝗆𝗈𝗏𝖾 𝖡𝖦", callback_data="removebg"), + ],[ + InlineKeyboardButton(text="𝖢𝗅𝗈𝗌𝖾", callback_data="close_data"), + ]] + try: + await message.reply(text="Select Your Required Mode From Below", quote=True, reply_markup=InlineKeyboardMarkup(buttons)) + except Exception as e: + print(e) + if "USER_IS_BLOCKED" in str(e): return + try: await message.reply_text(f"{e} \nSomething Went Wrong!", quote=True) + except Exception: return + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\share_text.py +import os +from pyrogram import Client, filters +from urllib.parse import quote +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton + +@Client.on_message(filters.command(["share_text", "share", "sharetext",])) +async def share_text(client, message): + reply = message.reply_to_message + reply_id = message.reply_to_message.id if message.reply_to_message else message.id + input_split = message.text.split(None, 1) + if len(input_split) == 2: + input_text = input_split[1] + elif reply and (reply.text or reply.caption): + input_text = reply.text or reply.caption + else: + await message.reply_text( + text=f"**Notice:**\n\n1. Reply Any Messages.\n2. No Media Support\n\n**Any Question Join Support Chat**", + reply_to_message_id=reply_id, + reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("Support Chat", url=f"https://t.me/MKN_BOTZ_DISCUSSION_GROUP")]]) + ) + return + await message.reply_text( + text=f"**Here is Your Sharing Text 👇**\n\nhttps://t.me/share/url?url=" + quote(input_text), + reply_to_message_id=reply_id, + reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("♂️ Share", url=f"https://t.me/share/url?url={quote(input_text)}")]]) + ) + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\telegraph.py +import os, asyncio +from pyrogram import Client, filters +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, Message, CallbackQuery +from telegraph import upload_file +from utils import get_file_id + + +@Client.on_message(filters.command("telegraph") & filters.private) +async def telegraph_upload(bot, update): + # Service Stopped + return await update.reply("🥲 This service is stopped due to https://t.me/durov/343") + + replied = update.reply_to_message + if not replied: + return await update.reply_text("Rᴇᴘʟʏ Tᴏ A Pʜᴏᴛᴏ Oʀ Vɪᴅᴇᴏ Uɴᴅᴇʀ 5ᴍʙ") + file_info = get_file_id(replied) + if not file_info: + return await update.reply_text("Not Supported!") + text = await update.reply_text(text="Downloading To My Server ...", disable_web_page_preview=True) + media = await update.reply_to_message.download() + await text.edit_text(text="Downloading Completed. Now I am Uploading to telegra.ph Link ...", disable_web_page_preview=True) + try: + response = upload_file(media) + except Exception as error: + print(error) + await text.edit_text(text=f"Error :- {error}", disable_web_page_preview=True) + return + try: + os.remove(media) + except Exception as error: + print(error) + return + await text.edit_text( + text=f"Link :-\n\nhttps://graph.org{response[0]}", + disable_web_page_preview=True, + reply_markup=InlineKeyboardMarkup( [[ + InlineKeyboardButton(text="Open Link", url=f"https://graph.org{response[0]}"), + InlineKeyboardButton(text="Share Link", url=f"https://telegram.me/share/url?url=https://graph.org{response[0]}") + ],[ + InlineKeyboardButton(text="✗ Close ✗", callback_data="close") + ]]) + ) + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\tts.py + +import traceback +from asyncio import get_running_loop +from io import BytesIO + +from googletrans import Translator +from gtts import gTTS +from pyrogram import Client, filters +from pyrogram.types import Message + + +def convert(text): + audio = BytesIO() + i = Translator().translate(text, dest="en") + lang = i.src + tts = gTTS(text, lang=lang) + audio.name = lang + ".mp3" + tts.write_to_fp(audio) + return audio + + +@Client.on_message(filters.command("tts")) +async def text_to_speech(_, message: Message): + if not message.reply_to_message: + return await message.reply_text("Reply To Some Text FFS.") + if not message.reply_to_message.text: + return await message.reply_text("Reply To Some TextFFS.") + m = await message.reply_text("Processing") + text = message.reply_to_message.text + try: + loop = get_running_loop() + audio = await loop.run_in_executor(None, convert, text) + await message.reply_audio(audio) + await m.delete() + audio.close() + except Exception as e: + await m.edit(e) + e = traceback.format_exc() + print(e) + + + + +================================================================================ + +# File: C:\Users\Shakeel\Desktop\PROFESSOR\plugins\ExtraMods\yt_dl.py +from __future__ import unicode_literals + +import os, requests, asyncio, math, time, wget +from pyrogram import filters, Client +from pyrogram.types import Message + +from youtube_search import YoutubeSearch +from youtubesearchpython import SearchVideos +from yt_dlp import YoutubeDL + + +@Client.on_message(filters.command(['song', 'mp3']) & filters.private) +async def song(client, message): + user_id = message.from_user.id + user_name = message.from_user.first_name + rpk = "["+user_name+"](tg://user?id="+str(user_id)+")" + query = '' + for i in message.command[1:]: + query += ' ' + str(i) + print(query) + m = await message.reply(f"**ѕєαrchíng чσur ѕσng...!\n {query}**") + ydl_opts = {"format": "bestaudio[ext=m4a]"} + try: + results = YoutubeSearch(query, max_results=1).to_dict() + link = f"https://youtube.com{results[0]['url_suffix']}" + title = results[0]["title"][:40] + thumbnail = results[0]["thumbnails"][0] + thumb_name = f'thumb{title}.jpg' + thumb = requests.get(thumbnail, allow_redirects=True) + open(thumb_name, 'wb').write(thumb.content) + performer = f"[Mᴋɴ Bᴏᴛᴢ™]" + duration = results[0]["duration"] + url_suffix = results[0]["url_suffix"] + views = results[0]["views"] + except Exception as e: + print(str(e)) + return await m.edit("**𝙵𝙾𝚄𝙽𝙳 𝙽𝙾𝚃𝙷𝙸𝙽𝙶 𝙿𝙻𝙴𝙰𝚂𝙴 𝙲𝙾𝚁𝚁𝙴𝙲𝚃 𝚃𝙷𝙴 𝚂𝙿𝙴𝙻𝙻𝙸𝙽𝙶 𝙾𝚁 𝙲𝙷𝙴𝙲𝙺 𝚃𝙷𝙴 𝙻𝙸𝙽𝙺**") + + await m.edit("**dσwnlσαdíng чσur ѕσng...!**") + try: + with YoutubeDL(ydl_opts) as ydl: + info_dict = ydl.extract_info(link, download=False) + audio_file = ydl.prepare_filename(info_dict) + ydl.process_info(info_dict) + + cap = "**BY›› [Mᴋɴ Bᴏᴛᴢ™](https://t.me/mkn_bots_updates)**" + secmul, dur, dur_arr = 1, 0, duration.split(':') + for i in range(len(dur_arr)-1, -1, -1): + dur += (int(dur_arr[i]) * secmul) + secmul *= 60 + await message.reply_audio( + audio_file, + caption=cap, + quote=False, + title=title, + duration=dur, + performer=performer, + thumb=thumb_name + ) + await m.delete() + except Exception as e: + await m.edit("**🚫 𝙴𝚁𝚁𝙾𝚁 🚫**") + print(e) + try: + os.remove(audio_file) + os.remove(thumb_name) + except Exception as e: + print(e) + +def get_text(message: Message) -> [None,str]: + text_to_return = message.text + if message.text is None: + return None + if " " not in text_to_return: + return None + try: + return message.text.split(None, 1)[1] + except IndexError: + return None + + +@Client.on_message(filters.command(["video", "mp4"])) +async def vsong(client, message: Message): + urlissed = get_text(message) + pablo = await client.send_message(message.chat.id, f"**𝙵𝙸𝙽𝙳𝙸𝙽𝙶 𝚈𝙾𝚄𝚁 𝚅𝙸𝙳𝙴𝙾** `{urlissed}`") + if not urlissed: + return await pablo.edit("Invalid Command Syntax Please Check help Menu To Know More!") + search = SearchVideos(f"{urlissed}", offset=1, mode="dict", max_results=1) + mi = search.result() + mio = mi["search_result"] + mo = mio[0]["link"] + thum = mio[0]["title"] + fridayz = mio[0]["id"] + mio[0]["channel"] + kekme = f"https://img.youtube.com/vi/{fridayz}/hqdefault.jpg" + await asyncio.sleep(0.6) + url = mo + sedlyf = wget.download(kekme) + opts = { + "format": "best", + "addmetadata": True, + "key": "FFmpegMetadata", + "prefer_ffmpeg": True, + "geo_bypass": True, + "nocheckcertificate": True, + "postprocessors": [{"key": "FFmpegVideoConvertor", "preferedformat": "mp4"}], + "outtmpl": "%(id)s.mp4", + "logtostderr": False, + "quiet": True, + } + try: + with YoutubeDL(opts) as ytdl: + ytdl_data = ytdl.extract_info(url, download=True) + except Exception as e: + return await pablo.edit_text(f"**𝙳𝚘𝚠𝚗𝚕𝚘𝚊𝚍 𝙵𝚊𝚒𝚕𝚎𝚍 𝙿𝚕𝚎𝚊𝚜𝚎 𝚃𝚛𝚢 𝙰𝚐𝚊𝚒𝚗..♥️** \n**Error :** `{str(e)}`") + + file_stark = f"{ytdl_data['id']}.mp4" + capy = f"""**𝚃𝙸𝚃𝙻𝙴 :** [{thum}]({mo})\n**𝚁𝙴𝚀𝚄𝙴𝚂𝚃𝙴𝙳 𝙱𝚈 :** {message.from_user.mention}""" + + await client.send_video( + message.chat.id, + video=open(file_stark, "rb"), + duration=int(ytdl_data["duration"]), + file_name=str(ytdl_data["title"]), + thumb=sedlyf, + caption=capy, + supports_streaming=True, + reply_to_message_id=message.id + ) + await pablo.delete() + for files in (sedlyf, file_stark): + if files and os.path.exists(files): + os.remove(files) + +================================================================================ +