Qewertyy commited on
Commit
5d0b623
·
1 Parent(s): 10c38e1

reverse image search

Browse files
Files changed (1) hide show
  1. 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}")