# Ultroid - UserBot # Copyright (C) 2021-2025 TeamUltroid # # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > # PLease read the GNU Affero General Public License in # . """ ✘ Commands Available - • `{i}saavn ` Download songs from Saavn. • `{i}google ` For doing google search. • `{i}github ` Get full information of the users github profile. • `{i}img ` `{i}img ; ` For doing Images search. • `{i}reverse` Reply an Image or sticker to find its sauce. """ import os import requests from bs4 import BeautifulSoup as bs try: from PIL import Image except ImportError: Image = None try: import cv2 except ImportError: cv2 = None from telethon.tl.types import DocumentAttributeAudio from pyUltroid.fns.misc import google_search from pyUltroid.fns.tools import get_google_images, saavn_search from . import LOGS, async_searcher, con, eod, fast_download, get_string, ultroid_cmd @ultroid_cmd( pattern="github (.*)", ) async def gitsearch(event): usrname = event.pattern_match.group(1).strip() if not usrname: return await event.eor(get_string("srch_1")) url = f"https://api.github.com/users/{usrname}" ult = await async_searcher(url, re_json=True) try: uname = ult["login"] uid = ult["id"] upic = f"https://avatars.githubusercontent.com/u/{uid}" ulink = ult["html_url"] uacc = ult["name"] ucomp = ult["company"] ublog = ult["blog"] ulocation = ult["location"] ubio = ult["bio"] urepos = ult["public_repos"] ufollowers = ult["followers"] ufollowing = ult["following"] except BaseException: return await event.eor(get_string("srch_2")) fullusr = f""" **[GITHUB]({ulink})** **Name** - {uacc} **UserName** - {uname} **ID** - {uid} **Company** - {ucomp} **Blog** - {ublog} **Location** - {ulocation} **Bio** - {ubio} **Repos** - {urepos} **Followers** - {ufollowers} **Following** - {ufollowing} """ await event.respond(fullusr, file=upic) await event.delete() @ultroid_cmd( pattern="google( (.*)|$)", manager=True, ) async def google(event): inp = event.pattern_match.group(1).strip() if not inp: return await eod(event, get_string("autopic_1")) x = await event.eor(get_string("com_2")) gs = await google_search(inp) if not gs: return await eod(x, get_string("autopic_2").format(inp)) out = "" for res in gs: text = res["title"] url = res["link"] des = res["description"] out += f" 👉🏻 [{text}]({url})\n`{des}`\n\n" omk = f"**Google Search Query:**\n`{inp}`\n\n**Results:**\n{out}" await x.eor(omk, link_preview=False) @ultroid_cmd(pattern="img( (.*)|$)") async def goimg(event): query = event.pattern_match.group(1).strip() if not query: return await event.eor(get_string("autopic_1")) nn = await event.eor(get_string("com_1")) lmt = 5 if ";" in query: try: lmt = int(query.split(";")[1]) query = query.split(";")[0] except BaseException: pass images = await get_google_images(query) for img in images[:lmt]: try: await event.client.send_file(event.chat_id, file=img["original"]) except Exception as er: LOGS.exception(er) await nn.delete() @ultroid_cmd(pattern="reverse$") async def reverse(event): reply = await event.get_reply_message() if not reply: return await event.eor("`Reply to an Image`") ult = await event.eor(get_string("com_1")) dl = await reply.download_media() file = await con.convert(dl, convert_to="png") img = Image.open(file) x, y = img.size files = {"encoded_image": (file, open(file, "rb"))} grs = requests.post( "https://www.google.com/searchbyimage/upload", files=files, allow_redirects=False, ) loc = grs.headers.get("Location") response = await async_searcher( loc, headers={ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0", }, ) with open("response.html", "w") as f: f.write(response) xx = bs(response, "html.parser") div = xx.find_all("div", {"class": "kb0PBd"})[0] alls = div.find("a") link = alls["href"] text = alls.text await ult.edit(f"`Dimension ~ {x} : {y}`\nSauce ~ [{text}](google.com{link})") images = await get_google_images(text) for z in images[:2]: try: await event.client.send_file( event.chat_id, file=z["original"], caption="Similar Images Realted to Search", ) except Exception as er: LOGS.exception(er) os.remove(file) @ultroid_cmd( pattern="saavn( (.*)|$)", ) async def siesace(e): song = e.pattern_match.group(1).strip() if not song: return await e.eor("`Give me Something to Search", time=5) eve = await e.eor(f"`Searching for {song} on Saavn...`") try: data = (await saavn_search(song))[0] except IndexError: return await eve.eor(f"`{song} not found on saavn.`") try: title = data["title"] url = data["url"] img = data["image"] duration = data["duration"] performer = data["artists"] except KeyError: return await eve.eor("`Something went wrong.`") song, _ = await fast_download(url, filename=f"{title}.m4a") thumb, _ = await fast_download(img, filename=f"{title}.jpg") song, _ = await e.client.fast_uploader(song, to_delete=True) await eve.eor( file=song, text=f"`{title}`\n`From Saavn`", attributes=[ DocumentAttributeAudio( duration=int(duration), title=title, performer=performer, ) ], supports_streaming=True, thumb=thumb, ) await eve.delete() os.remove(thumb)