import io import json from datetime import datetime import requests from pyrogram import Client, enums, filters from pyrogram.types import Message from utils.misc import modules_help, prefix TIKTOK_API_URL = 'https://api.maher-zubair.tech/stalk/tiktok?q=' INSTAGRAM_API_URL = 'https://tools.betabotz.eu.org/tools/stalk-ig?q=' GH_STALK = 'https://api.github.com/users/' @Client.on_message(filters.command(['tiktokstalk'], prefix) & filters.me) async def tiktok_stalk(_, message: Message): query = '' if len(message.command) > 1: query = message.command[1] elif message.reply_to_message: query = message.reply_to_message.text.strip() if not query: await message.edit('Usage: `tiktokstalk ` or reply to a message containing the username.') return await message.edit('Fetching TikTok profile...') url = f'{TIKTOK_API_URL}{query}' response = requests.get(url, timeout=10) if response.status_code == 200: data = response.json().get('result', {}) if data: profile_pic_url = data.get('profile', '') profile_pic = requests.get(profile_pic_url, timeout=10).content profile_pic_stream = io.BytesIO(profile_pic) profile_pic_stream.name = 'profile.jpg' await message.reply_photo( photo=profile_pic_stream, caption=( f'TikTok Profile:\n' f'Name: {data.get("name", "N/A")}\n' f'Username: {data.get("username", "N/A")}\n' f'Followers: {data.get("followers", "N/A")}\n' f'Following: {data.get("following", "N/A")}\n' f'Likes: {data.get("likes", "N/A")}\n' f'Description: {data.get("desc", "N/A")}\n' f'Bio: {data.get("bio", "N/A")}' ), parse_mode=enums.ParseMode.MARKDOWN, ) else: await message.edit('No data found for this TikTok user.') await message.delete() else: await message.edit('An error occurred, please try again later.') @Client.on_message(filters.command('ipinfo', prefix) & filters.me) async def ipinfo(_, message: Message): searchip = message.text.split(' ', 1) if len(searchip) == 1: await message.edit_text(f'Usage:{prefix}ipinfo [ip]') return searchip = searchip[1] m = await message.edit_text('Searching...') await m.edit_text('🔎') try: url = requests.get( f'http://ip-api.com/json/{searchip}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,district,zip,lat,lon,timezone,offset,currency,isp,org,as,asname,reverse,mobile,proxy,hosting,query', timeout=10, ) response = json.loads(url.text) text = f""" IP Address: {response['query']} Status: {response['status']} Continent Code: {response['continentCode']} Country: {response['country']} Country Code : {response['countryCode']} Region: {response['region']} Region Name : {response['regionName']} City: {response['city']} District: {response['district']} ZIP: {response['zip']} Latitude: {response['lat']} Longitude: {response['lon']} Time Zone: {response['timezone']} Offset: {response['offset']} Currency: {response['currency']} ISP: {response['isp']} Org: {response['org']} As: {response['as']} Asname: {response['asname']} Reverse: {response['reverse']} User is on Mobile: {response['mobile']} Proxy: {response['proxy']} Hosting: {response['hosting']}""" await m.edit_text(text) except Exception: await m.edit_text('Unable To Find Info!') @Client.on_message(filters.command('instastalk', prefix) & filters.me) async def instagram_stalk(_, message: Message): if len(message.command) > 1: query = message.text.split(maxsplit=1)[1] elif message.reply_to_message: query = message.reply_to_message.text else: await message.edit( f'Usage: {prefix}instastalk or reply to a message containing the username.' ) return await message.edit('Fetching Instagram profile...') url = f'{INSTAGRAM_API_URL}{query}' response = requests.get(url, timeout=10) if response.status_code == 200: data = response.json().get('result', {}).get('user_info', {}) if data: profile_pic_url = data.get('profile_pic_url', '') profile_pic = requests.get(profile_pic_url, timeout=10).content profile_pic_stream = io.BytesIO(profile_pic) profile_pic_stream.name = 'profile.jpg' await message.reply_photo( photo=profile_pic_stream, caption=( f'Instagram Profile:\n' f'Full Name: {data.get("full_name", "N/A")}\n' f'Username: {data.get("username", "N/A")}\n' f'Biography: {data.get("biography", "N/A")}\n' f'External URL: {data.get("external_url", "N/A")}\n' f'Posts: {data.get("posts", "N/A")}\n' f'Followers: {data.get("followers", "N/A")}\n' f'Following: {data.get("following", "N/A")}' ), parse_mode=enums.ParseMode.MARKDOWN, ) else: await message.edit('No data found for this Instagram user.') await message.delete() else: await message.edit('An error occurred, please try again later.') @Client.on_message(filters.command('ghstalk', prefix) & filters.me) async def github_stalk(_, message: Message): if len(message.command) > 1: query = message.text.split(maxsplit=1)[1] elif message.reply_to_message: query = message.reply_to_message.text else: await message.edit( f'Usage: {prefix}ghstalk or reply to a message containing the username.' ) return await message.edit('Fetching GitHub profile...') url = f'{GH_STALK}{query}' response = requests.get(url, timeout=10) if response.status_code == 200: data = response.json() created_at = data.get('created_at', 'N/A') formatted_date = datetime.strptime(created_at, '%Y-%m-%dT%H:%M:%S%z') if created_at != 'N/A' else None if data: await message.reply_photo( photo=data.get('avatar_url', '').replace('?v=4', ''), caption=f'GitHub Profile:\n' f'Name: {data.get("name", "N/A")}\n' f'Username: {data.get("login", "N/A")}\n' f'Bio: {data.get("bio", "N/A")}\n' f"Public Repositories: {data.get('public_repos', 'N/A')}\n" f"Public Gists: {data.get('public_gists', 'N/A')}\n" f'Company: {data.get("company", "N/A")}\n' f'Location: {data.get("location", "N/A")}\n' f'Email: {data.get("email", "N/A")}\n' f'Website: {data.get("blog", "N/A")}\n' f'Created At: {formatted_date.strftime("%Y-%m-%d %I:%M:%S %p") if formatted_date else "N/A"}\n' f'Hireable: {data.get("hireable", "N/A")}\n' f'Followers: {data.get("followers", "N/A")}\n' f'Following: {data.get("following", "N/A")}', ) else: await message.edit('No data found for this GitHub user.') else: await message.edit('An error occurred, please try again later.') modules_help['socialstalk'] = { 'tiktokstalk [username]*': 'Get TikTok profile information', 'ipinfo [IP address]*': 'Get information about an IP address', 'instastalk [username]*': 'Get Instagram profile information', 'ghstalk [username]*': 'Get GitHub profile information', }