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) 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): async def server_stats(c, m):
""" """
Give system stats of the server. Give system stats of the server.

View file

@ -1,61 +1,125 @@
from misskaty.core.message_utils import * import logging
from misskaty.vars import COMMAND_HANDLER
from pyrogram import filters import cloudscraper
import cloudscraper, logging
from misskaty import app
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from pykeyboard import InlineButton, InlineKeyboard 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.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__) LOGGER = logging.getLogger(__name__)
SUB_TITLE_DICT = {}
SUB_DL_DICT = {}
@app.on_message(filters.command(["subscene"], COMMAND_HANDLER)) # Get list title based on query
@ratelimiter async def getTitleSub(msg, kueri, CurrentPage, user):
async def imdb_search_id(client, message): if not SUB_TITLE_DICT.get(msg.id):
BTN = [] sdata = []
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() scraper = cloudscraper.create_scraper()
try:
param = {"query": kueri} param = {"query": kueri}
r = scraper.post("https://subscene.com/subtitles/searchbytitle", data=param).text r = scraper.post("https://subscene.com/subtitles/searchbytitle", data=param).text
soup = BeautifulSoup(r,"lxml") soup = BeautifulSoup(r,"lxml")
lists = soup.find("div", {"class": "search-result"}) lists = soup.find("div", {"class": "search-result"})
a = lists.find_all("div", {"class":"title"}) entry = lists.find_all("div", {"class":"title"})
LOGGER.info(a) # if "Tidak Ditemukan" in entry[0].text:
# if not res: # await editPesan(msg, f"Sorry, could not find any result for: {kueri}")
# return await k.edit_caption(f"⛔️ No Result Found For: <code>{kueri}</code>") # return None, 0, None
msg += f"🎬 Found ({len(a)}) result for : <code>{kueri}</code>\n\n" for sub in entry:
for num, sub in enumerate(a, start=1):
title = sub.find('a').text title = sub.find('a').text
url = f"https://subscene.com{sub.find('a').get('href')}" link = f"https://subscene.com{sub.find('a').get('href')}"
msg += f"{num}. <a href='{url}'>{title}</a>\n" sdata.append({"title": title, "link": link})
BTN.append( SUB_TITLE_DICT[msg.id] = [split_arr(sdata, 10), kueri]
InlineButton( try:
text=num, index = int(CurrentPage - 1)
callback_data=f"subscene#{message.from_user.id}#hehehe", PageLen = len(SUB_TITLE_DICT[msg.id][0])
) extractbtn = []
) subResult = f"<b>#Subscene Results For:</b> <code>{kueri}</code>\n\n"
BTN.extend( 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"
InlineButton( extractbtn.append(InlineButton(c, f"sublist#{CurrentPage}#{c}#{user}#{msg.id}"))
text="❌ Close", subResult = "".join(i for i in subResult if i not in "[]")
callback_data=f"close#{message.from_user.id}", return subResult, PageLen, extractbtn
), except (IndexError, KeyError):
) await editPesan(msg, "Sorry could not find any matching results!")
) return None, 0, None
buttons.add(*BTN)
await editPesan(k, msg, reply_markup=buttons) # Get list all subtitles from title
except Exception as err: async def getListSub(msg, kueri, CurrentPage, user):
await editPesan(k, f"Ooppss, failed get subtitle list from subscene.\n\n<b>ERROR:</b> <code>{err}</code>") 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)