├── Dockerfile ├── Procfile ├── README.md ├── app.py ├── client.py ├── heroku.yml ├── info.py ├── main.py ├── plugins ├── TechVJ ├── broadcast.py ├── connect.py ├── fsub.py ├── generate.py ├── misc.py ├── newgroup.py ├── search.py └── verify.py ├── requirements.txt ├── run cmd.txt └── utils ├── TechVJ ├── __init__.py ├── helpers.py └── script.py /Dockerfile: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot @Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | FROM python:3.10.8-slim-buster 6 | 7 | RUN apt update && apt upgrade -y 8 | RUN apt install git -y 9 | COPY requirements.txt /requirements.txt 10 | 11 | RUN cd / 12 | RUN pip3 install -U pip && pip3 install -U -r requirements.txt 13 | RUN mkdir /VJ-Post-Search-Bot 14 | WORKDIR /VJ-Post-Search-Bot 15 | COPY . /VJ-Post-Search-Bot 16 | CMD gunicorn app:app & python3 main.py 17 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | worker: python3 main.py 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | VJ-POST-SEARCH-BOT Logo 3 |

4 |

5 | VJ POST SEARCH BOT 6 |

7 | 8 | ## Deploy Tutorial - [Video Link](https://youtu.be/ODGrhh1L0ls) 9 | 10 | ## Features 11 | 12 | - connect multiple channel 13 | - set fsub 14 | - no telegram message length limit, added chunk 15 | - auto delete 16 | - fully modified repo 17 | - no string session required ( login required by bot owner ) 18 | - broadcast command ( for owner only ) 19 | 20 | ## Credit 21 | 22 |
Tap On Me For See Credit 23 | 24 | 💝 Credit Goes To [Tech VJ](https://telegram.me/Kingvj01) So Don't Forgot To Give Credit 25 | 26 | 💘 Base Repo Credit [CyniteOfficial](https://github.com/CyniteOfficial) 27 | 28 | 💖 And Thank You So Much To All Who Help In This Journey 💕 29 | 30 | Copyright ©️ [Tech VJ](https://telegram.me/Kingvj01) 31 | 32 | 33 |
34 | 35 | ## About Owner 36 | 37 |
Tap On Me For See Details Of Owner 38 | 39 | - YouTube Channel : [Tech VJ](https://youtube.com/@Tech_VJ) 40 | - Telegram Channel : [VJ Botz](https://telegram.me/VJ_Botz) 41 | - Contact Link : [King VJ](https://telegram.me/Kingvj01) 42 | - Instagram Id Link : [Tech VJ](https://instagram.com/tech.vj) 43 | 44 | 45 |
46 | 47 | 48 | ### Copyright ©️ [Tech VJ](https://telegram.me/Kingvj01) 49 | 50 | Selling This Repo Or Code Of This Repo For Money Is Strictly Prohibited 🚫 51 | 52 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | from flask import Flask 6 | app = Flask(__name__) 7 | 8 | @app.route('/') 9 | def hello_world(): 10 | return 'TechVJ' 11 | 12 | 13 | if __name__ == "__main__": 14 | app.run() 15 | -------------------------------------------------------------------------------- /client.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | from info import * 6 | from pyrogram import Client 7 | 8 | class Bot(Client): 9 | def __init__(self): 10 | super().__init__( 11 | "vj-post-search-bot", 12 | api_id=API_ID, 13 | api_hash=API_HASH, 14 | bot_token=BOT_TOKEN, 15 | plugins={"root": "plugins"}) 16 | async def start(self): 17 | await super().start() 18 | print("Bot Started 🔧 Powered By @VJ_Botz") 19 | async def stop(self, *args): 20 | await super().stop() 21 | -------------------------------------------------------------------------------- /heroku.yml: -------------------------------------------------------------------------------- 1 | build: 2 | docker: 3 | worker: Dockerfile 4 | -------------------------------------------------------------------------------- /info.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | # Never Give DATABASE_URI And BOT_TOKEN Here If Repo Is Forked Or Public Because This May Lead Account Ban. 6 | 7 | import os 8 | from os import environ 9 | 10 | API_ID = int(environ.get("API_ID", "")) 11 | API_HASH = environ.get("API_HASH", "") 12 | BOT_TOKEN = environ.get("BOT_TOKEN", "") 13 | DATABASE_URI = environ.get("DATABASE_URI", "") 14 | LOG_CHANNEL = int(environ.get("LOG_CHANNEL", "")) 15 | ADMIN = int(environ.get("ADMIN", "")) 16 | CHANNEL = environ.get("CHANNEL", "@VJ_Botz") 17 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | from client import Bot 6 | 7 | print("Bot Started 👍 Powered By @VJ_Botz") 8 | Bot().run() 9 | 10 | -------------------------------------------------------------------------------- /plugins/TechVJ: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /plugins/broadcast.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | import datetime 6 | import time 7 | from info import * 8 | from utils import * 9 | from pyrogram import Client, filters 10 | from pyrogram.errors import FloodWait 11 | import asyncio 12 | 13 | @Client.on_message(filters.command('broadcast') & filters.user(ADMIN)) 14 | async def broadcast(bot, message): 15 | if not message.reply_to_message: 16 | return await message.reply("Use this command as a reply to any message!") 17 | m=await message.reply("Please wait...") 18 | 19 | count, users = await get_users() 20 | stats = "⚡ Broadcast Processing.." 21 | br_msg = message.reply_to_message 22 | total = count 23 | remaining = total 24 | success = 0 25 | failed = 0 26 | 27 | for user in users: 28 | chat_id = user["_id"] 29 | trying = await copy_msgs(br_msg, chat_id) 30 | if trying==False: 31 | failed+=1 32 | remaining-=1 33 | else: 34 | success+=1 35 | remaining-=1 36 | try: 37 | await m.edit(script.BROADCAST.format(stats, total, remaining, success, failed)) 38 | except: 39 | pass 40 | stats = "✅ Broadcast Completed" 41 | await m.reply(script.BROADCAST.format(stats, total, remaining, success, failed)) 42 | await m.delete() 43 | 44 | 45 | @Client.on_message(filters.command('broadcast_groups') & filters.user(ADMIN)) 46 | async def grp_broadcast(bot, message): 47 | if not message.reply_to_message: 48 | return await message.reply("Use this command as a reply to any message!") 49 | m=await message.reply("Please wait...") 50 | 51 | count, groups = await get_groups() 52 | stats = "⚡ Broadcast Processing.." 53 | br_msg = message.reply_to_message 54 | total = count 55 | remaining = total 56 | success = 0 57 | failed = 0 58 | 59 | for group in groups: 60 | chat_id = group["_id"] 61 | trying = await grp_copy_msgs(br_msg, chat_id) 62 | if trying==False: 63 | failed+=1 64 | remaining-=1 65 | else: 66 | success+=1 67 | remaining-=1 68 | try: 69 | await m.edit(script.BROADCAST.format(stats, total, remaining, success, failed)) 70 | except: 71 | pass 72 | stats = "✅ Broadcast Completed" 73 | await m.reply(script.BROADCAST.format(stats, total, remaining, success, failed)) 74 | await m.delete() 75 | 76 | 77 | 78 | async def grp_copy_msgs(br_msg, chat_id): 79 | try: 80 | h = await br_msg.copy(chat_id) 81 | try: 82 | await h.pin() 83 | except: 84 | pass 85 | except FloodWait as e: 86 | await asyncio.sleep(e.value) 87 | await copy_msgs(br_msg, chat_id) 88 | except Exception as e: 89 | await delete_group(chat_id) 90 | return False 91 | 92 | 93 | async def copy_msgs(br_msg, chat_id): 94 | try: 95 | await br_msg.copy(chat_id) 96 | except FloodWait as e: 97 | await asyncio.sleep(e.value) 98 | await copy_msgs(br_msg, chat_id) 99 | except Exception as e: 100 | await delete_user(chat_id) 101 | return False 102 | -------------------------------------------------------------------------------- /plugins/connect.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | from info import * 6 | from utils import * 7 | from plugins.generate import database 8 | from pyrogram import Client, filters 9 | 10 | @Client.on_message(filters.group & filters.command("connect")) 11 | async def connect(bot, message): 12 | m=await message.reply("connecting..") 13 | vj = database.find_one({"chat_id": ADMIN}) 14 | if vj == None: 15 | return await message.reply("**Contact Admin Then Say To Login In Bot.**") 16 | User = Client("post_search", session_string=vj['session'], api_hash=API_HASH, api_id=API_ID) 17 | await User.connect() 18 | user = await User.get_me() 19 | try: 20 | group = await get_group(message.chat.id) 21 | user_id = group["user_id"] 22 | user_name = group["user_name"] 23 | verified = group["verified"] 24 | channels = group["channels"].copy() 25 | except : 26 | return await bot.leave_chat(message.chat.id) 27 | if message.from_user.id!=user_id: 28 | return await m.edit(f"Only {user_name} can use this command 😁") 29 | if bool(verified)==False: 30 | return await m.edit("💢 This chat is not verified!\n⭕ use /verify") 31 | try: 32 | channel = int(message.command[-1]) 33 | if channel in channels: 34 | return await message.reply("💢 This channel is already connected! You Cant Connect Again") 35 | channels.append(channel) 36 | except: 37 | return await m.edit("❌ Incorrect format!\nUse `/connect ChannelID`") 38 | try: 39 | chat = await bot.get_chat(channel) 40 | group = await bot.get_chat(message.chat.id) 41 | c_link = chat.invite_link 42 | g_link = group.invite_link 43 | await User.join_chat(c_link) 44 | except Exception as e: 45 | if "The user is already a participant" in str(e): 46 | pass 47 | else: 48 | text = f"❌ Error: `{str(e)}`\n⭕ Make sure I'm admin in that channel & this group with all permissions and {user.mention} is not banned there" 49 | return await m.edit(text) 50 | await update_group(message.chat.id, {"channels":channels}) 51 | await m.edit(f"💢 Successfully connected to [{chat.title}]({c_link})!", disable_web_page_preview=True) 52 | text = f"#NewConnection\n\nUser: {message.from_user.mention}\nGroup: [{group.title}]({g_link})\nChannel: [{chat.title}]({c_link})" 53 | await bot.send_message(chat_id=LOG_CHANNEL, text=text) 54 | 55 | 56 | @Client.on_message(filters.group & filters.command("disconnect")) 57 | async def disconnect(bot, message): 58 | vj = database.find_one({"chat_id": ADMIN}) 59 | if vj == None: 60 | return await message.reply("**Contact Admin Then Say To Login In Bot.**") 61 | User = Client("post_search", session_string=vj['session'], api_hash=API_HASH, api_id=API_ID) 62 | await User.connect() 63 | m=await message.reply("Please wait..") 64 | try: 65 | group = await get_group(message.chat.id) 66 | user_id = group["user_id"] 67 | user_name = group["user_name"] 68 | verified = group["verified"] 69 | channels = group["channels"].copy() 70 | except : 71 | return await bot.leave_chat(message.chat.id) 72 | if message.from_user.id!=user_id: 73 | return await m.edit(f"Only {user_name} can use this command 😁") 74 | if bool(verified)==False: 75 | return await m.edit("This chat is not verified!\nuse /verify") 76 | try: 77 | channel = int(message.command[-1]) 78 | if channel not in channels: 79 | return await m.edit("You didn't added this channel yet Or Check Channel Id") 80 | channels.remove(channel) 81 | except: 82 | return await m.edit("❌ Incorrect format!\nUse `/disconnect ChannelID`") 83 | try: 84 | chat = await bot.get_chat(channel) 85 | group = await bot.get_chat(message.chat.id) 86 | c_link = chat.invite_link 87 | g_link = group.invite_link 88 | await User.leave_chat(channel) 89 | except Exception as e: 90 | text = f"❌ Error: `{str(e)}`\n💢 Make sure I'm admin in that channel & this group with all permissions and {(user.username or user.mention)} is not banned there" 91 | return await m.edit(text) 92 | await update_group(message.chat.id, {"channels":channels}) 93 | await m.edit(f"💢 Successfully disconnected from [{chat.title}]({c_link})!", disable_web_page_preview=True) 94 | text = f"#DisConnection\n\nUser: {message.from_user.mention}\nGroup: [{group.title}]({g_link})\nChannel: [{chat.title}]({c_link})" 95 | await bot.send_message(chat_id=LOG_CHANNEL, text=text) 96 | 97 | 98 | @Client.on_message(filters.group & filters.command("connections")) 99 | async def connections(bot, message): 100 | group = await get_group(message.chat.id) 101 | user_id = group["user_id"] 102 | user_name = group["user_name"] 103 | channels = group["channels"] 104 | f_sub = group["f_sub"] 105 | if message.from_user.id!=user_id: 106 | return await message.reply(f"Only {user_name} can use this command 😁") 107 | if bool(channels)==False: 108 | return await message.reply("This group is currently not connected to any channels!\nConnect one using /connect") 109 | text = "This Group is currently connected to:\n\n" 110 | for channel in channels: 111 | try: 112 | chat = await bot.get_chat(channel) 113 | name = chat.title 114 | link = chat.invite_link 115 | text += f"🔗Connected Channel - [{name}]({link})\n" 116 | except Exception as e: 117 | await message.reply(f"❌ Error in `{channel}:`\n`{e}`") 118 | if bool(f_sub): 119 | try: 120 | f_chat = await bot.get_chat(channel) 121 | f_title = f_chat.title 122 | f_link = f_chat.invite_link 123 | text += f"\nFSub: [{f_title}]({f_link})" 124 | except Exception as e: 125 | await message.reply(f"❌ Error in FSub (`{f_sub}`)\n`{e}`") 126 | 127 | await message.reply(text=text, disable_web_page_preview=True) 128 | -------------------------------------------------------------------------------- /plugins/fsub.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | from info import * 6 | from utils import * 7 | from pyrogram import Client, filters 8 | from pyrogram.types import ChatPermissions 9 | 10 | @Client.on_message(filters.group & filters.command("fsub")) 11 | async def f_sub_cmd(bot, message): 12 | m=await message.reply("Please wait..") 13 | try: 14 | group = await get_group(message.chat.id) 15 | user_id = group["user_id"] 16 | user_name = group["user_name"] 17 | verified = group["verified"] 18 | except : 19 | return await bot.leave_chat(message.chat.id) 20 | if message.from_user.id!=user_id: 21 | return await m.edit(f"Only {user_name} can use this command 😁") 22 | if bool(verified)==False: 23 | return await m.edit("This chat is not verified!\nuse /verify") 24 | try: 25 | f_sub = int(message.command[-1]) 26 | except: 27 | return await m.edit("❌ Incorrect format!\nUse `/fsub ChannelID`") 28 | try: 29 | chat = await bot.get_chat(f_sub) 30 | group = await bot.get_chat(message.chat.id) 31 | c_link = chat.invite_link 32 | g_link = group.invite_link 33 | except Exception as e: 34 | text = f"❌ Error: `{str(e)}`\n\nMake sure I'm admin in that channel & this group with all permissions" 35 | return await m.edit(text) 36 | await update_group(message.chat.id, {"f_sub":f_sub}) 37 | await m.edit(f"✅ Successfully Attached ForceSub to [{chat.title}]({c_link})!", disable_web_page_preview=True) 38 | text = f"#NewFsub\n\nUser: {message.from_user.mention}\nGroup: [{group.title}]({g_link})\nChannel: [{chat.title}]({c_link})" 39 | await bot.send_message(chat_id=LOG_CHANNEL, text=text) 40 | 41 | @Client.on_message(filters.group & filters.command("nofsub")) 42 | async def nf_sub_cmd(bot, message): 43 | m=await message.reply("Disattaching..") 44 | try: 45 | group = await get_group(message.chat.id) 46 | user_id = group["user_id"] 47 | user_name = group["user_name"] 48 | verified = group["verified"] 49 | f_sub = group["f_sub"] 50 | except : 51 | return await bot.leave_chat(message.chat.id) 52 | if message.from_user.id!=user_id: 53 | return await m.edit(f"Only {user_name} can use this command 😁") 54 | if bool(verified)==False: 55 | return await m.edit("This chat is not verified!\nuse /verify") 56 | if bool(f_sub)==False: 57 | return await m.edit("This chat is currently don't have any FSub\nuse /fsub") 58 | try: 59 | chat = await bot.get_chat(f_sub) 60 | group = await bot.get_chat(message.chat.id) 61 | c_link = chat.invite_link 62 | g_link = group.invite_link 63 | except Exception as e: 64 | text = f"❌ Error: `{str(e)}`\n\nMake sure I'm admin in that channel & this group with all permissions" 65 | return await m.edit(text) 66 | await update_group(message.chat.id, {"f_sub":False}) 67 | await m.edit(f"✅ Successfully removed FSub from [{chat.title}]({c_link})!", disable_web_page_preview=True) 68 | text = f"#RemoveFsub\n\nUser: {message.from_user.mention}\nGroup: [{group.title}]({g_link})\nChannel: [{chat.title}]({c_link})" 69 | await bot.send_message(chat_id=LOG_CHANNEL, text=text) 70 | 71 | 72 | @Client.on_callback_query(filters.regex(r"^checksub")) 73 | async def f_sub_callback(bot, update): 74 | user_id = int(update.data.split("_")[-1]) 75 | group = await get_group(update.message.chat.id) 76 | f_sub = group["f_sub"] 77 | admin = group["user_id"] 78 | 79 | if update.from_user.id!=user_id: 80 | return await update.answer("That's not for you 😂", show_alert=True) 81 | try: 82 | await bot.get_chat_member(f_sub, user_id) 83 | except UserNotParticipant: 84 | await update.answer("I like your smartness..\nBut don't be over smart 🤭", show_alert=True) # @kingvj01 😁 85 | except: 86 | await bot.restrict_chat_member(chat_id=update.message.chat.id, 87 | user_id=user_id, 88 | permissions=ChatPermissions(can_send_messages=True, 89 | can_send_media_messages=True, 90 | can_send_other_messages=True)) 91 | await update.message.delete() 92 | else: 93 | await bot.restrict_chat_member(chat_id=update.message.chat.id, 94 | user_id=user_id, 95 | permissions=ChatPermissions(can_send_messages=True, 96 | can_send_media_messages=True, 97 | can_send_other_messages=True)) 98 | await update.message.delete() 99 | -------------------------------------------------------------------------------- /plugins/generate.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | import traceback 6 | from pyrogram.types import Message 7 | from pyrogram import Client, filters 8 | from asyncio.exceptions import TimeoutError 9 | from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton 10 | from pyrogram.errors import ( 11 | ApiIdInvalid, 12 | PhoneNumberInvalid, 13 | PhoneCodeInvalid, 14 | PhoneCodeExpired, 15 | SessionPasswordNeeded, 16 | PasswordHashInvalid 17 | ) 18 | from info import API_ID, API_HASH, DATABASE_URI, ADMIN 19 | from pymongo import MongoClient 20 | 21 | mongo_client = MongoClient(DATABASE_URI) 22 | database = mongo_client.userdb.sessions 23 | 24 | strings = { 25 | 'need_login': "U have to /login before using then bot can download restricted content ❕", 26 | 'already_logged_in': "You are already logged in.\nIf you want to login again, /logout to proceed.", 27 | } 28 | SESSION_STRING_SIZE = 351 29 | 30 | def get(obj, key, default=None): 31 | try: 32 | return obj[key] 33 | except: 34 | return default 35 | 36 | @Client.on_message(filters.private & filters.command(["logout"]) & filters.user(ADMIN)) 37 | async def logout(_, msg): 38 | user_data = database.find_one({"chat_id": msg.chat.id}) 39 | if user_data is None or not user_data.get('session'): 40 | return 41 | data = { 42 | 'session': None, 43 | 'logged_in': False 44 | } 45 | database.update_one({'_id': user_data['_id']}, {'$set': data}) 46 | await msg.reply("**Logout Successfully** ♦") 47 | 48 | @Client.on_message(filters.private & filters.command(["login"]) & filters.user(ADMIN)) 49 | async def main(bot: Client, message: Message): 50 | user_data = database.find_one({"chat_id": message.from_user.id}) 51 | if get(user_data, 'logged_in', False): 52 | await message.reply(strings['already_logged_in']) 53 | return 54 | user_id = int(message.from_user.id) 55 | phone_number_msg = await bot.ask(chat_id=user_id, text="Please send your phone number which includes country code\nExample: +13124562345, +9171828181889") 56 | if phone_number_msg.text=='/cancel': 57 | return await phone_number_msg.reply('process cancelled !') 58 | phone_number = phone_number_msg.text 59 | client = Client(":memory:", API_ID, API_HASH) 60 | await client.connect() 61 | await phone_number_msg.reply("Sending OTP...") 62 | try: 63 | code = await client.send_code(phone_number) 64 | phone_code_msg = await bot.ask(user_id, "Please check for an OTP in official telegram account. If you got it, send OTP here after reading the below format. \n\nIf OTP is `12345`, **please send it as** `1 2 3 4 5`.\n\n**Enter /cancel to cancel The Procces**", filters=filters.text, timeout=600) 65 | except PhoneNumberInvalid: 66 | await phone_number_msg.reply('`PHONE_NUMBER` **is invalid.**') 67 | return 68 | if phone_code_msg.text=='/cancel': 69 | return await phone_code_msg.reply('process cancelled !') 70 | try: 71 | phone_code = phone_code_msg.text.replace(" ", "") 72 | await client.sign_in(phone_number, code.phone_code_hash, phone_code) 73 | except PhoneCodeInvalid: 74 | await phone_code_msg.reply('**OTP is invalid.**') 75 | return 76 | except PhoneCodeExpired: 77 | await phone_code_msg.reply('**OTP is expired.**') 78 | return 79 | except SessionPasswordNeeded: 80 | two_step_msg = await bot.ask(user_id, '**Your account has enabled two-step verification. Please provide the password.\n\nEnter /cancel to cancel The Procces**', filters=filters.text, timeout=300) 81 | if two_step_msg.text=='/cancel': 82 | return await two_step_msg.reply('process cancelled !') 83 | try: 84 | password = two_step_msg.text 85 | await client.check_password(password=password) 86 | except PasswordHashInvalid: 87 | await two_step_msg.reply('**Invalid Password Provided**') 88 | return 89 | string_session = await client.export_session_string() 90 | await client.disconnect() 91 | if len(string_session) < SESSION_STRING_SIZE: 92 | return await message.reply('invalid session sring') 93 | try: 94 | user_data = database.find_one({"chat_id": message.from_user.id}) 95 | if user_data is not None: 96 | data = { 97 | 'session': string_session, 98 | 'logged_in': True 99 | } 100 | 101 | uclient = Client(":memory:", session_string=data['session'], api_id=API_ID, api_hash=API_HASH) 102 | await uclient.connect() 103 | 104 | database.update_one({'_id': user_data['_id']}, {'$set': data}) 105 | except Exception as e: 106 | return await message.reply_text(f"ERROR IN LOGIN: `{e}`") 107 | await bot.send_message(message.from_user.id, "Account Login Successfully.\n\nIf You Get Any Error Related To AUTH KEY Then /logout and /login again") 108 | 109 | 110 | # Don't Remove Credit Tg - @VJ_Botz 111 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 112 | # Ask Doubt on telegram @KingVJ01 113 | -------------------------------------------------------------------------------- /plugins/misc.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | from utils import * 6 | from pyrogram import Client, filters 7 | from plugins.generate import database 8 | from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton 9 | 10 | @Client.on_message(filters.command("start") & ~filters.channel) 11 | async def start(bot, message): 12 | database.insert_one({"chat_id": message.from_user.id}) 13 | username = (await bot.get_me()).username 14 | await add_user(message.from_user.id, message.from_user.first_name) 15 | button = [[ 16 | InlineKeyboardButton('➕ ᴀᴅᴅ ᴍᴇ ᴛᴏ ʏᴏᴜʀ ɢʀᴏᴜᴘ ➕', url=f'http://t.me/{username}?startgroup=true') 17 | ],[ 18 | InlineKeyboardButton("ʜᴇʟᴘ", callback_data="misc_help"), 19 | InlineKeyboardButton("ᴀʙᴏᴜᴛ", callback_data="misc_about") 20 | ],[ 21 | InlineKeyboardButton("🤖 ᴜᴘᴅᴀᴛᴇ", url="https://t.me/vj_botz"), 22 | InlineKeyboardButton("🔍 ɢʀᴏᴜᴘ", url="https://t.me/vj_bot_disscussion") 23 | ]] 24 | await message.reply(text=script.START.format(message.from_user.mention), 25 | disable_web_page_preview=True, 26 | reply_markup=InlineKeyboardMarkup(button)) 27 | 28 | @Client.on_message(filters.command("help")) 29 | async def help(bot, message): 30 | await message.reply(text=script.HELP, 31 | disable_web_page_preview=True) 32 | 33 | @Client.on_message(filters.command("about")) 34 | async def about(bot, message): 35 | await message.reply(text=script.ABOUT.format((await bot.get_me()).mention), 36 | disable_web_page_preview=True) 37 | 38 | @Client.on_message(filters.command("stats")) 39 | async def stats(bot, message): 40 | g_count, g_list = await get_groups() 41 | u_count, u_list = await get_users() 42 | await message.reply(script.STATS.format(u_count, g_count)) 43 | 44 | @Client.on_message(filters.command("id")) 45 | async def id(bot, message): 46 | text = f"Current Chat ID: `{message.chat.id}`\n" 47 | if message.from_user: 48 | text += f"Your ID: `{message.from_user.id}`\n" 49 | if message.reply_to_message: 50 | if message.reply_to_message.from_user: 51 | text += f"Replied User ID: `{message.reply_to_message.from_user.id}`\n" 52 | if message.reply_to_message.forward_from: 53 | text += f"Replied Message Forward from User ID: `{message.reply_to_message.forward_from.id}`\n" 54 | if message.reply_to_message.forward_from_chat: 55 | text += f"Replied Message Forward from Chat ID: `{message.reply_to_message.forward_from_chat.id}\n`" 56 | await message.reply(text) 57 | 58 | @Client.on_callback_query(filters.regex(r"^misc")) 59 | async def misc(bot, update): 60 | data = update.data.split("_")[-1] 61 | if data=="home": 62 | username = (await bot.get_me()).username 63 | button = [[ 64 | InlineKeyboardButton('➕ ᴀᴅᴅ ᴍᴇ ᴛᴏ ʏᴏᴜʀ ɢʀᴏᴜᴘ ➕', url=f'http://t.me/{username}?startgroup=true') 65 | ],[ 66 | InlineKeyboardButton("ʜᴇʟᴘ", callback_data="misc_help"), 67 | InlineKeyboardButton("ᴀʙᴏᴜᴛ", callback_data="misc_about") 68 | ],[ 69 | InlineKeyboardButton("🤖 ᴜᴘᴅᴀᴛᴇ", url="https://t.me/vj_botz"), 70 | InlineKeyboardButton("🔍 ɢʀᴏᴜᴘ", url="https://t.me/vj_bot_disscussion") 71 | ]] 72 | await update.message.edit(text=script.START.format(update.from_user.mention), 73 | disable_web_page_preview=True, 74 | reply_markup=InlineKeyboardMarkup(button)) 75 | elif data=="help": 76 | await update.message.edit(text=script.HELP, 77 | disable_web_page_preview=True, 78 | reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("⬅️ Back", callback_data="misc_home")]])) 79 | 80 | elif data=="about": 81 | await update.message.edit(text=script.ABOUT.format((await bot.get_me()).mention), 82 | disable_web_page_preview=True, 83 | reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("⬅️ Back", callback_data="misc_home")]])) 84 | 85 | -------------------------------------------------------------------------------- /plugins/newgroup.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | from info import * 6 | from utils import * 7 | from asyncio import sleep 8 | from pyrogram import Client, filters 9 | 10 | @Client.on_message(filters.group & filters.new_chat_members) 11 | async def new_group(bot, message): 12 | bot_id = (await bot.get_me()).id 13 | member = [u.id for u in message.new_chat_members] 14 | if bot_id in member: 15 | await add_group(group_id=message.chat.id, 16 | group_name=message.chat.title, 17 | user_name=message.from_user.first_name, 18 | user_id=message.from_user.id, 19 | channels=[], 20 | f_sub=False, 21 | verified=False) 22 | m=await message.reply(f"💢 Thanks for adding me in {message.chat.title} ✨\n\n⭕ Please Get Access By /verify\n\n") 23 | text=f"#NewGroup\n\nGroup: {message.chat.title}\nGroupID: `{message.chat.id}`\nAddedBy: {message.from_user.mention}\nUserID: `{message.from_user.id}`" 24 | await bot.send_message(chat_id=LOG_CHANNEL, text=text) 25 | await sleep(60) 26 | await m.delete() 27 | -------------------------------------------------------------------------------- /plugins/search.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | import asyncio 6 | from info import * 7 | from utils import * 8 | from time import time 9 | from plugins.generate import database 10 | from pyrogram import Client, filters 11 | from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, Message 12 | 13 | async def send_message_in_chunks(client, chat_id, text): 14 | max_length = 4096 # Maximum length of a message 15 | for i in range(0, len(text), max_length): 16 | msg = await client.send_message(chat_id=chat_id, text=text[i:i+max_length]) 17 | asyncio.create_task(delete_after_delay(msg, 1800)) 18 | 19 | 20 | 21 | async def delete_after_delay(message: Message, delay): 22 | await asyncio.sleep(delay) 23 | try: 24 | await message.delete() 25 | except: 26 | pass 27 | 28 | @Client.on_message(filters.text & filters.group & filters.incoming & ~filters.command(["verify", "connect", "id"])) 29 | async def search(bot, message): 30 | vj = database.find_one({"chat_id": ADMIN}) 31 | if vj == None: 32 | return await message.reply("**Contact Admin Then Say To Login In Bot.**") 33 | User = Client("post_search", session_string=vj['session'], api_hash=API_HASH, api_id=API_ID) 34 | await User.connect() 35 | f_sub = await force_sub(bot, message) 36 | if f_sub==False: 37 | return 38 | channels = (await get_group(message.chat.id))["channels"] 39 | if bool(channels)==False: 40 | return 41 | if message.text.startswith("/"): 42 | return 43 | query = message.text 44 | head = f"⭕ Here is the results {message.from_user.mention} 👇\n\n💢 Powered By @VJ_Botz ❗\n\n" 45 | results = "" 46 | try: 47 | for channel in channels: 48 | async for msg in User.search_messages(chat_id=channel, query=query): 49 | name = (msg.text or msg.caption).split("\n")[0] 50 | if name in results: 51 | continue 52 | results += f"♻️ {name}\n🔗 {msg.link}\n\n" 53 | if bool(results)==False: 54 | movies = await search_imdb(query) 55 | buttons = [] 56 | for movie in movies: 57 | buttons.append([InlineKeyboardButton(movie['title'], callback_data=f"recheck_{movie['id']}")]) 58 | msg = await message.reply_photo(photo="https://graph.org/file/c361a803c7b70fc50d435.jpg", 59 | caption="🔻 I Couldn't find anything related to Your Query😕.\n🔺 Did you mean any of these?", 60 | reply_markup=InlineKeyboardMarkup(buttons)) 61 | else: 62 | await send_message_in_chunks(bot, message.chat.id, head+results) 63 | except: 64 | pass 65 | 66 | 67 | 68 | @Client.on_callback_query(filters.regex(r"^recheck")) 69 | async def recheck(bot, update): 70 | vj = database.find_one({"chat_id": ADMIN}) 71 | User = Client("post_search", session_string=vj['session'], api_hash=API_HASH, api_id=API_ID) 72 | if vj == None: 73 | return await update.message.edit("**Contact Admin Then Say To Login In Bot.**") 74 | await User.connect() 75 | clicked = update.from_user.id 76 | try: 77 | typed = update.message.reply_to_message.from_user.id 78 | except: 79 | return await update.message.delete(2) 80 | if clicked != typed: 81 | return await update.answer("That's not for you! 👀", show_alert=True) 82 | 83 | m=await update.message.edit("**Searching..💥**") 84 | id = update.data.split("_")[-1] 85 | query = await search_imdb(id) 86 | channels = (await get_group(update.message.chat.id))["channels"] 87 | head = "⭕ I Have Searched Movie With Wrong Spelling But Take care next time 👇\n\n💢 Powered By @VJ_Botz ❗\n\n" 88 | results = "" 89 | try: 90 | for channel in channels: 91 | async for msg in User.search_messages(chat_id=channel, query=query): 92 | name = (msg.text or msg.caption).split("\n")[0] 93 | if name in results: 94 | continue 95 | results += f"♻️🍿 {name}\n\n🔗 {msg.link}\n\n" 96 | if bool(results)==False: 97 | return await update.message.edit("🔺 Still no results found! Please Request To Group Admin 🔻", reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("🎯 Request To Admin 🎯", callback_data=f"request_{id}")]])) 98 | await send_message_in_chunks(bot, update.message.chat.id, head+results) 99 | except Exception as e: 100 | await update.message.edit(f"❌ Error: `{e}`") 101 | 102 | 103 | @Client.on_callback_query(filters.regex(r"^request")) 104 | async def request(bot, update): 105 | clicked = update.from_user.id 106 | try: 107 | typed = update.message.reply_to_message.from_user.id 108 | except: 109 | return await update.message.delete() 110 | if clicked != typed: 111 | return await update.answer("That's not for you! 👀", show_alert=True) 112 | 113 | admin = (await get_group(update.message.chat.id))["user_id"] 114 | id = update.data.split("_")[1] 115 | name = await search_imdb(id) 116 | url = "https://www.imdb.com/title/tt"+id 117 | text = f"#RequestFromYourGroup\n\nName: {name}\nIMDb: {url}" 118 | await bot.send_message(chat_id=admin, text=text, disable_web_page_preview=True) 119 | await update.answer("✅ Request Sent To Admin", show_alert=True) 120 | await update.message.delete(60) 121 | -------------------------------------------------------------------------------- /plugins/verify.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | from info import * 6 | from utils import * 7 | from pyrogram import Client, filters 8 | from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton 9 | 10 | @Client.on_message(filters.group & filters.command("verify")) 11 | async def _verify(bot, message): 12 | try: 13 | group = await get_group(message.chat.id) 14 | user_id = group["user_id"] 15 | user_name = group["user_name"] 16 | verified = group["verified"] 17 | except: 18 | return await bot.leave_chat(message.chat.id) 19 | try: 20 | user = await bot.get_users(user_id) 21 | except: 22 | return await message.reply(f"❌ {user_name} Need to start me in PM!") 23 | if message.from_user.id != user_id: 24 | return await message.reply(f"Only {user.mention} can use this command 😁") 25 | if verified==True: 26 | return await message.reply("This Group is already verified!") 27 | try: 28 | link = (await bot.get_chat(message.chat.id)).invite_link 29 | except: 30 | return message.reply("❌ Make me admin here with all permissions!") 31 | 32 | text = f"#NewRequest\n\n" 33 | text += f"User: {message.from_user.mention}\n" 34 | text += f"User ID: `{message.from_user.id}`\n" 35 | text += f"Group: [{message.chat.title}]({link})\n" 36 | text += f"Group ID: `{message.chat.id}`\n" 37 | 38 | await bot.send_message(chat_id=LOG_CHANNEL, 39 | text=text, 40 | disable_web_page_preview=True, 41 | reply_markup=InlineKeyboardMarkup( 42 | [[InlineKeyboardButton("✅ Approve", callback_data=f"verify_approve_{message.chat.id}"), 43 | InlineKeyboardButton("❌ Decline", callback_data=f"verify_decline_{message.chat.id}")]])) 44 | await message.reply("💢 Verification Request sent ✅\n🔻 We will notify You Personally when it is approved ⭕") 45 | 46 | 47 | @Client.on_callback_query(filters.regex(r"^verify")) 48 | async def verify_(bot, update): 49 | id = int(update.data.split("_")[-1]) 50 | group = await get_group(id) 51 | name = group["name"] 52 | user = group["user_id"] 53 | if update.data.split("_")[1]=="approve": 54 | await update_group(id, {"verified":True}) 55 | await bot.send_message(chat_id=user, text=f"💢 Your verification request for {name} has been approved ✅") 56 | await update.message.edit(update.message.text.html.replace("#NewRequest", "#Approved")) 57 | else: 58 | await delete_group(id) 59 | await bot.send_message(chat_id=user, text=f"Your verification request for {name} has been declined 😐 Please Contact Admin") 60 | await update.message.edit(update.message.text.html.replace("#NewRequest", "#Declined")) 61 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pyrofork 2 | tgcrypto 3 | motor[srv] 4 | cinemagoer 5 | aiohttp 6 | aiofiles 7 | asyncio 8 | psutil 9 | Flask==1.1.2 10 | gunicorn==20.1.0 11 | Jinja2==3.0.3 12 | werkzeug==2.0.2 13 | itsdangerous==2.0.1 14 | -------------------------------------------------------------------------------- /run cmd.txt: -------------------------------------------------------------------------------- 1 | gunicorn app:app & python3 main.py 2 | -------------------------------------------------------------------------------- /utils/TechVJ: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | from .script import * 6 | from .helpers import * 7 | -------------------------------------------------------------------------------- /utils/helpers.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | import asyncio 6 | from info import * 7 | from pyrogram import enums 8 | from imdb import Cinemagoer 9 | from pymongo.errors import DuplicateKeyError 10 | from pyrogram.errors import UserNotParticipant 11 | from motor.motor_asyncio import AsyncIOMotorClient 12 | from pyrogram.types import ChatPermissions, InlineKeyboardMarkup, InlineKeyboardButton 13 | 14 | dbclient = AsyncIOMotorClient(DATABASE_URI) 15 | db = dbclient["Channel-Filter"] 16 | grp_col = db["GROUPS"] 17 | user_col = db["USERS"] 18 | dlt_col = db["Auto-Delete"] 19 | 20 | ia = Cinemagoer() 21 | 22 | async def add_group(group_id, group_name, user_name, user_id, channels, f_sub, verified): 23 | data = {"_id": group_id, "name":group_name, 24 | "user_id":user_id, "user_name":user_name, 25 | "channels":channels, "f_sub":f_sub, "verified":verified} 26 | try: 27 | await grp_col.insert_one(data) 28 | except DuplicateKeyError: 29 | pass 30 | 31 | async def get_group(id): 32 | data = {'_id':id} 33 | group = await grp_col.find_one(data) 34 | return dict(group) 35 | 36 | async def update_group(id, new_data): 37 | data = {"_id":id} 38 | new_value = {"$set": new_data} 39 | await grp_col.update_one(data, new_value) 40 | 41 | async def delete_group(id): 42 | data = {"_id":id} 43 | await grp_col.delete_one(data) 44 | 45 | async def delete_user(id): 46 | data = {"_id":id} 47 | await user_col.delete_one(data) 48 | 49 | async def get_groups(): 50 | count = await grp_col.count_documents({}) 51 | cursor = grp_col.find({}) 52 | list = await cursor.to_list(length=int(count)) 53 | return count, list 54 | 55 | async def add_user(id, name): 56 | data = {"_id":id, "name":name} 57 | try: 58 | await user_col.insert_one(data) 59 | except DuplicateKeyError: 60 | pass 61 | 62 | async def get_users(): 63 | count = await user_col.count_documents({}) 64 | cursor = user_col.find({}) 65 | list = await cursor.to_list(length=int(count)) 66 | return count, list 67 | 68 | async def search_imdb(query): 69 | try: 70 | int(query) 71 | movie = ia.get_movie(query) 72 | return movie["title"] 73 | except: 74 | movies = ia.search_movie(query, results=10) 75 | list = [] 76 | for movie in movies: 77 | title = movie["title"] 78 | try: year = f" - {movie['year']}" 79 | except: year = "" 80 | list.append({"title":title, "year":year, "id":movie.movieID}) 81 | return list 82 | 83 | async def force_sub(bot, message): 84 | group = await get_group(message.chat.id) 85 | f_sub = group["f_sub"] 86 | admin = group["user_id"] 87 | if f_sub==False: 88 | return True 89 | if message.from_user is None: 90 | return True 91 | try: 92 | f_link = (await bot.get_chat(f_sub)).invite_link 93 | member = await bot.get_chat_member(f_sub, message.from_user.id) 94 | if member.status==enums.ChatMemberStatus.BANNED: 95 | await message.reply(f"ꜱᴏʀʀʏ {message.from_user.mention}!\n ʏᴏᴜ ᴀʀᴇ ʙᴀɴɴᴇᴅ ɪɴ ᴏᴜʀ ᴄʜᴀɴɴᴇʟ, ʏᴏᴜ ᴡɪʟʟ ʙᴇ ʙᴀɴɴᴇᴅ ꜰʀᴏᴍ ʜᴇʀᴇ ᴡɪᴛʜɪɴ 10 ꜱᴇᴄᴏɴᴅꜱ") 96 | await asyncio.sleep(10) 97 | await bot.ban_chat_member(message.chat.id, message.from_user.id) 98 | return False 99 | except UserNotParticipant: 100 | await bot.restrict_chat_member(chat_id=message.chat.id, 101 | user_id=message.from_user.id, 102 | permissions=ChatPermissions(can_send_messages=False) 103 | ) 104 | await message.reply(f"🚫 ʜɪ ᴅᴇᴀʀ {message.from_user.mention}!\n\n ɪꜰ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ꜱᴇɴᴅ ᴍᴇꜱꜱᴀɢᴇ ɪɴ ᴛʜɪꜱ ɢʀᴏᴜᴘ.. ᴛʜᴇɴ ꜰɪʀꜱᴛ ʏᴏᴜ ʜᴀᴠᴇ ᴛᴏ ᴊᴏɪɴ ᴏᴜʀ ᴄʜᴀɴɴᴇʟ ᴛᴏ ᴍᴇꜱꜱᴀɢᴇ ʜᴇʀᴇ 💯", 105 | reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("✅ ᴊᴏɪɴ ᴄʜᴀɴɴᴇʟ ✅", url=f_link)], 106 | [InlineKeyboardButton("🌀 ᴛʀʏ ᴀɢᴀɪɴ 🌀", callback_data=f"checksub_{message.from_user.id}")]])) 107 | await message.delete() 108 | return False 109 | except Exception as e: 110 | await bot.send_message(chat_id=admin, text=f"❌ Error in Fsub:\n`{str(e)}`") 111 | return False 112 | else: 113 | return True 114 | 115 | async def broadcast_messages(user_id, message): 116 | try: 117 | await message.copy(chat_id=user_id) 118 | return True, "Success" 119 | except FloodWait as e: 120 | await asyncio.sleep(e.x) 121 | return await broadcast_messages(user_id, message) 122 | except InputUserDeactivated: 123 | await db.delete_user(int(user_id)) 124 | logging.info(f"{user_id}-Removed from Database, since deleted account.") 125 | return False, "Deleted" 126 | except UserIsBlocked: 127 | logging.info(f"{user_id} -Blocked the bot.") 128 | return False, "Blocked" 129 | except PeerIdInvalid: 130 | await db.delete_user(int(user_id)) 131 | logging.info(f"{user_id} - PeerIdInvalid") 132 | return False, "Error" 133 | except Exception as e: 134 | return False, "Error" 135 | -------------------------------------------------------------------------------- /utils/script.py: -------------------------------------------------------------------------------- 1 | # Don't Remove Credit Tg - @VJ_Botz 2 | # Subscribe YouTube Channel For Amazing Bot https://youtube.com/@Tech_VJ 3 | # Ask Doubt on telegram @KingVJ01 4 | 5 | class script(object): 6 | START = """**ʜᴇʟʟᴏ {} 🤟** 7 | 8 | ɪ ᴀᴍ ᴠᴊ ᴘᴏsᴛ sᴇᴀʀᴄʜ ʙᴏᴛ. ɪ ᴀᴍ ʙᴇsᴛ ᴄʜᴀɴɴᴇʟ ʟɪɴᴋ sᴇᴀʀᴄʜ ʙᴏᴛ! 9 | ɪ ᴡɪʟʟ ғɪʟᴛᴇʀ ʏᴏᴜʀ ᴄʜᴀɴɴᴇʟ ᴘᴏsᴛs ᴀᴜᴛᴏᴍᴀᴛɪᴄᴀʟʟʏ ᴀɴᴅ sᴇɴᴅ ɪᴛ ɪɴ ʏᴏᴜʀ ɢʀᴏᴜᴘ ᴄʜᴀᴛ ᴡʜᴇɴ sᴏᴍᴇᴏɴᴇ sᴇᴀʀᴄʜ ɪᴛ.""" 10 | 11 | HELP = """💢 ʜᴏᴡ ᴛᴏ ᴜsᴇ ᴍᴇ ɪɴ ᴀ ɢʀᴏᴜᴘ 12 | 13 | 🔻 ᴀᴅᴅ ᴍᴇ ɪɴ ʏᴏᴜʀ ɢʀᴏᴜᴘ & ᴄʜᴀɴɴᴇʟ ᴡɪᴛʜ ᴀʟʟ ᴘᴇʀᴍɪssɪᴏɴs. 14 | 🔻 sᴇɴᴅ /verify ɪɴ ɢʀᴏᴜᴘ & ᴡᴀɪᴛ ғᴏʀ ɪᴛ ᴛᴏ ᴀᴄᴄᴇᴘᴛ ᴏʀ ᴅɪʀᴇᴄᴛʟʏ ᴄᴏɴᴛᴀᴄᴛ ᴛᴏ ᴏᴡɴᴇʀ ᴀғᴛᴇʀ ʀᴇǫᴜᴇsᴛ @VJBots_bot. 15 | 🔻 ᴀғᴛᴇʀ ᴠᴇʀɪғɪᴄᴀᴛɪᴏɴ sᴇɴᴅ /connect ʏᴏᴜʀᴄʜᴀɴɴᴇʟɪᴅ. ( ғᴏʀ ᴍᴜʟᴛɪᴘʟᴇ ᴄʜᴀɴɴᴇʟs ᴜsᴇ ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴍᴜʟᴛɪᴘʟᴇ ᴛɪᴍᴇs ) 16 | 🔻 ᴇxᴀᴍᴘʟᴇ : /connect -100xxxxxxxxxx 17 | 18 | ⭕ ғᴏʀ ғᴏʀᴄᴇ sᴜʙsᴄʀɪʙᴇ ᴜsᴇ 19 | /fsub (ғsᴜʙɪᴅ) 20 | 🔻 ᴅɪsᴄᴏɴɴᴇᴄᴛ ʙʏ /nofsub (ғsᴜʙɪᴅ) 21 | 22 | ❣️ ɢᴇᴛ ᴄʜᴀɴɴᴇʟ ɪᴅ ʙʏ ᴄᴏᴍᴍᴀɴᴅ - /id 23 | ❣️ ʀᴇᴍᴏᴠᴇ ᴀ ᴄʜᴀɴɴᴇʟ ᴡɪᴛʜ - /disconnect -100xxxxxxxxxxx 24 | ᴛʜɪs ᴡɪʟʟ ʜᴇʟᴘ ʏᴏᴜ ᴛᴏ ʀᴇᴍᴏᴠᴇ ᴀ ɪɴᴅᴇxᴇᴅ ᴄʜᴀɴɴᴇʟ ғʀᴏᴍ ʏᴏᴜʀ ɢʀᴏᴜᴘ. 25 | 26 | ♨️ ɢᴇᴛ ᴄᴏɴɴᴇᴄᴛᴇᴅ ᴄʜᴀɴɴᴇʟs ʟɪsᴛ ᴡɪᴛʜ - /connections""" 27 | 28 | ABOUT = """╭━━━━━━━❰ [𝙰𝙱𝙾𝚄𝚃](https://t.me/VJ_Botz) ❱━━━━━━━➣ 29 | 30 | ┣ ✯ Mʏ Nᴀᴍᴇ:  {} 31 | ┣ ✯ Cʀᴇᴀᴛᴏʀ: VJ Bᴏᴛᴢ 32 | ┣ ✯ Lᴀɴɢᴜᴀɢᴇ: Pʏᴛʜᴏɴ 3 33 | ┣ ✯ DᴀᴛᴀBᴀsᴇ: MᴏɴɢᴏDB""" 34 | 35 | STATS = """My Status 💫 36 | 37 | 👥 Users: {} 38 | 🧿 Groups: {}""" 39 | 40 | BROADCAST = """{} 41 | 42 | Total: `{}` 43 | Remaining: `{}` 44 | Success: `{}` 45 | Failed: `{}`""" 46 | 47 | 48 | --------------------------------------------------------------------------------