Karma commited on
Commit
5ec82d0
·
1 Parent(s): 6c4322b

Update reverse.py

Browse files
Files changed (1) hide show
  1. Mikobot/plugins/reverse.py +77 -30
Mikobot/plugins/reverse.py CHANGED
@@ -1,13 +1,21 @@
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
@@ -15,8 +23,16 @@ async def reverseImageSearch(_: Client,m: t.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:
@@ -26,46 +42,77 @@ async def reverseImageSearch(_: Client,m: t.Message):
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",html_content=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}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CREATED BY: @Qewertyy
2
+
3
+ # <============================================== IMPORTS =========================================================>
4
+ import os
5
+ import traceback
6
+
7
+ from pyrogram import Client, filters
8
+ from pyrogram import types as t
9
 
 
 
10
  from Mikobot import app
11
+ from Mikobot.state import state
12
+
13
+ from .telegraph import telegraph, upload_file
14
 
15
+
16
+ # <================================================ FUNCTIONS =====================================================>
17
+ @app.on_message(filters.command(["p", "pp", "reverse", "sauce"]))
18
+ async def reverseImageSearch(_: Client, m: t.Message):
19
  try:
20
  reply = await m.reply_text("`Downloading...`")
21
  file = None
 
23
  return await reply.edit("Reply to an image?")
24
  if m.reply_to_message.document is False or m.reply_to_message.photo is False:
25
  return await reply.edit("Reply to an image?")
26
+ if (
27
+ m.reply_to_message.document
28
+ and m.reply_to_message.document.mime_type
29
+ in ["image/png", "image/jpg", "image/jpeg"]
30
+ or m.reply_to_message.photo
31
+ ):
32
+ if (
33
+ m.reply_to_message.document
34
+ and m.reply_to_message.document.file_size > 5242880
35
+ ):
36
  return await reply.edit("Reply to an image?")
37
  file = await m.reply_to_message.download()
38
  else:
 
42
  os.remove(file)
43
  if imgUrl is None:
44
  return await reply.edit("Ran into an error.")
45
+ output = await ReverseImageSearch("google", f"https://graph.org/{imgUrl[0]}")
46
  if output is None:
47
  return await reply.edit("Ran into an error.")
48
+ message = ""
49
+ names = output["content"]["bestResults"]["names"]
50
+ urls = output["content"]["bestResults"]["urls"]
51
  btn = t.InlineKeyboardMarkup(
52
+ [[t.InlineKeyboardButton(text="IMAGE URL", url=urls[-1])]]
53
+ )
 
 
 
54
  if len(names) > 10:
55
+ message = "\n".join(
56
+ [f"{index+1}. {name}" for index, name in enumerate(names[:10])]
57
+ )
58
+ htmlMessage = f"<br/>".join(
59
+ [f"{index+1}. {name}" for index, name in enumerate(names)]
60
+ )
61
  htmlMessage += "<br/><br/><h3>URLS</h3><br/>"
62
  htmlMessage += f"<br/>".join([f"{url}" for url in urls])
63
+ htmlMessage += (
64
+ "<br/><br/>By <a href='https://lexica.qewertyy.me'>LexicaAPI</a>"
65
+ )
66
+ url = telegraph.create_page("More Results", html_content=htmlMessage)
67
  message += f"\n\n[More Results]({url})\nBy @LexicaAPI"
68
  await reply.delete()
69
+ return await m.reply_text(message, reply_markup=btn)
70
+ message = "\n".join(
71
+ [
72
+ f"{index+1}. {name}"
73
+ for index, name in enumerate(output["content"]["bestResults"]["names"])
74
+ ]
75
+ )
76
  await reply.delete()
77
+ await m.reply_text(f"{message}\n\nBy @LexicaAPI", reply_markup=btn)
78
  except Exception as E:
79
  traceback.print_exc()
80
  return await m.reply_text("Ran into an error.")
81
 
82
+
83
+ async def ReverseImageSearch(search_engine, img_url) -> dict:
84
  try:
85
+ response = await state.post(
 
86
  f"https://lexica.qewertyy.me/image-reverse/{search_engine}?img_url={img_url}",
87
  )
88
  if response.status_code != 200:
89
  return None
90
  output = response.json()
91
+ if output["code"] != 2:
92
  return None
93
  return output
94
  except Exception as E:
95
+ raise Exception(f"API Error: {E}")
96
+
97
+
98
+ # <=================================================== HELP ====================================================>
99
+
100
+
101
+ __help__ = """
102
+ 🖼 *IMAGE REVERSE*
103
+
104
+ » `/p`, `/pp`, `/reverse`, `/sauce`: Reverse image search using various search engines.
105
+
106
+ ➠ *Usage:*
107
+ Reply to an image with one of the above commands to perform a reverse image search.
108
+
109
+ ➠ *Example:*
110
+ » `/p` - Perform a reverse image search.
111
+
112
+ ➠ *Note:*
113
+ - Supported image formats: PNG, JPG, JPEG.
114
+ - Maximum file size: 5 MB.
115
+ """
116
+
117
+ __mod_name__ = "REVERSE"
118
+ # <================================================ END =======================================================>