diff --git a/Script.py b/Script.py index 617144ff..41a691bc 100644 --- a/Script.py +++ b/Script.py @@ -1,6 +1,7 @@ class script(object): - START_TXT = """Hᴇʏ {} ɪᴍ 『 ᴍᴏᴠɪᴇs ғɪʟᴛᴇʀ ʙᴏᴛ 』 ᴀɴ Aᴡᴇsᴏᴍᴇ Aᴜᴛᴏ + Mᴀɴᴜᴀʟ Fɪʟᴛᴇʀ + Fɪʟᴇ Sʜᴀʀᴇ Bᴏᴛ. -Aᴅᴅ Mᴇ Tᴏ Yᴏᴜʀ Gʀᴏᴜᴩ Nᴏᴡ 👇""" + START_TXT = """Hᴇʏ {} 👋🏻 ɪᴍ ꪜꫀꪀꪮꪑ. +ᴀɴ Aᴡᴇsᴏᴍᴇ Aᴜᴛᴏ + Mᴀɴᴜᴀʟ Fɪʟᴛᴇʀ + Fɪʟᴇ Sʜᴀʀᴇ Bᴏᴛ. +Jᴏɪɴ Oᴜʀ Gʀᴏᴜᴘ Oʀ Aᴅᴅ Mᴇ Tᴏ Yᴏᴜʀ Gʀᴏᴜᴩ Nᴏᴡ 👇""" HELP_TXT = """Hᴇʏ {} Fʀɪᴇɴᴅ Hᴇʀᴇ Yᴏᴜʀ Bᴜᴛᴛᴏɴs 👇""" @@ -21,23 +22,19 @@ class script(object): PONG_TXT = """Cʜᴇᴄᴋ Mʏ Pɪɴɢ Bʏ Cʟɪᴄᴋɪɴɢ 👉 /ping""" - ABOUT_TXT = """🤖 ᴍʏ ɴᴀᴍᴇ : ᴍᴏᴠɪᴇs ғɪʟᴛᴇʀ ʙᴏᴛ -👨‍💻 ᴅᴇᴠᴇʟᴏᴘᴇʀ : sʜᴀʀᴀᴛʜ + ABOUT_TXT = """🤖 ᴍʏ ɴᴀᴍᴇ : ᴠᴇɴᴏᴍ +👨‍💻 ᴅᴇᴠᴇʟᴏᴘᴇʀ : ᴀɴᴏɴʏᴍᴏᴜꜱ 📝 ʟᴀɴɢᴜᴀɢᴇ : ᴘʏʀᴏɢʀᴀᴍ 📚 ꜰʀᴀᴍᴇᴡᴏʀᴋ : ᴘʏᴛʜᴏɴ 3 📡 ʜᴏsᴛᴇᴅ ᴏɴ : ғʀᴇᴇ ʜᴏsᴛɪɴɢ -📢 sᴜᴘᴘᴏʀᴛ ɢʀᴏᴜᴘ : ᴄʟɪᴄᴋ ʜᴇʀᴇ -🌟 Sᴏᴜʀᴄᴇ Cᴏᴅᴇ : ʀᴇᴩᴏ ʟɪɴᴋ""" +📢 sᴜᴘᴘᴏʀᴛ ɢʀᴏᴜᴘ : ᴄʟɪᴄᴋ ʜᴇʀᴇ +🌟 Sᴏᴜʀᴄᴇ Cᴏᴅᴇ : ʀᴇᴩᴏ ʟɪɴᴋ""" - SOURCES_TXT = """Tʜɪs Is Aɴ Oᴩᴇɴ-Sᴏᴜʀᴄᴇ Pʀᴏᴊᴇᴄᴛ Bʏ @Tamilan_BotsZ - -- 100﹪ Cᴏᴅᴇᴅ Bʏ sʜᴀʀᴀᴛʜ + SOURCES_TXT = """Tʜɪs Is Aɴ Oᴩᴇɴ-Sᴏᴜʀᴄᴇ Pʀᴏᴊᴇᴄᴛ Bʏ @dochacks - & Rᴇᴩᴏ Lɪɴᴋ 👇 Hᴇʀᴇ""" - SOURCE_TXT = """Tʜɪs Is Aɴ Oᴩᴇɴ-Sᴏᴜʀᴄᴇ Pʀᴏᴊᴇᴄᴛ Bʏ @Tamilan_BotsZ - -- 100﹪ Cᴏᴅᴇᴅ Bʏ sʜᴀʀᴀᴛʜ + SOURCE_TXT = """Tʜɪs Is Aɴ Oᴩᴇɴ-Sᴏᴜʀᴄᴇ Pʀᴏᴊᴇᴄᴛ Bʏ @dochacks - Rᴇᴩᴏ Lɪɴᴋ 👇 Hᴇʀᴇ""" diff --git a/info.py b/info.py index bb3b8d80..a506a5e7 100644 --- a/info.py +++ b/info.py @@ -2,6 +2,7 @@ from os import environ id_pattern = re.compile(r'^.\d+$') + def is_enabled(value, default): if value.lower() in ["true", "yes", "1", "enable", "y"]: return True @@ -15,6 +16,7 @@ def is_enabled(value, default): API_ID = int(environ.get('API_ID', '')) API_HASH = environ.get('API_HASH', '') BOT_TOKEN = environ.get('BOT_TOKEN', '') + # Bot settings CACHE_TIME = int(environ.get('CACHE_TIME', 300)) USE_CAPTION_FILTER = bool(environ.get('USE_CAPTION_FILTER', True)) @@ -25,52 +27,55 @@ def is_enabled(value, default): CHANNELS = [int(ch) if id_pattern.search(ch) else ch for ch in environ.get('CHANNELS', '').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_channel = environ.get('AUTH_CHANNEL', '-1002455627732') 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 +# Log the value of AUTH_CHANNEL +print(f"AUTH_CHANNEL: {AUTH_CHANNEL}") + # MongoDB information DATABASE_URI = environ.get('DATABASE_URI', "") DATABASE_NAME = environ.get('DATABASE_NAME', "") COLLECTION_NAME = environ.get('COLLECTION_NAME', 'Telegram_files') # Others -LOG_CHANNEL = int(environ.get('LOG_CHANNEL', )) +LOG_CHANNEL = int(environ.get('LOG_CHANNEL', '-1002227324253')) SUPPORT_CHAT = environ.get('SUPPORT_CHAT', '') P_TTI_SHOW_OFF = is_enabled((environ.get('P_TTI_SHOW_OFF', "False")), False) IMDB = is_enabled((environ.get('IMDB', "False")), False) -SINGLE_BUTTON = is_enabled((environ.get('SINGLE_BUTTON', "True")), True) -CUSTOM_FILE_CAPTION = environ.get("CUSTOM_FILE_CAPTION", "{file_name}") +SINGLE_BUTTON = is_enabled((environ.get('SINGLE_BUTTON', "False")), False) +CUSTOM_FILE_CAPTION = environ.get("CUSTOM_FILE_CAPTION", "{file_name}\n•────•────────•────•\n📌 ᴊᴏɪɴ : ᴍᴏᴠɪᴇᴛɪᴍᴇ 🎬\n📌 ᴊᴏɪɴ : ᴍᴏᴠɪᴇꜰɪʟᴇꜱ 📁\n📌 ᴊᴏɪɴ : ᴡᴇʙꜱʜᴏᴡꜱ 🍿\n📌 ꜱᴜʙꜱᴄʀɪʙᴇ ɴᴏᴡ : ᴄʟɪᴄᴋ 👈🏻\n•────•────────•────•\n🎗 ʝσιи • ѕнαяє • ѕυρρσят 🎗") BATCH_FILE_CAPTION = environ.get("BATCH_FILE_CAPTION", CUSTOM_FILE_CAPTION) IMDB_TEMPLATE = environ.get("IMDB_TEMPLATE", "Query: {query} \n‌IMDb Data:\n\n🏷 Title: {title}\n🎭 Genres: {genres}\n📆 Year: {year}\n🌟 Rating: {rating} / 10") 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) INDEX_REQ_CHANNEL = int(environ.get('INDEX_REQ_CHANNEL', LOG_CHANNEL)) -FILE_STORE_CHANNEL = [int(ch) for ch in (environ.get('FILE_STORE_CHANNEL', '')).split()] +FILE_STORE_CHANNEL = [int(ch) for ch in (environ.get('FILE_STORE_CHANNEL', '-1002379981847')).split()] MELCOW_NEW_USERS = is_enabled((environ.get('MELCOW_NEW_USERS', "False")), False) PROTECT_CONTENT = is_enabled((environ.get('PROTECT_CONTENT', "False")), False) PUBLIC_FILE_STORE = is_enabled((environ.get('PUBLIC_FILE_STORE', "True")), True) -LOG_STR = "Current Cusomized Configurations are:-\n" -LOG_STR += ("IMDB Results are enabled, Bot will be showing imdb details for you queries.\n" if IMDB else "IMBD Results are disabled.\n") -LOG_STR += ("P_TTI_SHOW_OFF found , Users will be redirected to send /start to Bot PM instead of sending file file directly\n" if P_TTI_SHOW_OFF else "P_TTI_SHOW_OFF is disabled files will be send in PM, instead of sending start.\n") -LOG_STR += ("SINGLE_BUTTON is Found, filename and files size will be shown in a single button instead of two separate buttons\n" if SINGLE_BUTTON else "SINGLE_BUTTON is disabled , filename and file_sixe will be shown as different buttons\n") -LOG_STR += (f"CUSTOM_FILE_CAPTION enabled with value {CUSTOM_FILE_CAPTION}, your files will be send along with this customized caption.\n" if CUSTOM_FILE_CAPTION else "No CUSTOM_FILE_CAPTION Found, Default captions of file will be used.\n") -LOG_STR += ("Long IMDB storyline enabled." if LONG_IMDB_DESCRIPTION else "LONG_IMDB_DESCRIPTION is disabled , Plot will be shorter.\n") +LOG_STR = "Current Customized Configurations are:-\n" +LOG_STR += ("IMDB Results are enabled, Bot will be showing imdb details for your queries.\n" if IMDB else "IMDB Results are disabled.\n") +LOG_STR += ("P_TTI_SHOW_OFF found, Users will be redirected to send /start to Bot PM instead of sending file directly\n" if P_TTI_SHOW_OFF else "P_TTI_SHOW_OFF is disabled, files will be sent in PM instead of sending start.\n") +LOG_STR += ("SINGLE_BUTTON is Found, filename and file size will be shown in a single button instead of two separate buttons\n" if SINGLE_BUTTON else "SINGLE_BUTTON is disabled, filename and file size will be shown as different buttons\n") +LOG_STR += (f"CUSTOM_FILE_CAPTION enabled with value {CUSTOM_FILE_CAPTION}, your files will be sent along with this customized caption.\n" if CUSTOM_FILE_CAPTION else "No CUSTOM_FILE_CAPTION Found, Default captions of file will be used.\n") +LOG_STR += ("Long IMDB storyline enabled." if LONG_IMDB_DESCRIPTION else "LONG_IMDB_DESCRIPTION is disabled, Plot will be shorter.\n") LOG_STR += ("Spell Check Mode Is Enabled, bot will be suggesting related movies if movie not found\n" if SPELL_CHECK_REPLY else "SPELL_CHECK_REPLY Mode disabled\n") LOG_STR += (f"MAX_LIST_ELM Found, long list will be shortened to first {MAX_LIST_ELM} elements\n" if MAX_LIST_ELM else "Full List of casts and crew will be shown in imdb template, restrict them by adding a value to MAX_LIST_ELM\n") LOG_STR += f"Your current IMDB template is {IMDB_TEMPLATE}" -HOW_TO_DOWNLOAD = environ.get('HOW_TO_DOWNLOAD', 'https://t.me/Sharath_Links/13') +HOW_TO_DOWNLOAD = environ.get('HOW_TO_DOWNLOAD', 'https://t.me/Sharath_Links/13') -AUTO_DELETE_SECONDS = int(environ.get('AUTO_DELETE_SECONDS', 100)) +AUTO_DELETE_SECONDS = int(environ.get('AUTO_DELETE_SECONDS', 300)) -FILE_REQ_CHANNEL = int(environ.get('FILE_REQ_CHANNEL', LOG_CHANNEL)) +FILE_REQ_CHANNEL = int(environ.get('FILE_REQ_CHANNEL', '')) -SHORTNER_SITE = environ.get('SHORTNER_SITE', '') #Put Only Shortner Site domain don't put like this https://tnlink.in/ +SHORTNER_SITE = environ.get('SHORTNER_SITE', '') # Put Only Shortner Site domain don't put like this https://tnlink.in/ -SHORTNER_API = environ.get('SHORTNER_API', '') +SHORTNER_API = environ.get('SHORTNER_API', '') -AUTO_DELETE = environ.get('AUTO_DELETE', 'True') +AUTO_DELETE = environ.get('AUTO_DELETE', 'True') diff --git a/plugins/commands.py b/plugins/commands.py index 52941a16..0d852840 100644 --- a/plugins/commands.py +++ b/plugins/commands.py @@ -10,6 +10,7 @@ from database.users_chats_db import db from info import CHANNELS, ADMINS, AUTH_CHANNEL, LOG_CHANNEL, PICS, BATCH_FILE_CAPTION, CUSTOM_FILE_CAPTION, PROTECT_CONTENT from utils import get_settings, get_size, is_subscribed, save_group_settings, temp +from utils import get_chat_member from database.connections_mdb import active_connection import re import json @@ -18,6 +19,20 @@ BATCH_FILES = {} + +async def some_command_handler(update, context): + user_id = update.effective_user.id + chat_id = AUTH_CHANNEL # or another channel ID + + member = await get_chat_member(context.bot, chat_id, user_id) + if member: + # Process member info + await update.message.reply_text(f"Welcome, {member.user.first_name}!") + else: + # Handle the case where member info couldn't be retrieved + await update.message.reply_text("Could not fetch member info.") + + @Client.on_message(filters.command("start") & filters.incoming) async def start(client, message): if message.chat.type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: diff --git a/plugins/pm_filter.py b/plugins/pm_filter.py index 7db2113d..68d246f6 100644 --- a/plugins/pm_filter.py +++ b/plugins/pm_filter.py @@ -388,7 +388,7 @@ async def cb_handler(client: Client, query: CallbackQuery): return else: g = short_url(f"https://t.me/{temp.U_NAME}?start={ident}_{file_id}") - await client.send_photo(chat_id=query.from_user.id, photo='https://graph.org/file/f7f173057c2b76940c79c.jpg', caption = f"📕Nᴀᴍᴇ ➠ : {files.file_name} \n\n🔗Sɪᴢᴇ ➠ : {get_size(files.file_size)}", + await client.send_photo(chat_id=query.from_user.id, photo='https://envs.sh/07P.jpg', caption = f"📕Nᴀᴍᴇ ➠ : {files.file_name} \n\n🔗Sɪᴢᴇ ➠ : {get_size(files.file_size)}", reply_markup=InlineKeyboardMarkup( [ [ @@ -440,8 +440,8 @@ async def cb_handler(client: Client, query: CallbackQuery): buttons = [[ InlineKeyboardButton('➕ Aᴅᴅ Mᴇ Tᴏ Yᴏᴜʀ Gʀᴏᴜᴘ ➕', url=f"https://t.me/{temp.U_NAME}?startgroup=true") ],[ - InlineKeyboardButton('💥 Mᴏᴠɪᴇ Uᴘᴅᴀᴛᴇs 💥', url='https://t.me/+5aoApavIMVo1YzQ1'), - InlineKeyboardButton('🔎 Sᴇᴀʀᴄʜ Gʀᴏᴜᴘ 🔍', url='https://t.me/TamilanMoviesChat') + InlineKeyboardButton('💥 Mᴏᴠɪᴇ Uᴘᴅᴀᴛᴇs 💥', url='https://t.me/latest_hindi_movies_hub'), + InlineKeyboardButton('🔎 Sᴇᴀʀᴄʜ Gʀᴏᴜᴘ 🔍', url='https://t.me/MovieTime_Movie_Request_Group') ],[ InlineKeyboardButton('😅 Sᴏᴜʀᴄᴇ Cᴏᴅᴇ 😊', callback_data='sources') ],[ @@ -457,7 +457,7 @@ async def cb_handler(client: Client, query: CallbackQuery): ) elif query.data == "about": buttons = [[ - InlineKeyboardButton('🤖 Uᴩᴅᴀᴛᴇs 😜', url='https://t.me/Tamilan_BotsZ'), + InlineKeyboardButton('🤖 Uᴩᴅᴀᴛᴇs 😜', url='https://t.me/ihackerdoc'), InlineKeyboardButton('♥️ Sʜᴀʀᴇ Mᴇ 💫', url=f"https://t.me/share/url?url=t.me/{temp.U_NAME}") ], [ InlineKeyboardButton('🔭 Sᴛᴀᴛs 📊', callback_data='stats'), @@ -495,7 +495,7 @@ async def cb_handler(client: Client, query: CallbackQuery): ],[ InlineKeyboardButton('🔭 Sᴛᴀᴛs 📊', callback_data='stats') ],[ - InlineKeyboardButton('😊 Sᴏᴜʀᴄᴇ Cᴏᴅᴇ ☺', url='https://Github.com/TamilanBotsZ/PremiumFilter') + InlineKeyboardButton('😊 Sᴏᴜʀᴄᴇ Cᴏᴅᴇ ☺', url='https://Github.com/ihackerdoc/PremiumFilter') ],[ InlineKeyboardButton('‹‹‹ Bᴀᴄᴋ', callback_data='about') ]] @@ -578,7 +578,7 @@ async def cb_handler(client: Client, query: CallbackQuery): elif query.data == "sources": buttons = [[ - InlineKeyboardButton('😊 Rᴇᴩᴏ 😊', url='https://Github.com/TamilanBotsZ/PremiumFilter') + InlineKeyboardButton('😊 Rᴇᴩᴏ 😊', url='https://Github.com/ihackerdoc/PremiumFilter') ], [ InlineKeyboardButton('‹‹‹ Bᴀᴄᴋ', callback_data='start') ]] @@ -591,7 +591,7 @@ async def cb_handler(client: Client, query: CallbackQuery): elif query.data == "source": buttons = [[ - InlineKeyboardButton('😊 Rᴇᴩᴏ 😊', url='https://Github.com/TamilanBotsZ/PremiumFilter') + InlineKeyboardButton('😊 Rᴇᴩᴏ 😊', url='https://Github.com/ihackerdoc/PremiumFilter') ], [ InlineKeyboardButton('‹‹‹ Bᴀᴄᴋ', callback_data='about') ]] @@ -603,7 +603,7 @@ async def cb_handler(client: Client, query: CallbackQuery): ) elif query.data == "info": buttons = [[ - InlineKeyboardButton('😪 Hᴏᴡ Tᴏ Oᴩᴇɴ Mʏ Lɪɴᴋs 💢', url='https://t.me/Sharath_Links/13') + InlineKeyboardButton('😪 Hᴏᴡ Tᴏ Oᴩᴇɴ Mʏ Lɪɴᴋs 💢', url='https://t.me/ihackerdoc/3') ], [ InlineKeyboardButton('📞 Cᴏɴᴛᴀᴄᴛ 📟', callback_data='contact') ], [ @@ -617,9 +617,9 @@ async def cb_handler(client: Client, query: CallbackQuery): ) elif query.data == "contact": buttons = [[ - InlineKeyboardButton('😳 Cʀᴇᴀᴛᴏʀ 😳', url='https://t.me/SharathItsIsMe') + InlineKeyboardButton('😳 Cʀᴇᴀᴛᴏʀ 😳', url='https://t.me/dochacks') ], [ - InlineKeyboardButton('📞 Cᴏɴᴛᴀᴄᴛ 📟', url='https://t.me/TamilanBotsZ_Support') + InlineKeyboardButton('📞 Cᴏɴᴛᴀᴄᴛ 📟', url='https://t.me/i_hackerdoc') ], [ InlineKeyboardButton('‹‹‹ Bᴀᴄᴋ', callback_data='about') ], [ diff --git a/utils.py b/utils.py index d3db6401..97fb790c 100644 --- a/utils.py +++ b/utils.py @@ -1,3 +1,4 @@ +from pyrogram import Client as Bot import logging from pyrogram.errors import InputUserDeactivated, UserNotParticipant, FloodWait, UserIsBlocked, PeerIdInvalid from info import * @@ -45,6 +46,15 @@ class temp(object): U_NAME = None B_NAME = None SETTINGS = {} + + +async def get_chat_member(bot: Bot, chat_id: int, user_id: int): + try: + chat_member = await bot.get_chat_member(chat_id, user_id) + return chat_member + except TelegramError as e: + logger.error(f"Error fetching chat member: {e}") + return None async def is_subscribed(bot, query): try: