Qewertyy
commited on
Commit
·
5d0b623
1
Parent(s):
10c38e1
reverse image search
Browse files- Mikobot/plugins/reverse.py +71 -0
Mikobot/plugins/reverse.py
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright 2023 Qewertyy, MIT License
|
2 |
+
|
3 |
+
import traceback,os
|
4 |
+
from pyrogram import Client,filters, types as t
|
5 |
+
from Mikobot import app
|
6 |
+
from .telegraph import upload_file,telegraph
|
7 |
+
import httpx
|
8 |
+
|
9 |
+
@app.on_message(filters.command(["pp","reverse","sauce"]))
|
10 |
+
async def reverseImageSearch(_: Client,m: t.Message):
|
11 |
+
try:
|
12 |
+
reply = await m.reply_text("`Downloading...`")
|
13 |
+
file = None
|
14 |
+
if not m.reply_to_message:
|
15 |
+
return await reply.edit("Reply to an image?")
|
16 |
+
if m.reply_to_message.document is False or m.reply_to_message.photo is False:
|
17 |
+
return await reply.edit("Reply to an image?")
|
18 |
+
if m.reply_to_message.document and m.reply_to_message.document.mime_type in ['image/png','image/jpg','image/jpeg'] or m.reply_to_message.photo:
|
19 |
+
if m.reply_to_message.document and m.reply_to_message.document.file_size > 5242880:
|
20 |
+
return await reply.edit("Reply to an image?")
|
21 |
+
file = await m.reply_to_message.download()
|
22 |
+
else:
|
23 |
+
return await reply.edit("Reply to an image?")
|
24 |
+
await reply.edit("`Uploading to the server...`")
|
25 |
+
imgUrl = upload_file(file)
|
26 |
+
os.remove(file)
|
27 |
+
if imgUrl is None:
|
28 |
+
return await reply.edit("Ran into an error.")
|
29 |
+
output = await ReverseImageSearch("google",f"https://graph.org/{imgUrl[0]}")
|
30 |
+
if output is None:
|
31 |
+
return await reply.edit("Ran into an error.")
|
32 |
+
message = ''
|
33 |
+
names = output['content']['bestResults']['names']
|
34 |
+
urls = output['content']['bestResults']['urls']
|
35 |
+
btn = t.InlineKeyboardMarkup(
|
36 |
+
[
|
37 |
+
[
|
38 |
+
t.InlineKeyboardButton(text="Image URL",url=urls[-1])
|
39 |
+
]
|
40 |
+
])
|
41 |
+
if len(names) > 10:
|
42 |
+
message = "\n".join([f"{index+1}. {name}" for index, name in enumerate(names[:10])])
|
43 |
+
htmlMessage = f"<br/>".join([f"{index+1}. {name}" for index, name in enumerate(names)])
|
44 |
+
htmlMessage += "<br/><br/><h3>URLS</h3><br/>"
|
45 |
+
htmlMessage += f"<br/>".join([f"{url}" for url in urls])
|
46 |
+
htmlMessage += "<br/><br/>By <a href='https://lexica.qewertyy.me'>LexicaAPI</a>"
|
47 |
+
url = telegraph.create_page("More Results",htmlMessage)
|
48 |
+
message += f"\n\n[More Results]({url})\nBy @LexicaAPI"
|
49 |
+
await reply.delete()
|
50 |
+
return await m.reply_text(message,reply_markup=btn)
|
51 |
+
message ="\n".join([f"{index+1}. {name}" for index, name in enumerate(output['content']['bestResults']['names'])])
|
52 |
+
await reply.delete()
|
53 |
+
await m.reply_text(f"{message}\n\nBy @LexicaAPI",reply_markup=btn)
|
54 |
+
except Exception as E:
|
55 |
+
traceback.print_exc()
|
56 |
+
return await m.reply_text("Ran into an error.")
|
57 |
+
|
58 |
+
async def ReverseImageSearch(search_engine,img_url) -> dict:
|
59 |
+
try:
|
60 |
+
client = httpx.AsyncClient()
|
61 |
+
response = await client.post(
|
62 |
+
f"https://lexica.qewertyy.me/image-reverse/{search_engine}?img_url={img_url}",
|
63 |
+
)
|
64 |
+
if response.status_code != 200:
|
65 |
+
return None
|
66 |
+
output = response.json()
|
67 |
+
if output['code'] != 2:
|
68 |
+
return None
|
69 |
+
return output
|
70 |
+
except Exception as E:
|
71 |
+
raise Exception(f"API Error: {E}")
|