from datetime import datetime import json import requests from pyrogram import Client, enums, filters from pyrogram.types import Message import io 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) 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).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" ) 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: 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) 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).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) 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", }