2020-05-03 13:06:06 -04:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
2020-06-10 12:11:26 -04:00
|
|
|
from time import time_ns
|
|
|
|
|
2020-05-03 13:06:06 -04:00
|
|
|
from ubot.micro_bot import micro_bot
|
|
|
|
|
|
|
|
ldr = micro_bot.loader
|
|
|
|
|
|
|
|
SAN_URL = "https://capi-v2.sankakucomplex.com/posts"
|
2020-06-06 11:45:03 -04:00
|
|
|
SAN_SAUCE_URL = "https://beta.sankakucomplex.com/post/show/"
|
2020-05-03 13:06:06 -04:00
|
|
|
|
|
|
|
|
2020-06-10 12:11:26 -04:00
|
|
|
@ldr.add("sanping", sudo=True)
|
|
|
|
async def sankaku_ping(event):
|
|
|
|
params = {"page": 1,
|
|
|
|
"limit": 5,
|
|
|
|
"tags": f"order:random"}
|
|
|
|
|
|
|
|
start = time_ns()
|
|
|
|
|
|
|
|
async with ldr.aioclient.get(SAN_URL, params=params) as _:
|
|
|
|
time_taken_ms = int((time_ns() - start) / 1000000)
|
|
|
|
await event.reply(f"Sankaku response time -> **{time_taken_ms}**ms")
|
|
|
|
|
|
|
|
|
2020-06-16 19:16:06 -04:00
|
|
|
@ldr.add("san(s|x|q|)(f|)", nsfw=True, userlocking=True)
|
2020-05-03 13:06:06 -04:00
|
|
|
async def sankaku(event):
|
|
|
|
safety_arg = event.pattern_match.group(1)
|
|
|
|
as_file = bool(event.pattern_match.group(2))
|
|
|
|
rating = ""
|
|
|
|
|
|
|
|
if safety_arg == "x":
|
|
|
|
rating = "rating:explicit"
|
|
|
|
elif safety_arg == "s":
|
|
|
|
rating = "rating:safe"
|
|
|
|
elif safety_arg == "q":
|
|
|
|
rating = "rating:questionable"
|
|
|
|
|
|
|
|
params = {"page": 1,
|
|
|
|
"limit": 5,
|
|
|
|
"tags": f"order:random {rating} {event.args}".strip().replace(" ", " ")}
|
|
|
|
|
2020-05-09 13:15:08 -04:00
|
|
|
async with ldr.aioclient.get(SAN_URL, params=params) as response:
|
2020-05-03 13:06:06 -04:00
|
|
|
if response.status == 200:
|
|
|
|
response = await response.json()
|
|
|
|
else:
|
2020-06-06 11:04:14 -04:00
|
|
|
await event.reply(f"An error occurred, response code: **{response.status}**")
|
2020-05-03 13:06:06 -04:00
|
|
|
return
|
|
|
|
|
|
|
|
if not response:
|
2020-06-06 11:04:14 -04:00
|
|
|
await event.reply(f"No results for query: {event.args}")
|
2020-05-03 13:06:06 -04:00
|
|
|
return
|
|
|
|
|
|
|
|
valid_urls = []
|
|
|
|
|
2020-05-03 20:45:35 -04:00
|
|
|
for post in response:
|
|
|
|
if 'file_url' in post.keys():
|
2020-06-06 11:45:03 -04:00
|
|
|
valid_urls.append([post['file_url'], post['id']])
|
2020-05-03 13:06:06 -04:00
|
|
|
|
|
|
|
if not valid_urls:
|
2020-06-06 11:04:14 -04:00
|
|
|
await event.reply(f"Failed to find URLs for query: {event.args}")
|
2020-05-03 13:06:06 -04:00
|
|
|
return
|
|
|
|
|
2020-06-06 11:45:03 -04:00
|
|
|
for image in valid_urls:
|
2020-05-03 13:06:06 -04:00
|
|
|
try:
|
2020-06-06 11:45:03 -04:00
|
|
|
await event.reply(f"[sauce]({SAN_SAUCE_URL}{image[1]})", file=image[0], force_document=as_file)
|
2020-05-03 13:06:06 -04:00
|
|
|
return
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
2020-06-06 11:04:14 -04:00
|
|
|
await event.reply(f"Failed to fetch media for query: {event.args}")
|
2020-05-16 17:52:29 -04:00
|
|
|
|
|
|
|
|
2020-05-21 13:53:11 -04:00
|
|
|
@ldr.add_inline_photo("san(s|x|q|)", default="san")
|
|
|
|
async def sankaku_inline(event):
|
|
|
|
safety_arg = event.pattern_match.group(1)
|
|
|
|
rating = ""
|
|
|
|
|
|
|
|
if safety_arg == "x":
|
|
|
|
rating = "rating:explicit"
|
|
|
|
elif safety_arg == "s":
|
|
|
|
rating = "rating:safe"
|
|
|
|
elif safety_arg == "q":
|
|
|
|
rating = "rating:questionable"
|
|
|
|
|
2020-05-16 17:52:29 -04:00
|
|
|
params = {"page": 1,
|
2020-05-21 13:53:11 -04:00
|
|
|
"limit": 3,
|
|
|
|
"tags": f"order:random {rating} {event.args}".strip().replace(" ", " ")}
|
2020-05-16 17:52:29 -04:00
|
|
|
|
|
|
|
async with ldr.aioclient.get(SAN_URL, params=params) as response:
|
|
|
|
if response.status == 200:
|
|
|
|
response = await response.json()
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
|
|
|
|
if not response:
|
|
|
|
return None
|
|
|
|
|
|
|
|
valid_urls = []
|
|
|
|
|
|
|
|
for post in response:
|
|
|
|
if 'file_url' in post.keys():
|
2020-06-15 13:04:35 -04:00
|
|
|
valid_urls.append([post['file_url'], f"[sauce]({SAN_SAUCE_URL}{post['id']})"])
|
2020-05-16 17:52:29 -04:00
|
|
|
|
|
|
|
if not valid_urls:
|
|
|
|
return None
|
|
|
|
|
2020-05-21 13:53:11 -04:00
|
|
|
return valid_urls[:3]
|