mirror of
https://github.com/Nick80835/microbot
synced 2025-09-05 08:55:51 +00:00
191 lines
5.0 KiB
Python
191 lines
5.0 KiB
Python
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
from time import time_ns
|
|
|
|
from telethon import Button
|
|
|
|
from ubot.micro_bot import ldr
|
|
|
|
SAN_URL = "https://capi-v2.sankakucomplex.com/posts"
|
|
SAN_SAUCE_URL = "https://beta.sankakucomplex.com/post/show/"
|
|
san_button_dict = {}
|
|
|
|
|
|
@ldr.add("sanping", sudo=True, hide_help=True)
|
|
async def sankaku_ping(event):
|
|
params = {"page": 1,
|
|
"limit": 3,
|
|
"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")
|
|
|
|
|
|
@ldr.add("san(s|x|q|)(f|)", nsfw=True, userlocking=True)
|
|
async def sankaku(event):
|
|
safety_arg = event.other_args[0]
|
|
as_file = bool(event.other_args[1])
|
|
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": 3,
|
|
"tags": f"order:random {rating} {event.args}".strip().replace(" ", " ")}
|
|
|
|
async with ldr.aioclient.get(SAN_URL, params=params) as response:
|
|
if response.status == 200:
|
|
response = await response.json()
|
|
else:
|
|
await event.reply(f"An error occurred, response code: **{response.status}**")
|
|
return
|
|
|
|
if not response:
|
|
await event.reply(f"No results for query: {event.args}")
|
|
return
|
|
|
|
valid_urls = []
|
|
|
|
for post in response:
|
|
if 'file_url' in post.keys():
|
|
valid_urls.append([post['file_url'], post['id']])
|
|
|
|
if not valid_urls:
|
|
await event.reply(f"Failed to find URLs for query: {event.args}")
|
|
return
|
|
|
|
for image in valid_urls:
|
|
try:
|
|
await event.reply(f"[sauce]({SAN_SAUCE_URL}{image[1]})", file=image[0], force_document=as_file)
|
|
return
|
|
except:
|
|
pass
|
|
|
|
await event.reply(f"Failed to fetch media for query: {event.args}")
|
|
|
|
|
|
@ldr.add_inline_photo("san(s|x|q|)", default="san")
|
|
async def sankaku_inline(event):
|
|
safety_arg = event.other_args[0]
|
|
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": 3,
|
|
"tags": f"order:random {rating} {event.args}".strip().replace(" ", " ")}
|
|
|
|
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():
|
|
valid_urls.append([post['file_url'], f"[sauce]({SAN_SAUCE_URL}{post['id']})"])
|
|
|
|
if not valid_urls:
|
|
return None
|
|
|
|
return valid_urls[:3]
|
|
|
|
|
|
@ldr.add("sanb", nsfw=True, userlocking=True)
|
|
async def sankaku_buttons(event):
|
|
params = {"page": 1,
|
|
"limit": 30,
|
|
"tags": f"order:random {event.args}".strip()}
|
|
|
|
async with ldr.aioclient.get(SAN_URL, params=params) as response:
|
|
if response.status == 200:
|
|
response = await response.json()
|
|
else:
|
|
await event.reply(f"An error occurred, response code: **{response.status}**")
|
|
return
|
|
|
|
if not response:
|
|
await event.reply(f"No results for query: {event.args}")
|
|
return
|
|
|
|
valid_urls = []
|
|
|
|
for post in response:
|
|
if 'file_url' in post.keys():
|
|
valid_urls.append([post['file_url'], post['id']])
|
|
|
|
if not valid_urls:
|
|
await event.reply(f"Failed to find URLs for query: {event.args}")
|
|
return
|
|
|
|
san_button_dict[f"{event.chat.id}_{event.id}"] = [0, valid_urls]
|
|
|
|
await event.reply(
|
|
f"[sauce]({SAN_SAUCE_URL}{valid_urls[0][1]})",
|
|
file=valid_urls[0][0],
|
|
buttons=[Button.inline('➡️', f'san*{event.chat.id}_{event.id}*r')]
|
|
)
|
|
|
|
|
|
@ldr.add_callback_query("san")
|
|
async def sankaku_buttons_callback(event):
|
|
args_split = event.args.split("*")
|
|
|
|
dict_id = args_split[0]
|
|
direction = args_split[1]
|
|
|
|
if dict_id in san_button_dict:
|
|
this_dict = san_button_dict[dict_id]
|
|
else:
|
|
return
|
|
|
|
if direction == "r":
|
|
this_dict[0] += 1
|
|
|
|
if this_dict[0] + 1 > len(this_dict[1]):
|
|
this_dict[0] = len(this_dict[1]) - 1
|
|
|
|
this_image = this_dict[1][this_dict[0]]
|
|
elif direction == "l":
|
|
this_dict[0] -= 1
|
|
|
|
if this_dict[0] < 0:
|
|
this_dict[0] = 0
|
|
|
|
this_image = this_dict[1][this_dict[0]]
|
|
|
|
buttons = []
|
|
|
|
if this_dict[0] > 0:
|
|
buttons += [Button.inline('⬅️', f'san*{dict_id}*l')]
|
|
|
|
if len(this_dict[1]) - 1 > this_dict[0]:
|
|
buttons += [Button.inline('➡️', f'san*{dict_id}*r')]
|
|
|
|
try:
|
|
await event.edit(
|
|
f"[sauce]({SAN_SAUCE_URL}{this_image[1]})",
|
|
file=this_image[0],
|
|
buttons=buttons
|
|
)
|
|
except:
|
|
pass
|