dragxd / plugins /search.py
taslim19
Push entire Ultroid-main project to Hugging Face Space
1f26706
raw
history blame
6.16 kB
# 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
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
"""
✘ Commands Available -
β€’ `{i}saavn <search query>`
Download songs from Saavn.
β€’ `{i}google <query>`
For doing google search.
β€’ `{i}github <username>`
Get full information of the users github profile.
β€’ `{i}img <query>`
`{i}img <query> ; <no of results>`
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)