Add subdl beta

This commit is contained in:
yasir 2023-03-03 22:33:14 +07:00
parent 53b6fae2d6
commit 234c41c384
2 changed files with 115 additions and 51 deletions

View file

@ -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.

View file

@ -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)