mirror of
https://github.com/yasirarism/MissKatyPyro.git
synced 2026-01-09 05:04: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)
|
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.
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue