mirror of
https://github.com/yasirarism/MissKatyPyro.git
synced 2026-01-02 02:44:50 +00:00
Add subdl beta
This commit is contained in:
parent
53b6fae2d6
commit
234c41c384
2 changed files with 115 additions and 51 deletions
|
|
@ -78,7 +78,7 @@ async def balas(c, m):
|
|||
await m.reply(pesan[1], reply_to_message_id=m.reply_to_message.id)
|
||||
|
||||
|
||||
@app.on_message(filters.command(["stats"], COMMAND_HANDLER) & filters.user(SUDO))
|
||||
@app.on_message(filters.command(["stats"], COMMAND_HANDLER))
|
||||
async def server_stats(c, m):
|
||||
"""
|
||||
Give system stats of the server.
|
||||
|
|
|
|||
|
|
@ -1,61 +1,125 @@
|
|||
from misskaty.core.message_utils import *
|
||||
from misskaty.vars import COMMAND_HANDLER
|
||||
from pyrogram import filters
|
||||
import cloudscraper, logging
|
||||
from misskaty import app
|
||||
import logging
|
||||
|
||||
import cloudscraper
|
||||
from bs4 import BeautifulSoup
|
||||
from pykeyboard import InlineButton, InlineKeyboard
|
||||
from misskaty.helper import http
|
||||
from pyrogram import filters
|
||||
|
||||
from misskaty import app
|
||||
from misskaty.core.decorator.ratelimiter import ratelimiter
|
||||
from misskaty.core.message_utils import *
|
||||
from misskaty.helper import http
|
||||
from misskaty.vars import COMMAND_HANDLER
|
||||
|
||||
from .web_scraper import split_arr
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
SUB_TITLE_DICT = {}
|
||||
SUB_DL_DICT = {}
|
||||
|
||||
@app.on_message(filters.command(["subscene"], COMMAND_HANDLER))
|
||||
@ratelimiter
|
||||
async def imdb_search_id(client, message):
|
||||
BTN = []
|
||||
if len(message.command) == 1:
|
||||
return await kirimPesan(message, f"ℹ️ Please add query after CMD!\nEx: <code>/{message.command[0]} Jurassic World</code>")
|
||||
if message.sender_chat:
|
||||
return await kirimPesan(message, "This feature not supported for channel..")
|
||||
kueri = message.text.split(None, 1)[1]
|
||||
k = await kirimPesan(
|
||||
message,
|
||||
f"🔎 Searching <code>{kueri}</code> Subscene database...",
|
||||
quote=True,
|
||||
)
|
||||
msg = ""
|
||||
buttons = InlineKeyboard(row_width=4)
|
||||
scraper = cloudscraper.create_scraper()
|
||||
try:
|
||||
# Get list title based on query
|
||||
async def getTitleSub(msg, kueri, CurrentPage, user):
|
||||
if not SUB_TITLE_DICT.get(msg.id):
|
||||
sdata = []
|
||||
scraper = cloudscraper.create_scraper()
|
||||
param = {"query": kueri}
|
||||
r = scraper.post("https://subscene.com/subtitles/searchbytitle", data=param).text
|
||||
soup = BeautifulSoup(r,"lxml")
|
||||
lists = soup.find("div", {"class": "search-result"})
|
||||
a = lists.find_all("div", {"class":"title"})
|
||||
LOGGER.info(a)
|
||||
# if not res:
|
||||
# return await k.edit_caption(f"⛔️ No Result Found For: <code>{kueri}</code>")
|
||||
msg += f"🎬 Found ({len(a)}) result for : <code>{kueri}</code>\n\n"
|
||||
for num, sub in enumerate(a, start=1):
|
||||
entry = lists.find_all("div", {"class":"title"})
|
||||
# if "Tidak Ditemukan" in entry[0].text:
|
||||
# await editPesan(msg, f"Sorry, could not find any result for: {kueri}")
|
||||
# return None, 0, None
|
||||
for sub in entry:
|
||||
title = sub.find('a').text
|
||||
url = f"https://subscene.com{sub.find('a').get('href')}"
|
||||
msg += f"{num}. <a href='{url}'>{title}</a>\n"
|
||||
BTN.append(
|
||||
InlineButton(
|
||||
text=num,
|
||||
callback_data=f"subscene#{message.from_user.id}#hehehe",
|
||||
)
|
||||
)
|
||||
BTN.extend(
|
||||
(
|
||||
InlineButton(
|
||||
text="❌ Close",
|
||||
callback_data=f"close#{message.from_user.id}",
|
||||
),
|
||||
)
|
||||
)
|
||||
buttons.add(*BTN)
|
||||
await editPesan(k, msg, reply_markup=buttons)
|
||||
except Exception as err:
|
||||
await editPesan(k, f"Ooppss, failed get subtitle list from subscene.\n\n<b>ERROR:</b> <code>{err}</code>")
|
||||
link = f"https://subscene.com{sub.find('a').get('href')}"
|
||||
sdata.append({"title": title, "link": link})
|
||||
SUB_TITLE_DICT[msg.id] = [split_arr(sdata, 10), kueri]
|
||||
try:
|
||||
index = int(CurrentPage - 1)
|
||||
PageLen = len(SUB_TITLE_DICT[msg.id][0])
|
||||
extractbtn = []
|
||||
subResult = f"<b>#Subscene Results For:</b> <code>{kueri}</code>\n\n"
|
||||
for c, i in enumerate(SUB_TITLE_DICT[msg.id][0][index], start=1):
|
||||
sfResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n\n"
|
||||
extractbtn.append(InlineButton(c, f"sublist#{CurrentPage}#{c}#{user}#{msg.id}"))
|
||||
subResult = "".join(i for i in subResult if i not in "[]")
|
||||
return subResult, PageLen, extractbtn
|
||||
except (IndexError, KeyError):
|
||||
await editPesan(msg, "Sorry could not find any matching results!")
|
||||
return None, 0, None
|
||||
|
||||
# Get list all subtitles from title
|
||||
async def getListSub(msg, kueri, CurrentPage, user):
|
||||
if not SUB_DL_DICT.get(msg.id):
|
||||
sdata = []
|
||||
scraper = cloudscraper.create_scraper()
|
||||
param = {"query": kueri}
|
||||
r = scraper.post("https://subscene.com/subtitles/searchbytitle", data=param).text
|
||||
soup = BeautifulSoup(r,"lxml")
|
||||
lists = soup.find("div", {"class": "search-result"})
|
||||
entry = lists.find_all("div", {"class":"title"})
|
||||
for sub in entry:
|
||||
title = sub.find('a').text
|
||||
link = f"https://subscene.com{sub.find('a').get('href')}"
|
||||
sdata.append({"title": title, "link": link})
|
||||
SUB_DL_DICT[msg.id] = [split_arr(sdata, 10), kueri]
|
||||
try:
|
||||
index = int(CurrentPage - 1)
|
||||
PageLen = len(SUB_DL_DICT[msg.id][0])
|
||||
extractbtn = []
|
||||
subResult = f"<b>#Subscene Results For:</b> <code>{kueri}</code>\n\n"
|
||||
for c, i in enumerate(SUB_DL_DICT[msg.id][0][index], start=1):
|
||||
subResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n\n"
|
||||
extractbtn.append(InlineButton(c, f"sublist#{CurrentPage}#{c}#{user}#{msg.id}"))
|
||||
subResult = "".join(i for i in subResult if i not in "[]")
|
||||
return subResult, PageLen, extractbtn
|
||||
except (IndexError, KeyError):
|
||||
await editPesan(msg, "Sorry could not find any matching results!")
|
||||
return None, 0, None
|
||||
|
||||
# Subscene CMD
|
||||
@app.on_message(filters.command(["subscene"], COMMAND_HANDLER))
|
||||
@ratelimiter
|
||||
async def subsceneCMD(client, message):
|
||||
kueri = " ".join(message.command[1:])
|
||||
if not kueri:
|
||||
return await kirimPesan(message, f"ℹ️ Please add query after CMD!\nEx: <code>/{message.command[0]} Jurassic World</code>")
|
||||
pesan = await kirimPesan(message, "⏳ Please wait, getting data from subscene..", quote=True)
|
||||
CurrentPage = 1
|
||||
subres, PageLen, btn = await getTitleSub(pesan, kueri, CurrentPage, message.from_user.id)
|
||||
if not subres:
|
||||
return
|
||||
keyboard = InlineKeyboard()
|
||||
keyboard.paginate(PageLen, CurrentPage, "subscenepage#{number}" + f"#{pesan.id}#{message.from_user.id}")
|
||||
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
|
||||
keyboard.row(*btn)
|
||||
keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
|
||||
await editPesan(pesan, subres, disable_web_page_preview=True, reply_markup=keyboard)
|
||||
|
||||
# Callback list title
|
||||
@app.on_callback_query(filters.create(lambda _, __, query: "subscenepage#" in query.data))
|
||||
@ratelimiter
|
||||
async def savefilmpage_callback(client, callback_query):
|
||||
if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
|
||||
return await callback_query.answer("Not yours..", True)
|
||||
message_id = int(callback_query.data.split("#")[2])
|
||||
CurrentPage = int(callback_query.data.split("#")[1])
|
||||
try:
|
||||
kueri = SUB_TITLE_DICT[message_id][1]
|
||||
except KeyError:
|
||||
await callback_query.answer("Invalid callback data, please send CMD again..")
|
||||
await asyncio.sleep(3)
|
||||
return await callback_query.delete()
|
||||
|
||||
try:
|
||||
subres, PageLen, btn = await getTitleSub(callback_query.message, kueri, CurrentPage, callback_query.from_user.id)
|
||||
except TypeError:
|
||||
return
|
||||
|
||||
keyboard = InlineKeyboard()
|
||||
keyboard.paginate(PageLen, CurrentPage, "subscenepage#{number}" + f"#{message_id}#{callback_query.from_user.id}")
|
||||
keyboard.row(InlineButton("👇 Get Subtitle List", "Hmmm"))
|
||||
keyboard.row(*btn)
|
||||
keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
|
||||
await editPesan(callback_query.message, subres, disable_web_page_preview=True, reply_markup=keyboard)
|
||||
|
|
|
|||
Loading…
Reference in a new issue