Sourcery refactored master branch (#18)

* 'Refactored by Sourcery'

* reformating: code

---------

Co-authored-by: Sourcery AI <>
Co-authored-by: yasirarism <yasiramunandar@gmail.com>
This commit is contained in:
sourcery-ai[bot] 2023-02-13 22:44:16 +07:00 committed by GitHub
parent b6548f3cd3
commit 376755e7b3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
30 changed files with 497 additions and 604 deletions

View file

@ -2,25 +2,31 @@ from database import dbname
matadb = dbname.sangmata matadb = dbname.sangmata
# Get Data User # Get Data User
async def cek_userdata(user_id: int) -> bool: async def cek_userdata(user_id: int) -> bool:
user = await matadb.find_one({"user_id": user_id}) user = await matadb.find_one({"user_id": user_id})
return bool(user) return bool(user)
async def get_userdata(user_id: int) -> bool: async def get_userdata(user_id: int) -> bool:
user = await matadb.find_one({"user_id": user_id}) user = await matadb.find_one({"user_id": user_id})
return user["username"], user["first_name"], user["last_name"] return user["username"], user["first_name"], user["last_name"]
async def add_userdata(user_id: int, username, first_name, last_name): async def add_userdata(user_id: int, username, first_name, last_name):
await matadb.update_one({"user_id": user_id}, {"$set": {"username": username, "first_name": first_name, "last_name": last_name}}, upsert=True) await matadb.update_one({"user_id": user_id}, {"$set": {"username": username, "first_name": first_name, "last_name": last_name}}, upsert=True)
# Enable Mata MissKaty in Selected Chat # Enable Mata MissKaty in Selected Chat
async def is_sangmata_on(chat_id: int) -> bool: async def is_sangmata_on(chat_id: int) -> bool:
chat = await matadb.find_one({"chat_id_toggle": chat_id}) chat = await matadb.find_one({"chat_id_toggle": chat_id})
return bool(chat) return bool(chat)
async def sangmata_on(chat_id: int) -> bool: async def sangmata_on(chat_id: int) -> bool:
await matadb.insert_one({"chat_id_toggle": chat_id}) await matadb.insert_one({"chat_id_toggle": chat_id})
async def sangmata_off(chat_id: int): async def sangmata_off(chat_id: int):
await matadb.delete_one({"chat_id_toggle": chat_id}) await matadb.delete_one({"chat_id_toggle": chat_id})

View file

@ -1,12 +1,15 @@
from pyrogram import filters from pyrogram import filters
from misskaty.core.message_utils import * from misskaty.core.message_utils import *
import asyncio, time import asyncio
data = {} data = {}
async def task(msg, warn=False, sec=None): async def task(msg, warn=False, sec=None):
try:await msg.delete() try:
except:pass await msg.delete()
except:
pass
if warn: if warn:
user = msg.from_user user = msg.from_user
ids = await kirimPesan(msg, f"Sorry {user.mention} [<code>{user.id}</code>], you must wait for {sec}s before using command again..") ids = await kirimPesan(msg, f"Sorry {user.mention} [<code>{user.id}</code>], you must wait for {sec}s before using command again..")
@ -15,22 +18,24 @@ async def task(msg, warn = False, sec = None):
await asyncio.sleep(2) await asyncio.sleep(2)
await hapusPesan(ids) await hapusPesan(ids)
def wait(sec): def wait(sec):
async def ___(flt, cli, msg): async def ___(flt, cli, msg):
user_id = msg.from_user.id user_id = msg.from_user.id
if user_id in data: if user_id in data:
if msg.date.timestamp() >= data[user_id]['timestamp'] + flt.data: if msg.date.timestamp() >= data[user_id]["timestamp"] + flt.data:
data[user_id] = {'timestamp' : msg.date.timestamp(), 'warned' : False} data[user_id] = {"timestamp": msg.date.timestamp(), "warned": False}
return True return True
else: else:
if not data[user_id]['warned']: if not data[user_id]["warned"]:
data[user_id]['warned'] = True data[user_id]["warned"] = True
asyncio.ensure_future(task(msg, True, flt.data)) # for super accuracy use (future - time.time()) asyncio.ensure_future(task(msg, True, flt.data)) # for super accuracy use (future - time.time())
return False # cause we dont need delete again return False # cause we dont need delete again
asyncio.ensure_future(task(msg)) asyncio.ensure_future(task(msg))
return False return False
else: else:
data.update({user_id : {'timestamp' : msg.date.timestamp(), 'warned' : False}}) data.update({user_id: {"timestamp": msg.date.timestamp(), "warned": False}})
return True return True
return filters.create(___, data=sec) return filters.create(___, data=sec)

View file

@ -23,6 +23,7 @@ async def kirimPesan(msg, text, **kwargs):
LOGGER.error(str(e)) LOGGER.error(str(e))
return return
# Edit MSG Pyro # Edit MSG Pyro
async def editPesan(msg, text, **kwargs): async def editPesan(msg, text, **kwargs):
try: try:

View file

@ -1,6 +1,4 @@
import re import re
import subprocess
import sys
import chevron import chevron
import telegraph import telegraph
@ -12,9 +10,9 @@ from bs4 import BeautifulSoup as bs4
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
telegraph = telegraph.Telegraph() telegraph = telegraph.Telegraph()
if telegraph.get_access_token() == None: if telegraph.get_access_token() is None:
token_ph = telegraph.create_account(short_name=BOT_USERNAME) token_ph = telegraph.create_account(short_name=BOT_USERNAME)
LOGGER.info(f"kuso_utils: Create TGH Account ..") LOGGER.info("kuso_utils: Create TGH Account ..")
headers = {"Accept": "*/*", "User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"} headers = {"Accept": "*/*", "User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"}
@ -34,15 +32,14 @@ async def kusonimeBypass(url: str, slug=None):
data = [] data = []
# title = soup.select("#venkonten > div.vezone > div.venser > div.venutama > div.lexot > p:nth-child(3) > strong")[0].text.strip() # title = soup.select("#venkonten > div.vezone > div.venser > div.venutama > div.lexot > p:nth-child(3) > strong")[0].text.strip()
title = soup.find("h1", {"class": "jdlz"}).text # fix title njing haha title = soup.find("h1", {"class": "jdlz"}).text # fix title njing haha
num = 1
genre = [] genre = []
for _genre in soup.select("#venkonten > div.vezone > div.venser > div.venutama > div.lexot > div.info > p:nth-child(2)"): for _genre in soup.select("#venkonten > div.vezone > div.venser > div.venutama > div.lexot > div.info > p:nth-child(2)"):
gen = _genre.text.split(":").pop().strip().split(", ") gen = _genre.text.split(":").pop().strip().split(", ")
genre = gen genre = gen
status_anime = soup.select("#venkonten > div.vezone > div.venser > div.venutama > div.lexot > div.info > p:nth-child(6)")[0].text.split(":").pop().strip() status_anime = soup.select("#venkonten > div.vezone > div.venser > div.venutama > div.lexot > div.info > p:nth-child(6)")[0].text.split(":").pop().strip()
for smokedl in soup.find("div", {"class": "dlbod"}).find_all("div", {"class": "smokeddl"}): for num, smokedl in enumerate(soup.find("div", {"class": "dlbod"}).find_all("div", {"class": "smokeddl"}), start=1):
titl = soup.select(f"#venkonten > div.vezone > div.venser > div.venutama > div.lexot > div.dlbod > div:nth-child({num}) > div.smokettl")[0].text titl = soup.select(f"#venkonten > div.vezone > div.venser > div.venutama > div.lexot > div.dlbod > div:nth-child({num}) > div.smokettl")[0].text
titl = re.sub(f"Download", "", titl).strip() titl = re.sub("Download", "", titl).strip()
mendata = {"name": titl, "links": []} mendata = {"name": titl, "links": []}
for smokeurl in smokedl.find_all("div", {"class": "smokeurl"}): for smokeurl in smokedl.find_all("div", {"class": "smokeurl"}):
quality = smokeurl.find("strong").text quality = smokeurl.find("strong").text
@ -53,10 +50,17 @@ async def kusonimeBypass(url: str, slug=None):
links.append({"client": client, "url": url}) links.append({"client": client, "url": url})
mendata["links"].append(dict(quality=quality, link_download=links)) mendata["links"].append(dict(quality=quality, link_download=links))
data.append(mendata) data.append(mendata)
num += 1 hasil |= {
hasil.update({"error": False, "title": title, "thumb": thumb, "genre": genre, "genre_string": ", ".join(genre), "status_anim": status_anime, "data": data}) "error": False,
"title": title,
"thumb": thumb,
"genre": genre,
"genre_string": ", ".join(genre),
"status_anim": status_anime,
"data": data,
}
except: except:
hasil.update({"error": True, "error_message": "kuso bypass error"}) hasil |= {"error": True, "error_message": "kuso bypass error"}
finally: finally:
await request.close() await request.close()
return hasil return hasil
@ -65,6 +69,7 @@ async def kusonimeBypass(url: str, slug=None):
async def byPassPh(url: str, msg_id: int): async def byPassPh(url: str, msg_id: int):
kusonime = await kusonimeBypass(url) kusonime = await kusonimeBypass(url)
results = {"error": True, "error_message": "Post to or create TGH error"} results = {"error": True, "error_message": "Post to or create TGH error"}
if not kusonime["error"]:
template = """ template = """
<img src={{{thumb}}}> <img src={{{thumb}}}>
<p><b>Title</b> : <code>{{title}}</code></p> <p><b>Title</b> : <code>{{title}}</code></p>
@ -82,10 +87,9 @@ async def byPassPh(url: str, msg_id: int):
<br> <br>
{{/data}} {{/data}}
""".strip() """.strip()
if not kusonime["error"]:
html = chevron.render(template, kusonime) html = chevron.render(template, kusonime)
page = telegraph.create_page(f"{kusonime.get('title')}-{msg_id}", html_content=html) page = telegraph.create_page(f"{kusonime.get('title')}-{msg_id}", html_content=html)
results.update({"error": False, "url": "https://telegra.ph/{}".format(page["path"])}) results |= {"error": False, "url": f'https://telegra.ph/{page["path"]}'}
del results["error_message"] del results["error_message"]
return results return results

View file

@ -10,21 +10,16 @@ from utils import LOGGER
async def post_to_telegraph(is_media: bool, title=None, content=None, media=None): async def post_to_telegraph(is_media: bool, title=None, content=None, media=None):
telegraph = Telegraph() telegraph = Telegraph()
if telegraph.get_access_token() == None: if telegraph.get_access_token() is None:
await telegraph.create_account(short_name=BOT_USERNAME) await telegraph.create_account(short_name=BOT_USERNAME)
LOGGER.info(f"Create TGH Account ..") LOGGER.info("Create TGH Account ..")
if is_media: if is_media:
"""Create a Telegram Post Foto/Video""" """Create a Telegram Post Foto/Video"""
response = await telegraph.upload_file(media) response = await telegraph.upload_file(media)
return f"https://telegra.ph{response[0]['src']}" return f"https://telegra.ph{response[0]['src']}"
"""Create a Telegram Post using HTML Content""" """Create a Telegram Post using HTML Content"""
response = await telegraph.create_page( response = await telegraph.create_page(title, html_content=content, author_url=f"https://t.me/{BOT_USERNAME}", author_name=BOT_USERNAME)
title, return response["url"]
html_content=content,
author_url=f"https://t.me/{BOT_USERNAME}",
author_name=BOT_USERNAME
)
return response['url']
async def run_subprocess(cmd): async def run_subprocess(cmd):

View file

@ -8,63 +8,59 @@ import uuid
from pathlib import Path from pathlib import Path
from pyrogram import enums from pyrogram import enums
from pyrogram.types import (InlineKeyboardButton, InlineKeyboardMarkup, from pyrogram.types import InlineKeyboardButton, InputMediaPhoto
InputMediaPhoto)
from misskaty.core.message_utils import * from misskaty.core.message_utils import *
async def run_subprocess(cmd): async def run_subprocess(cmd):
process = await asyncio.create_subprocess_shell( process = await asyncio.create_subprocess_shell(cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
return await process.communicate() return await process.communicate()
def get_random_start_at(seconds, dur=0): def get_random_start_at(seconds, dur=0):
return random.randint(0, seconds - dur) return random.randint(0, seconds - dur)
async def get_duration(input_file_link): async def get_duration(input_file_link):
ffmpeg_dur_cmd = f"ffprobe -v error -show_entries format=duration -of csv=p=0:s=x -select_streams v:0 {shlex.quote(input_file_link)}" ffmpeg_dur_cmd = f"ffprobe -v error -show_entries format=duration -of csv=p=0:s=x -select_streams v:0 {shlex.quote(input_file_link)}"
# print(ffmpeg_dur_cmd) # print(ffmpeg_dur_cmd)
out, err = await run_subprocess(ffmpeg_dur_cmd) out, err = await run_subprocess(ffmpeg_dur_cmd)
out = out.decode().strip() if out := out.decode().strip():
if not out: return duration if (duration := round(float(out))) else "No duration!"
else:
return err.decode() return err.decode()
duration = round(float(out))
if duration:
return duration
return 'No duration!'
def is_url(text): def is_url(text):
return text.startswith('http') return text.startswith("http")
async def get_dimentions(input_file_link): async def get_dimentions(input_file_link):
ffprobe_cmd = f"ffprobe -v error -show_entries stream=width,height -of csv=p=0:s=x -select_streams v:0 {shlex.quote(input_file_link)}" ffprobe_cmd = f"ffprobe -v error -show_entries stream=width,height -of csv=p=0:s=x -select_streams v:0 {shlex.quote(input_file_link)}"
output = await run_subprocess(ffprobe_cmd) output = await run_subprocess(ffprobe_cmd)
try: try:
width, height = [int(i.strip()) for i in output[0].decode().split('x')] width, height = [int(i.strip()) for i in output[0].decode().split("x")]
except Exception as e: except Exception as e:
print(e) print(e)
width, height = 1280, 534 width, height = 1280, 534
return width, height return width, height
async def screenshot_flink(c, m):
chat_id = m.from_user.id async def screenshot_flink(c, m):
m.from_user.id
# if c.CURRENT_PROCESSES.get(chat_id, 0) == 1: # if c.CURRENT_PROCESSES.get(chat_id, 0) == 1:
# return await m.answer('You have reached the maximum parallel processes! Try again after one of them finishes.', show_alert=True) # return await m.answer('You have reached the maximum parallel processes! Try again after one of them finishes.', show_alert=True)
# if not c.CURRENT_PROCESSES.get(chat_id): # if not c.CURRENT_PROCESSES.get(chat_id):
# c.CURRENT_PROCESSES[chat_id] = 0 # c.CURRENT_PROCESSES[chat_id] = 0
# c.CURRENT_PROCESSES[chat_id] += 1 # c.CURRENT_PROCESSES[chat_id] += 1
_, num_screenshots = m.data.split('+') _, num_screenshots = m.data.split("+")
num_screenshots = int(num_screenshots) num_screenshots = int(num_screenshots)
media_msg = m.message.reply_to_message media_msg = m.message.reply_to_message
# print(media_msg) # print(media_msg)
if media_msg.empty: if media_msg.empty:
await editPesan(m.message, 'Why did you delete the file 😠, Now i cannot help you 😒.') await editPesan(m.message, "Why did you delete the file 😠, Now i cannot help you 😒.")
# c.CURRENT_PROCESSES[chat_id] -= 1 # c.CURRENT_PROCESSES[chat_id] -= 1
return return
@ -76,9 +72,9 @@ async def screenshot_flink(c, m):
try: try:
start_time = time.time() start_time = time.time()
await editPesan(m.message, 'Give me some time bruh!! 😴') await editPesan(m.message, "Give me some time bruh!! 😴")
await editPesan(m.message, '😀 Taking Snaps!') await editPesan(m.message, "😀 Taking Snaps!")
file_link = m.message.reply_to_message.command[1] file_link = m.message.reply_to_message.command[1]
duration = await get_duration(file_link) duration = await get_duration(file_link)
if isinstance(duration, str): if isinstance(duration, str):
@ -89,55 +85,46 @@ async def screenshot_flink(c, m):
reduced_sec = duration - int(duration * 2 / 100) reduced_sec = duration - int(duration * 2 / 100)
print(f"Total seconds: {duration}, Reduced seconds: {reduced_sec}") print(f"Total seconds: {duration}, Reduced seconds: {reduced_sec}")
screenshots = [] screenshots = []
ffmpeg_errors = '' ffmpeg_errors = ""
screenshot_secs = [get_random_start_at(reduced_sec) for i in range(1, 1+num_screenshots)] screenshot_secs = [get_random_start_at(reduced_sec) for _ in range(1, 1 + num_screenshots)]
width, height = await get_dimentions(file_link) width, height = await get_dimentions(file_link)
for i, sec in enumerate(screenshot_secs): for i, sec in enumerate(screenshot_secs):
thumbnail_template = output_folder.joinpath(f'{i+1}.png') thumbnail_template = output_folder.joinpath(f"{i+1}.png")
# print(sec) # print(sec)
ffmpeg_cmd = f"mediaextract -hide_banner -ss {sec} -i {shlex.quote(file_link)} -vframes 1 '{thumbnail_template}'" ffmpeg_cmd = f"mediaextract -hide_banner -ss {sec} -i {shlex.quote(file_link)} -vframes 1 '{thumbnail_template}'"
output = await run_subprocess(ffmpeg_cmd) output = await run_subprocess(ffmpeg_cmd)
await editPesan(m.message, f'😀 `{i+1}` of `{num_screenshots}` generated!') await editPesan(m.message, f"😀 `{i+1}` of `{num_screenshots}` generated!")
if thumbnail_template.exists(): if thumbnail_template.exists():
screenshots.append( screenshots.append(InputMediaPhoto(str(thumbnail_template), caption=f"ScreenShot at {datetime.timedelta(seconds=sec)}"))
InputMediaPhoto(
str(thumbnail_template),
caption=f"ScreenShot at {datetime.timedelta(seconds=sec)}"
)
)
continue continue
ffmpeg_errors += output[1].decode() + '\n\n' ffmpeg_errors += output[1].decode() + "\n\n"
# print(screenshots) # print(screenshots)
if not screenshots: if not screenshots:
await editPesan(m.message, '😟 Sorry! Screenshot generation failed possibly due to some infrastructure failure 😥.') await editPesan(m.message, "😟 Sorry! Screenshot generation failed possibly due to some infrastructure failure 😥.")
# c.CURRENT_PROCESSES[chat_id] -= 1 # c.CURRENT_PROCESSES[chat_id] -= 1
return return
await editPesan(m.message, f'🤓 Its done , Now starting to upload!') await editPesan(m.message, "🤓 Its done , Now starting to upload!")
await media_msg.reply_chat_action(enums.ChatAction.UPLOAD_PHOTO) await media_msg.reply_chat_action(enums.ChatAction.UPLOAD_PHOTO)
await media_msg.reply_media_group(screenshots, True) await media_msg.reply_media_group(screenshots, True)
await editPesan(m.message, f'Completed in {datetime.timedelta(seconds=int(time.time()-start_time))}\n\nJoin @YasirPediaChannel\n\n©️ https://yasirpedia.eu.org') await editPesan(m.message, f"Completed in {datetime.timedelta(seconds=int(time.time()-start_time))}\n\nJoin @YasirPediaChannel\n\n©️ https://yasirpedia.eu.org")
# c.CURRENT_PROCESSES[chat_id] -= 1 # c.CURRENT_PROCESSES[chat_id] -= 1
except: except:
aa = traceback.print_exc() traceback.print_exc()
await editPesan(m.message, '😟 Sorry! Screenshot generation failed, ERR: {aa} 😥.') await editPesan(m.message, "😟 Sorry! Screenshot generation failed, ERR: {aa} 😥.")
# c.CURRENT_PROCESSES[chat_id] -= 1 # c.CURRENT_PROCESSES[chat_id] -= 1
def gen_ik_buttons(): def gen_ik_buttons():
btns = [] btns = []
i_keyboard = [] i_keyboard = []
for i in range(2, 11): for i in range(2, 11):
i_keyboard.append( i_keyboard.append(InlineKeyboardButton(f"{i}", f"scht+{i}"))
InlineKeyboardButton(
f"{i}",
f"scht+{i}"
)
)
if (i > 2) and (i % 2) == 1: if (i > 2) and (i % 2) == 1:
btns.append(i_keyboard) btns.append(i_keyboard)
i_keyboard = [] i_keyboard = []

View file

@ -87,8 +87,8 @@ async def rentry(teks):
.get("url") .get("url")
) )
def get_provider(url):
def get_provider(url):
def pretty(names): def pretty(names):
name = names[1] name = names[1]
if names[0] == "play": if names[0] == "play":
@ -102,7 +102,8 @@ def get_provider(url):
return name.title() return name.title()
netloc = urlparse(url).netloc netloc = urlparse(url).netloc
return pretty(netloc.split('.')) return pretty(netloc.split("."))
async def search_jw(movie_name: str, locale: str): async def search_jw(movie_name: str, locale: str):
m_t_ = "" m_t_ = ""

View file

@ -75,7 +75,8 @@ async def admin_cache_func(_, cmu):
@app.on_message(filters.command("purge", COMMAND_HANDLER) & filters.group) @app.on_message(filters.command("purge", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_delete_messages") @adminsOnly("can_delete_messages")
async def purge(_, message): async def purge(_, message):
if not message.from_user: return if not message.from_user:
return
try: try:
repliedmsg = message.reply_to_message repliedmsg = message.reply_to_message
await message.delete() await message.delete()
@ -86,8 +87,7 @@ async def purge(_, message):
cmd = message.command cmd = message.command
if len(cmd) > 1 and cmd[1].isdigit(): if len(cmd) > 1 and cmd[1].isdigit():
purge_to = repliedmsg.id + int(cmd[1]) purge_to = repliedmsg.id + int(cmd[1])
if purge_to > message.id: purge_to = min(purge_to, message.id)
purge_to = message.id
else: else:
purge_to = message.id purge_to = message.id
@ -129,7 +129,8 @@ async def purge(_, message):
@app.on_message(filters.command(["kick", "dkick"], COMMAND_HANDLER) & filters.group) @app.on_message(filters.command(["kick", "dkick"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def kickFunc(client, message): async def kickFunc(client, message):
if not message.from_user: return if not message.from_user:
return
user_id, reason = await extract_user_and_reason(message) user_id, reason = await extract_user_and_reason(message)
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")
@ -159,7 +160,8 @@ async def kickFunc(client, message):
@app.on_message(filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & filters.group) @app.on_message(filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def banFunc(client, message): async def banFunc(client, message):
if not message.from_user: return if not message.from_user:
return
user_id, reason = await extract_user_and_reason(message, sender_chat=True) user_id, reason = await extract_user_and_reason(message, sender_chat=True)
if not user_id: if not user_id:
@ -210,7 +212,8 @@ async def banFunc(client, message):
@app.on_message(filters.command("unban", COMMAND_HANDLER) & filters.group) @app.on_message(filters.command("unban", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def unban_func(_, message): async def unban_func(_, message):
if not message.from_user: return if not message.from_user:
return
# we don't need reasons for unban, also, we # we don't need reasons for unban, also, we
# don't need to get "text_mention" entity, because # don't need to get "text_mention" entity, because
# normal users won't get text_mention if the user # normal users won't get text_mention if the user
@ -234,7 +237,8 @@ async def unban_func(_, message):
# Ban users listed in a message # Ban users listed in a message
@app.on_message(filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & filters.group) @app.on_message(filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & filters.group)
async def list_ban_(c, message): async def list_ban_(c, message):
if not message.from_user: return if not message.from_user:
return
userid, msglink_reason = await extract_user_and_reason(message) userid, msglink_reason = await extract_user_and_reason(message)
if not userid or not msglink_reason: if not userid or not msglink_reason:
return await message.reply_text("Provide a userid/username along with message link and reason to list-ban") return await message.reply_text("Provide a userid/username along with message link and reason to list-ban")
@ -284,7 +288,8 @@ async def list_ban_(c, message):
# Unban users listed in a message # Unban users listed in a message
@app.on_message(filters.user(SUDO) & filters.command("listunban", COMMAND_HANDLER) & filters.group) @app.on_message(filters.user(SUDO) & filters.command("listunban", COMMAND_HANDLER) & filters.group)
async def list_unban_(c, message): async def list_unban_(c, message):
if not message.from_user: return if not message.from_user:
return
userid, msglink = await extract_user_and_reason(message) userid, msglink = await extract_user_and_reason(message)
if not userid or not msglink: if not userid or not msglink:
return await message.reply_text("Provide a userid/username along with message link to list-unban") return await message.reply_text("Provide a userid/username along with message link to list-unban")
@ -327,7 +332,8 @@ async def list_unban_(c, message):
@app.on_message(filters.command("del", COMMAND_HANDLER) & filters.group) @app.on_message(filters.command("del", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_delete_messages") @adminsOnly("can_delete_messages")
async def deleteFunc(_, message): async def deleteFunc(_, message):
if not message.from_user: return if not message.from_user:
return
if not message.reply_to_message: if not message.reply_to_message:
return await message.reply_text("Reply To A Message To Delete It") return await message.reply_text("Reply To A Message To Delete It")
try: try:
@ -341,7 +347,8 @@ async def deleteFunc(_, message):
@app.on_message(filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & filters.group) @app.on_message(filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_promote_members") @adminsOnly("can_promote_members")
async def promoteFunc(client, message): async def promoteFunc(client, message):
if not message.from_user: return if not message.from_user:
return
try: try:
user_id = await extract_user(message) user_id = await extract_user(message)
umention = (await app.get_users(user_id)).mention umention = (await app.get_users(user_id)).mention
@ -386,7 +393,8 @@ async def promoteFunc(client, message):
@app.on_message(filters.command("demote", COMMAND_HANDLER) & filters.group) @app.on_message(filters.command("demote", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_promote_members") @adminsOnly("can_promote_members")
async def demote(client, message): async def demote(client, message):
if not message.from_user: return if not message.from_user:
return
user_id = await extract_user(message) user_id = await extract_user(message)
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")
@ -413,7 +421,8 @@ async def demote(client, message):
@app.on_message(filters.command(["pin", "unpin"], COMMAND_HANDLER) & filters.group) @app.on_message(filters.command(["pin", "unpin"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_pin_messages") @adminsOnly("can_pin_messages")
async def pin(_, message): async def pin(_, message):
if not message.from_user: return if not message.from_user:
return
if not message.reply_to_message: if not message.reply_to_message:
return await message.reply_text("Reply to a message to pin/unpin it.") return await message.reply_text("Reply to a message to pin/unpin it.")
r = message.reply_to_message r = message.reply_to_message
@ -440,7 +449,8 @@ async def pin(_, message):
@app.on_message(filters.command(["mute", "tmute"], COMMAND_HANDLER) & filters.group) @app.on_message(filters.command(["mute", "tmute"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def mute(client, message): async def mute(client, message):
if not message.from_user: return if not message.from_user:
return
try: try:
user_id, reason = await extract_user_and_reason(message) user_id, reason = await extract_user_and_reason(message)
except Exception as err: except Exception as err:
@ -487,7 +497,8 @@ async def mute(client, message):
@app.on_message(filters.command("unmute", COMMAND_HANDLER) & filters.group) @app.on_message(filters.command("unmute", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def unmute(_, message): async def unmute(_, message):
if not message.from_user: return if not message.from_user:
return
user_id = await extract_user(message) user_id = await extract_user(message)
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")
@ -499,7 +510,8 @@ async def unmute(_, message):
@app.on_message(filters.command(["warn", "dwarn"], COMMAND_HANDLER) & filters.group) @app.on_message(filters.command(["warn", "dwarn"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def warn_user(client, message): async def warn_user(client, message):
if not message.from_user: return if not message.from_user:
return
user_id, reason = await extract_user_and_reason(message) user_id, reason = await extract_user_and_reason(message)
chat_id = message.chat.id chat_id = message.chat.id
if not user_id: if not user_id:
@ -602,7 +614,8 @@ async def unban_user(_, cq):
@app.on_message(filters.command("rmwarn", COMMAND_HANDLER) & filters.group) @app.on_message(filters.command("rmwarn", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def remove_warnings(_, message): async def remove_warnings(_, message):
if not message.from_user: return if not message.from_user:
return
if not message.reply_to_message: if not message.reply_to_message:
return await message.reply_text("Reply to a message to remove a user's warnings.") return await message.reply_text("Reply to a message to remove a user's warnings.")
user_id = message.reply_to_message.from_user.id user_id = message.reply_to_message.from_user.id
@ -622,7 +635,8 @@ async def remove_warnings(_, message):
@app.on_message(filters.command("warns", COMMAND_HANDLER) & filters.group) @app.on_message(filters.command("warns", COMMAND_HANDLER) & filters.group)
@capture_err @capture_err
async def check_warns(_, message): async def check_warns(_, message):
if not message.from_user: return if not message.from_user:
return
user_id = await extract_user(message) user_id = await extract_user(message)
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")

View file

@ -13,8 +13,7 @@ import time
from pyrogram import filters from pyrogram import filters
from database.afk_db import (add_afk, cleanmode_off, cleanmode_on, is_afk, from database.afk_db import add_afk, cleanmode_off, cleanmode_on, is_afk, remove_afk
remove_afk)
from misskaty import app from misskaty import app
from misskaty.core.decorator.errors import capture_err from misskaty.core.decorator.errors import capture_err
from misskaty.core.decorator.permissions import adminsOnly from misskaty.core.decorator.permissions import adminsOnly
@ -185,7 +184,8 @@ async def active_afk(_, message):
@app.on_message(filters.command("afkdel", COMMAND_HANDLER) & filters.group) @app.on_message(filters.command("afkdel", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_change_info") @adminsOnly("can_change_info")
async def afk_state(_, message): async def afk_state(_, message):
if not message.from_user: return if not message.from_user:
return
usage = "**Usage:**\n/afkdel [ENABLE|DISABLE] to enable or disable auto delete message." usage = "**Usage:**\n/afkdel [ENABLE|DISABLE] to enable or disable auto delete message."
if len(message.command) == 1: if len(message.command) == 1:
return await kirimPesan(message, usage) return await kirimPesan(message, usage)

View file

@ -51,7 +51,6 @@ async def pling_bypass(url):
def wetransfer_bypass(url: str) -> str: def wetransfer_bypass(url: str) -> str:
if url.startswith("https://we.tl/"): if url.startswith("https://we.tl/"):
r = requests.head(url, allow_redirects=True) r = requests.head(url, allow_redirects=True)
url = r.url url = r.url
@ -115,8 +114,6 @@ async def bypass(_, message):
reply_markup=markup, reply_markup=markup,
disable_web_page_preview=True, disable_web_page_preview=True,
) )
elif "we.tl" or "wetransfer.com" in url: else:
data = wetransfer_bypass(url) data = wetransfer_bypass(url)
await editPesan(msg, f"{data}\n\n{mention}") await editPesan(msg, f"{data}\n\n{mention}")
else:
await editPesan(msg, "Unsupported URL..")

View file

@ -16,7 +16,6 @@ from pyrogram import enums, filters
from database.afk_db import is_afk, remove_afk from database.afk_db import is_afk, remove_afk
from misskaty import BOT_USERNAME, app from misskaty import BOT_USERNAME, app
from misskaty.core.message_utils import *
from misskaty.helper.human_read import get_readable_time2 from misskaty.helper.human_read import get_readable_time2
from utils import put_cleanmode from utils import put_cleanmode

View file

@ -23,6 +23,7 @@ __HELP__ = """
/json - Send structure message Telegram in JSON using Pyrogram Style. /json - Send structure message Telegram in JSON using Pyrogram Style.
""" """
async def edit_or_reply(msg, **kwargs): async def edit_or_reply(msg, **kwargs):
func = msg.edit_text if msg.from_user.is_self else msg.reply func = msg.edit_text if msg.from_user.is_self else msg.reply
spec = getfullargspec(func.__wrapped__).args spec = getfullargspec(func.__wrapped__).args
@ -167,6 +168,7 @@ async def evaluation_cmd_t(_, m):
if not m.from_user.is_self: if not m.from_user.is_self:
await status_message.delete() await status_message.delete()
# Update and restart bot # Update and restart bot
@app.on_message(filters.command(["update"], COMMAND_HANDLER) & filters.user(SUDO)) @app.on_message(filters.command(["update"], COMMAND_HANDLER) & filters.user(SUDO))
async def update_restart(_, message): async def update_restart(_, message):
@ -177,11 +179,10 @@ async def update_restart(_, message):
await message.reply_text(f"<code>{out}</code>") await message.reply_text(f"<code>{out}</code>")
except Exception as e: except Exception as e:
return await message.reply_text(str(e)) return await message.reply_text(str(e))
await message.reply_text( await message.reply_text("<b>Updated with default branch, restarting now.</b>")
"<b>Updated with default branch, restarting now.</b>"
)
os.execvp(sys.executable, [sys.executable, "-m", "misskaty"]) os.execvp(sys.executable, [sys.executable, "-m", "misskaty"])
async def aexec(code, c, m): async def aexec(code, c, m):
exec("async def __aexec(c, m): " + "\n p = print" + "\n replied = m.reply_to_message" + "".join(f"\n {l_}" for l_ in code.split("\n"))) exec("async def __aexec(c, m): " + "\n p = print" + "\n replied = m.reply_to_message" + "".join(f"\n {l_}" for l_ in code.split("\n")))
return await locals()["__aexec"](c, m) return await locals()["__aexec"](c, m)

View file

@ -25,8 +25,7 @@ import re
from pyrogram import filters from pyrogram import filters
from database.filters_db import (delete_filter, get_filter, get_filters_names, from database.filters_db import delete_filter, get_filter, get_filters_names, save_filter
save_filter)
from misskaty import app from misskaty import app
from misskaty.core.decorator.errors import capture_err from misskaty.core.decorator.errors import capture_err
from misskaty.core.decorator.permissions import adminsOnly from misskaty.core.decorator.permissions import adminsOnly

View file

@ -11,18 +11,16 @@ import time
import traceback import traceback
from asyncio import gather, sleep from asyncio import gather, sleep
from logging import getLogger from logging import getLogger
from shutil import rmtree
from pyrogram import enums, filters from pyrogram import enums, filters
from pyrogram.errors import FloodWait from pyrogram.errors import FloodWait
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.types import InlineKeyboardMarkup
from misskaty import BOT_USERNAME, app from misskaty import BOT_USERNAME, app
from misskaty.core.decorator.errors import capture_err from misskaty.core.decorator.errors import capture_err
from misskaty.core.decorator.pyro_cooldown import wait from misskaty.core.decorator.pyro_cooldown import wait
from misskaty.core.message_utils import * from misskaty.core.message_utils import *
from misskaty.helper import (gen_ik_buttons, get_duration, is_url, from misskaty.helper import gen_ik_buttons, get_duration, is_url, progress_for_pyrogram, screenshot_flink, take_ss
progress_for_pyrogram, screenshot_flink, take_ss)
from misskaty.vars import COMMAND_HANDLER from misskaty.vars import COMMAND_HANDLER
LOGGER = getLogger(__name__) LOGGER = getLogger(__name__)
@ -37,7 +35,8 @@ __HELP__ = """"
@app.on_message(filters.command(["genss"], COMMAND_HANDLER) & wait(30)) @app.on_message(filters.command(["genss"], COMMAND_HANDLER) & wait(30))
@capture_err @capture_err
async def genss(client, m): async def genss(client, m):
if not m.from_user: return if not m.from_user:
return
replied = m.reply_to_message replied = m.reply_to_message
if len(m.command) == 2 and is_url(m.command[1]): if len(m.command) == 2 and is_url(m.command[1]):
snt = await kirimPesan(m, "Give me some time to process your request!! 😴", quote=True) snt = await kirimPesan(m, "Give me some time to process your request!! 😴", quote=True)
@ -46,11 +45,7 @@ async def genss(client, m):
if isinstance(duration, str): if isinstance(duration, str):
return await editPesan(snt, "😟 Sorry! I cannot open the file.") return await editPesan(snt, "😟 Sorry! I cannot open the file.")
btns = gen_ik_buttons() btns = gen_ik_buttons()
await editPesan( await editPesan(snt, f"Now choose how many result for screenshot? 🥳.\n\nTotal duration: `{datetime.timedelta(seconds=duration)}` (`{duration}s`)", reply_markup=InlineKeyboardMarkup(btns))
snt,
f"Now choose how many result for screenshot? 🥳.\n\nTotal duration: `{datetime.timedelta(seconds=duration)}` (`{duration}s`)",
reply_markup=InlineKeyboardMarkup(btns)
)
elif replied and replied.media: elif replied and replied.media:
vid = [replied.video, replied.document] vid = [replied.video, replied.document]
media = next((v for v in vid if v is not None), None) media = next((v for v in vid if v is not None), None)
@ -87,7 +82,8 @@ async def genss(client, m):
] ]
) )
await kirimPesan( await kirimPesan(
m, f"☑️ Uploaded [1] screenshoot.\n\n{m.from_user.first_name} (<code>{m.from_user.id}</code>)\n#️⃣ #ssgen #id{m.from_user.id}\n\nSS Generate by @{BOT_USERNAME}", m,
f"☑️ Uploaded [1] screenshoot.\n\n{m.from_user.first_name} (<code>{m.from_user.id}</code>)\n#️⃣ #ssgen #id{m.from_user.id}\n\nSS Generate by @{BOT_USERNAME}",
reply_to_message_id=m.id, reply_to_message_id=m.id,
) )
await process.delete() await process.delete()
@ -107,6 +103,7 @@ async def genss(client, m):
else: else:
await kirimPesan(m, "Reply to a Telegram media to get screenshots from media..") await kirimPesan(m, "Reply to a Telegram media to get screenshots from media..")
@app.on_callback_query(filters.regex(r'^scht'))
@app.on_callback_query(filters.regex(r"^scht"))
async def _(c, m): async def _(c, m):
asyncio.create_task(screenshot_flink(c, m)) asyncio.create_task(screenshot_flink(c, m))

View file

@ -6,12 +6,7 @@ from logging import getLogger
from PIL import Image, ImageChops, ImageDraw, ImageFont from PIL import Image, ImageChops, ImageDraw, ImageFont
from pyrogram import enums, filters from pyrogram import enums, filters
from pyrogram.errors import ( from pyrogram.errors import ChatAdminRequired, MessageTooLong, RPCError
ChatAdminRequired,
ChatSendMediaForbidden,
MessageTooLong,
RPCError
)
from pyrogram.types import ChatMemberUpdated, InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.types import ChatMemberUpdated, InlineKeyboardButton, InlineKeyboardMarkup
from database.users_chats_db import db from database.users_chats_db import db
@ -89,7 +84,7 @@ async def member_has_joined(c: app, member: ChatMemberUpdated):
else: else:
if (temp.MELCOW).get(f"welcome-{member.chat.id}") is not None: if (temp.MELCOW).get(f"welcome-{member.chat.id}") is not None:
try: try:
await (temp.MELCOW[f"welcome-{member.chat.id}"]).delete() await temp.MELCOW[f"welcome-{member.chat.id}"].delete()
except: except:
pass pass
mention = f"<a href='tg://user?id={user.id}'>{user.first_name}</a>" mention = f"<a href='tg://user?id={user.id}'>{user.first_name}</a>"
@ -186,7 +181,7 @@ async def save_group(bot, message):
pic = "img/profilepic.png" pic = "img/profilepic.png"
if (temp.MELCOW).get(f"welcome-{message.chat.id}") is not None: if (temp.MELCOW).get(f"welcome-{message.chat.id}") is not None:
try: try:
await (temp.MELCOW[f"welcome-{message.chat.id}"]).delete() await temp.MELCOW[f"welcome-{message.chat.id}"].delete()
except: except:
pass pass
try: try:

View file

@ -28,15 +28,13 @@ LOGGER = logging.getLogger(__name__)
LIST_CARI = {} LIST_CARI = {}
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10"} headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10"}
# IMDB Choose Language # IMDB Choose Language
@app.on_message(filters.command(["imdb"], COMMAND_HANDLER)) @app.on_message(filters.command(["imdb"], COMMAND_HANDLER))
@capture_err @capture_err
async def imdb_choose(_, m): async def imdb_choose(_, m):
if len(m.command) == 1: if len(m.command) == 1:
return await kirimPesan( return await kirimPesan(m, f" Please add query after CMD!\nEx: <code>/{m.command[0]} Jurassic World</code>")
m,
f" Please add query after CMD!\nEx: <code>/{m.command[0]} Jurassic World</code>"
)
if m.sender_chat: if m.sender_chat:
return await kirimPesan(m, "This feature not supported for channel..") return await kirimPesan(m, "This feature not supported for channel..")
kuery = m.text.split(None, 1)[1] kuery = m.text.split(None, 1)[1]
@ -268,14 +266,11 @@ async def imdb_id_callback(_, query):
try: try:
await query.message.edit_caption("⏳ Permintaan kamu sedang diproses.. ") await query.message.edit_caption("⏳ Permintaan kamu sedang diproses.. ")
url = f"https://www.imdb.com/title/tt{movie}/" url = f"https://www.imdb.com/title/tt{movie}/"
resp = await http.get( resp = await http.get(url, headers=headers)
url,
headers=headers
)
sop = BeautifulSoup(resp, "lxml") sop = BeautifulSoup(resp, "lxml")
r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0]) r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0])
ott = await search_jw(r_json.get("name"), "ID") ott = await search_jw(r_json.get("name"), "ID")
typee = r_json.get('@type', '') typee = r_json.get("@type", "")
res_str = "" res_str = ""
if judul := r_json.get("name"): if judul := r_json.get("name"):
try: try:
@ -303,17 +298,11 @@ async def imdb_id_callback(_, query):
genre = genre[:-2] genre = genre[:-2]
res_str += f"<b>Genre:</b> {genre}\n" res_str += f"<b>Genre:</b> {genre}\n"
if negara := sop.select('li[data-testid="title-details-origin"]'): if negara := sop.select('li[data-testid="title-details-origin"]'):
country = "".join( country = "".join(f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, " for country in negara[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"))
f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
for country in negara[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
)
country = country[:-2] country = country[:-2]
res_str += f"<b>Negara:</b> {country}\n" res_str += f"<b>Negara:</b> {country}\n"
if bahasa := sop.select('li[data-testid="title-details-languages"]'): if bahasa := sop.select('li[data-testid="title-details-languages"]'):
language = "".join( language = "".join(f"#{lang.text.replace(' ', '_').replace('-', '_')}, " for lang in bahasa[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"))
f"#{lang.text.replace(' ', '_').replace('-', '_')}, "
for lang in bahasa[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
)
language = language[:-2] language = language[:-2]
res_str += f"<b>Bahasa:</b> {language}\n" res_str += f"<b>Bahasa:</b> {language}\n"
res_str += "\n<b>🙎 Info Cast:</b>\n" res_str += "\n<b>🙎 Info Cast:</b>\n"
@ -397,14 +386,11 @@ async def imdb_en_callback(bot, query):
await query.message.edit_caption("<i>⏳ Getting IMDb source..</i>") await query.message.edit_caption("<i>⏳ Getting IMDb source..</i>")
try: try:
url = f"https://www.imdb.com/title/tt{movie}/" url = f"https://www.imdb.com/title/tt{movie}/"
resp = await http.get( resp = await http.get(url, headers=headers)
url,
headers=headers
)
sop = BeautifulSoup(resp, "lxml") sop = BeautifulSoup(resp, "lxml")
r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0]) r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0])
ott = await search_jw(r_json.get("name"), "US") ott = await search_jw(r_json.get("name"), "US")
typee = r_json.get('@type', '') typee = r_json.get("@type", "")
res_str = "" res_str = ""
if judul := r_json.get("name"): if judul := r_json.get("name"):
try: try:
@ -432,17 +418,11 @@ async def imdb_en_callback(bot, query):
genre = genre[:-2] genre = genre[:-2]
res_str += f"<b>Genre:</b> {genre}\n" res_str += f"<b>Genre:</b> {genre}\n"
if negara := sop.select('li[data-testid="title-details-origin"]'): if negara := sop.select('li[data-testid="title-details-origin"]'):
country = "".join( country = "".join(f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, " for country in negara[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"))
f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
for country in negara[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
)
country = country[:-2] country = country[:-2]
res_str += f"<b>Country:</b> {country}\n" res_str += f"<b>Country:</b> {country}\n"
if bahasa := sop.select('li[data-testid="title-details-languages"]'): if bahasa := sop.select('li[data-testid="title-details-languages"]'):
language = "".join( language = "".join(f"#{lang.text.replace(' ', '_').replace('-', '_')}, " for lang in bahasa[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"))
f"#{lang.text.replace(' ', '_').replace('-', '_')}, "
for lang in bahasa[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
)
language = language[:-2] language = language[:-2]
res_str += f"<b>Language:</b> {language}\n" res_str += f"<b>Language:</b> {language}\n"
res_str += "\n<b>🙎 Cast Info:</b>\n" res_str += "\n<b>🙎 Cast Info:</b>\n"

View file

@ -4,12 +4,10 @@ import traceback
from logging import getLogger from logging import getLogger
from sys import platform from sys import platform
from sys import version as pyver from sys import version as pyver
from unicodedata import name
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from deep_translator import GoogleTranslator from deep_translator import GoogleTranslator
from motor import version as mongover from motor import version as mongover
from misskaty.core.keyboard import keyboard
from pykeyboard import InlineKeyboard, InlineButton from pykeyboard import InlineKeyboard, InlineButton
from pyrogram import __version__ as pyrover from pyrogram import __version__ as pyrover
from pyrogram import enums, filters from pyrogram import enums, filters
@ -42,6 +40,7 @@ keywords_list = ["imdb", "pypi", "git", "google", "secretmsg", "info", "botapi"]
PRVT_MSGS = {} PRVT_MSGS = {}
LOGGER = getLogger() LOGGER = getLogger()
@app.on_inline_query() @app.on_inline_query()
async def inline_menu(_, inline_query: InlineQuery): async def inline_menu(_, inline_query: InlineQuery):
if inline_query.query.strip().lower().strip() == "": if inline_query.query.strip().lower().strip() == "":
@ -98,7 +97,11 @@ async def inline_menu(_, inline_query: InlineQuery):
) )
kueri = inline_query.query.split(None, 1)[1].strip() kueri = inline_query.query.split(None, 1)[1].strip()
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/61.0.3163.100 Safari/537.36"} headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/61.0.3163.100 Safari/537.36"}
jsonapi = await http.get(f"https://github.com/yasirarism/telegram-bot-api-spec/raw/main/api.json", headers=headers, follow_redirects=True) jsonapi = await http.get(
"https://github.com/yasirarism/telegram-bot-api-spec/raw/main/api.json",
headers=headers,
follow_redirects=True,
)
parsemethod = jsonapi.json().get("methods") parsemethod = jsonapi.json().get("methods")
parsetypes = jsonapi.json().get("types") parsetypes = jsonapi.json().get("types")
datajson = [] datajson = []
@ -542,7 +545,7 @@ async def imdb_inl(_, query):
r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0]) r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0])
ott = await search_jw(r_json["name"], "en_ID") ott = await search_jw(r_json["name"], "en_ID")
res_str = "" res_str = ""
typee = r_json.get('@type', '') typee = r_json.get("@type", "")
if r_json.get("name"): if r_json.get("name"):
try: try:
tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find("span", class_="sc-8c396aa2-2 jwaBvf").text tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find("span", class_="sc-8c396aa2-2 jwaBvf").text
@ -569,17 +572,11 @@ async def imdb_inl(_, query):
genre = genre[:-2] genre = genre[:-2]
res_str += f"<b>Genre:</b> {genre}\n" res_str += f"<b>Genre:</b> {genre}\n"
if negara := sop.select('li[data-testid="title-details-origin"]'): if negara := sop.select('li[data-testid="title-details-origin"]'):
country = "".join( country = "".join(f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, " for country in negara[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"))
f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
for country in negara[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
)
country = country[:-2] country = country[:-2]
res_str += f"<b>Negara:</b> {country}\n" res_str += f"<b>Negara:</b> {country}\n"
if bahasa := sop.select('li[data-testid="title-details-languages"]'): if bahasa := sop.select('li[data-testid="title-details-languages"]'):
language = "".join( language = "".join(f"#{lang.text.replace(' ', '_').replace('-', '_')}, " for lang in bahasa[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"))
f"#{lang.text.replace(' ', '_').replace('-', '_')}, "
for lang in bahasa[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
)
language = language[:-2] language = language[:-2]
res_str += f"<b>Bahasa:</b> {language}\n" res_str += f"<b>Bahasa:</b> {language}\n"
res_str += "\n<b>🙎 Info Cast:</b>\n" res_str += "\n<b>🙎 Info Cast:</b>\n"

View file

@ -5,7 +5,6 @@
* @projectName MissKatyPyro * @projectName MissKatyPyro
* Copyright @YasirPedia All rights reserved * Copyright @YasirPedia All rights reserved
""" """
import asyncio
import io import io
import subprocess import subprocess
import time import time
@ -17,14 +16,15 @@ from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from misskaty import app from misskaty import app
from misskaty.core.message_utils import * from misskaty.core.message_utils import *
from misskaty.core.decorator.pyro_cooldown import wait from misskaty.core.decorator.pyro_cooldown import wait
from misskaty.helper import post_to_telegraph, runcmd, progress_for_pyrogram, http from misskaty.helper import http, progress_for_pyrogram, runcmd
from misskaty.vars import COMMAND_HANDLER from misskaty.vars import COMMAND_HANDLER
from utils import get_file_id from utils import get_file_id
@app.on_message(filters.command(["mediainfo"], COMMAND_HANDLER) & wait(30)) @app.on_message(filters.command(["mediainfo"], COMMAND_HANDLER) & wait(30))
async def mediainfo(client, message): async def mediainfo(client, message):
if not message.from_user: return if not message.from_user:
return
if message.reply_to_message and message.reply_to_message.media: if message.reply_to_message and message.reply_to_message.media:
process = await kirimPesan(message, "`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True) process = await kirimPesan(message, "`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True)
file_info = get_file_id(message.reply_to_message) file_info = get_file_id(message.reply_to_message)
@ -56,7 +56,7 @@ async def mediainfo(client, message):
"expire_at": 0, "expire_at": 0,
"expire_in": 0, "expire_in": 0,
} }
response = await http.post('https://paste.yasir.eu.org/api/new', json=json_data) response = await http.post("https://paste.yasir.eu.org/api/new", json=json_data)
link = f"https://paste.yasir.eu.org/{response.json()['id']}" link = f"https://paste.yasir.eu.org/{response.json()['id']}"
except: except:
link = None link = None
@ -88,7 +88,7 @@ async def mediainfo(client, message):
"expire_at": 0, "expire_at": 0,
"expire_in": 0, "expire_in": 0,
} }
response = await http.post('https://paste.yasir.eu.org/api/new', json=json_data) response = await http.post("https://paste.yasir.eu.org/api/new", json=json_data)
link = f"https://paste.yasir.eu.org/{response.json()['id']}" link = f"https://paste.yasir.eu.org/{response.json()['id']}"
except: except:
link = None link = None

View file

@ -27,6 +27,7 @@ __HELP__ = """
/temp_paste [Text/Reply To Message] - Post text to tempaste.com using html style. /temp_paste [Text/Reply To Message] - Post text to tempaste.com using html style.
""" """
# Size Checker for Limit # Size Checker for Limit
def humanbytes(size: int): def humanbytes(size: int):
"""Convert Bytes To Bytes So That Human Can Read It""" """Convert Bytes To Bytes So That Human Can Read It"""
@ -64,6 +65,7 @@ def humanbytes(size: int):
# Pattern if extension supported, PR if want to add more # Pattern if extension supported, PR if want to add more
pattern = compiles(r"^text/|json$|yaml$|xml$|toml$|x-sh$|x-shellscript$|x-subrip$") pattern = compiles(r"^text/|json$|yaml$|xml$|toml$|x-sh$|x-shellscript$|x-subrip$")
@app.on_message(filters.command(["tgraph"], COMMAND_HANDLER)) @app.on_message(filters.command(["tgraph"], COMMAND_HANDLER))
async def telegraph_paste(_, message): async def telegraph_paste(_, message):
reply = message.reply_to_message reply = message.reply_to_message
@ -134,6 +136,7 @@ async def telegraph_paste(_, message):
pasted = f"**Successfully pasted your data to Telegraph<a href='{url}'>.</a>\n\nPaste by {uname}**" pasted = f"**Successfully pasted your data to Telegraph<a href='{url}'>.</a>\n\nPaste by {uname}**"
await editPesan(msg, pasted, reply_markup=InlineKeyboardMarkup(button)) await editPesan(msg, pasted, reply_markup=InlineKeyboardMarkup(button))
# Default Paste to Wastebin using Deta # Default Paste to Wastebin using Deta
@app.on_message(filters.command(["paste"], COMMAND_HANDLER)) @app.on_message(filters.command(["paste"], COMMAND_HANDLER))
async def wastepaste(_, message): async def wastepaste(_, message):
@ -182,7 +185,7 @@ async def wastepaste(_, message):
"expire_at": 0, "expire_at": 0,
"expire_in": 0, "expire_in": 0,
} }
response = await http.post('https://paste.yasir.eu.org/api/new', json=json_data) response = await http.post("https://paste.yasir.eu.org/api/new", json=json_data)
url = f"https://paste.yasir.eu.org/{response.json()['id']}" url = f"https://paste.yasir.eu.org/{response.json()['id']}"
except Exception as e: except Exception as e:
return await editPesan(msg, f"ERROR: {e}") return await editPesan(msg, f"ERROR: {e}")
@ -197,6 +200,7 @@ async def wastepaste(_, message):
pasted = f"**Successfully pasted your data to YasirBin<a href='{url}'>.</a>\n\nPaste by {uname}**" pasted = f"**Successfully pasted your data to YasirBin<a href='{url}'>.</a>\n\nPaste by {uname}**"
await editPesan(msg, pasted, reply_markup=InlineKeyboardMarkup(button)) await editPesan(msg, pasted, reply_markup=InlineKeyboardMarkup(button))
# Nekobin Paste # Nekobin Paste
@app.on_message(filters.command(["neko"], COMMAND_HANDLER)) @app.on_message(filters.command(["neko"], COMMAND_HANDLER))
async def nekopaste(_, message): async def nekopaste(_, message):
@ -253,6 +257,7 @@ async def nekopaste(_, message):
pasted = f"**Successfully pasted your data to Nekobin<a href='{url}'>.</a>\n\nPaste by {uname}**" pasted = f"**Successfully pasted your data to Nekobin<a href='{url}'>.</a>\n\nPaste by {uname}**"
await editPesan(msg, pasted, reply_markup=InlineKeyboardMarkup(button)) await editPesan(msg, pasted, reply_markup=InlineKeyboardMarkup(button))
# Paste as spacebin # Paste as spacebin
@app.on_message(filters.command(["sbin"], COMMAND_HANDLER)) @app.on_message(filters.command(["sbin"], COMMAND_HANDLER))
async def spacebinn(_, message): async def spacebinn(_, message):
@ -295,9 +300,9 @@ async def spacebinn(_, message):
try: try:
siteurl = "https://spaceb.in/api/v1/documents/" siteurl = "https://spaceb.in/api/v1/documents/"
response = await http.post(siteurl, data={"content": data, "extension": 'txt'}) response = await http.post(siteurl, data={"content": data, "extension": "txt"})
response = response.json() response = response.json()
url = "https://spaceb.in/"+response['payload']['id'] url = "https://spaceb.in/" + response["payload"]["id"]
except Exception as e: except Exception as e:
return await editPesan(msg, f"ERROR: {e}") return await editPesan(msg, f"ERROR: {e}")
@ -311,6 +316,7 @@ async def spacebinn(_, message):
pasted = f"**Successfully pasted your data to Spacebin<a href='{url}'>.</a>\n\nPaste by {uname}**" pasted = f"**Successfully pasted your data to Spacebin<a href='{url}'>.</a>\n\nPaste by {uname}**"
await editPesan(msg, pasted, reply_markup=InlineKeyboardMarkup(button)) await editPesan(msg, pasted, reply_markup=InlineKeyboardMarkup(button))
# Rentry paste # Rentry paste
@app.on_message(filters.command(["rentry"], COMMAND_HANDLER)) @app.on_message(filters.command(["rentry"], COMMAND_HANDLER))
async def rentrypaste(_, message): async def rentrypaste(_, message):

View file

@ -16,9 +16,10 @@ from misskaty.vars import COMMAND_HANDLER
PYPI_DICT = {} PYPI_DICT = {}
async def getDataPypi(msg, kueri, CurrentPage, user): async def getDataPypi(msg, kueri, CurrentPage, user):
if not PYPI_DICT.get(msg.id): if not PYPI_DICT.get(msg.id):
pypijson = (await http.get(f'https://yasirapi.eu.org/pypi?q={kueri}')).json() pypijson = (await http.get(f"https://yasirapi.eu.org/pypi?q={kueri}")).json()
if not pypijson.get("result"): if not pypijson.get("result"):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, 0, None return None, 0, None
@ -30,40 +31,38 @@ async def getDataPypi(msg, kueri, CurrentPage, user):
pypiResult = f"<b>#Pypi Results For:</b> <code>{kueri}</code>\n\n" pypiResult = f"<b>#Pypi Results For:</b> <code>{kueri}</code>\n\n"
for c, i in enumerate(PYPI_DICT[msg.id][0][index], start=1): for c, i in enumerate(PYPI_DICT[msg.id][0][index], start=1):
pypiResult += f"<b>{c}.</b> <a href='{i['url']}'>{i['name']} {i['version']}</a>\n<b>Created:</b> <code>{i['created']}</code>\n<b>Desc:</b> <code>{i['description']}</code>\n\n" pypiResult += f"<b>{c}.</b> <a href='{i['url']}'>{i['name']} {i['version']}</a>\n<b>Created:</b> <code>{i['created']}</code>\n<b>Desc:</b> <code>{i['description']}</code>\n\n"
extractbtn.append( extractbtn.append(InlineButton(c, f"pypidata#{CurrentPage}#{c}#{user}#{msg.id}"))
InlineButton(c, f"pypidata#{CurrentPage}#{c}#{user}#{msg.id}") pypiResult = "".join(i for i in pypiResult if i not in "[]")
)
IGNORE_CHAR = "[]"
pypiResult = ''.join(i for i in pypiResult if not i in IGNORE_CHAR)
return pypiResult, PageLen, extractbtn return pypiResult, PageLen, extractbtn
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, 0, None return None, 0, None
@app.on_message(filters.command(['pypi'], COMMAND_HANDLER))
@app.on_message(filters.command(["pypi"], COMMAND_HANDLER))
async def pypi_s(client, message): async def pypi_s(client, message):
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
return await kirimPesan(message, "Please add query after command. Ex: <code>/pypi pyrogram</code>") return await kirimPesan(message, "Please add query after command. Ex: <code>/pypi pyrogram</code>")
pesan = await kirimPesan(message, "⏳ Please wait, getting data from pypi..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, getting data from pypi..", quote=True)
CurrentPage = 1 CurrentPage = 1
pypires, PageLen, btn = await getDataPypi(pesan, kueri, CurrentPage, message.from_user.id) pypires, PageLen, btn = await getDataPypi(pesan, kueri, CurrentPage, message.from_user.id)
if not pypires: return if not pypires:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_pypi#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_pypi#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row(InlineButton("👇 Get Info ", "Hmmm")) keyboard.row(InlineButton("👇 Get Info ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, pypires, reply_markup=keyboard) await editPesan(pesan, pypires, reply_markup=keyboard)
@app.on_callback_query(filters.create(lambda _, __, query: 'page_pypi#' in query.data))
@app.on_callback_query(filters.create(lambda _, __, query: "page_pypi#" in query.data))
async def pypipage_callback(client, callback_query): async def pypipage_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = PYPI_DICT[message_id][1] kueri = PYPI_DICT[message_id][1]
except KeyError: except KeyError:
@ -75,31 +74,27 @@ async def pypipage_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_pypi#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_pypi#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, pypires, reply_markup=keyboard) await editPesan(callback_query.message, pypires, reply_markup=keyboard)
@app.on_callback_query(filters.create(lambda _, __, query: 'pypidata#' in query.data))
@app.on_callback_query(filters.create(lambda _, __, query: "pypidata#" in query.data))
async def pypi_getdata(_, callback_query): async def pypi_getdata(_, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
idlink = int(callback_query.data.split("#")[2]) idlink = int(callback_query.data.split("#")[2])
message_id = int(callback_query.data.split('#')[4]) message_id = int(callback_query.data.split("#")[4])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
pkgname = PYPI_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("name") pkgname = PYPI_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("name")
except KeyError: except KeyError:
return await callback_query.answer("Invalid callback data, please send CMD again..") return await callback_query.answer("Invalid callback data, please send CMD again..")
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.row( keyboard.row(InlineButton("↩️ Back", f"page_pypi#{CurrentPage}#{message_id}#{callback_query.from_user.id}"), InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("↩️ Back", f"page_pypi#{CurrentPage}#{message_id}#{callback_query.from_user.id}"),
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
try: try:
html = await http.get(f"https://pypi.org/pypi/{pkgname}/json", headers=headers) html = await http.get(f"https://pypi.org/pypi/{pkgname}/json", headers=headers)
res = html.json() res = html.json()
@ -114,7 +109,7 @@ async def pypi_getdata(_, callback_query):
msg += f"<b>Requires Python:</b> {res['info'].get('requires_python', 'Unknown')}\n" msg += f"<b>Requires Python:</b> {res['info'].get('requires_python', 'Unknown')}\n"
msg += f"<b>HomePage:</b> {res['info'].get('home_page', 'Unknown')}\n" msg += f"<b>HomePage:</b> {res['info'].get('home_page', 'Unknown')}\n"
msg += f"<b>Bug Track:</b> {res['info'].get('vulnerabilities', 'Unknown')}\n" msg += f"<b>Bug Track:</b> {res['info'].get('vulnerabilities', 'Unknown')}\n"
if res['info'].get('project_urls'): if res["info"].get("project_urls"):
msg += f"<b>Docs Url:</b> {res['info']['project_urls'].get('Documentation', 'Unknown')}\n" msg += f"<b>Docs Url:</b> {res['info']['project_urls'].get('Documentation', 'Unknown')}\n"
msg += f"<b>Description:</b> {res['info'].get('summary', 'Unknown')}\n" msg += f"<b>Description:</b> {res['info'].get('summary', 'Unknown')}\n"
msg += f"<b>Pip Command:</b> pip3 install {res['info'].get('name', 'Unknown')}\n" msg += f"<b>Pip Command:</b> pip3 install {res['info'].get('name', 'Unknown')}\n"

View file

@ -12,13 +12,15 @@ This feature inspired from SangMata Bot. I'm created simple detection to check u
/sangmata_set [on/off] - Enable/disable sangmata in groups. /sangmata_set [on/off] - Enable/disable sangmata in groups.
""" """
# Check user that change first_name, last_name and usernaname # Check user that change first_name, last_name and usernaname
@app.on_message( @app.on_message(
filters.group & ~filters.bot & ~filters.via_bot, filters.group & ~filters.bot & ~filters.via_bot,
group=3, group=3,
) )
async def cek_mataa(_, m): async def cek_mataa(_, m):
if not await is_sangmata_on(m.chat.id): return if not await is_sangmata_on(m.chat.id):
return
if not await cek_userdata(m.from_user.id): if not await cek_userdata(m.from_user.id):
return await add_userdata(m.from_user.id, m.from_user.username, m.from_user.first_name, m.from_user.last_name) return await add_userdata(m.from_user.id, m.from_user.username, m.from_user.first_name, m.from_user.last_name)
username, first_name, last_name = await get_userdata(m.from_user.id) username, first_name, last_name = await get_userdata(m.from_user.id)
@ -37,9 +39,8 @@ async def cek_mataa(_, m):
if msg != "": if msg != "":
await kirimPesan(m, msg, quote=True) await kirimPesan(m, msg, quote=True)
@app.on_message(
filters.group & filters.command("sangmata_set", COMMAND_HANDLER) & ~filters.bot & ~filters.via_bot @app.on_message(filters.group & filters.command("sangmata_set", COMMAND_HANDLER) & ~filters.bot & ~filters.via_bot)
)
@adminsOnly("can_change_info") @adminsOnly("can_change_info")
async def set_mataa(_, m): async def set_mataa(_, m):
if len(m.command) == 1: if len(m.command) == 1:

View file

@ -1,17 +1,11 @@
from ast import Delete
import traceback import traceback
from logging import getLogger from logging import getLogger
from pyrogram import Client, filters from pyrogram import Client, filters
from pyrogram.errors import (ApiIdInvalid, PasswordHashInvalid, from pyrogram.errors import ApiIdInvalid, PasswordHashInvalid, PhoneCodeExpired, PhoneCodeInvalid, PhoneNumberInvalid, SessionPasswordNeeded
PhoneCodeExpired, PhoneCodeInvalid,
PhoneNumberInvalid, SessionPasswordNeeded)
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from telethon import TelegramClient from telethon import TelegramClient
from telethon.errors import (ApiIdInvalidError, PasswordHashInvalidError, from telethon.errors import ApiIdInvalidError, PasswordHashInvalidError, PhoneCodeExpiredError, PhoneCodeInvalidError, PhoneNumberInvalidError, SessionPasswordNeededError
PhoneCodeExpiredError, PhoneCodeInvalidError,
PhoneNumberInvalidError,
SessionPasswordNeededError)
from telethon.sessions import StringSession from telethon.sessions import StringSession
from misskaty import app from misskaty import app
@ -37,11 +31,8 @@ buttons_ques = [
], ],
] ]
gen_button = [ gen_button = [[InlineKeyboardButton(text="🙄 Generate Session 🙄", callback_data="genstring")]]
[
InlineKeyboardButton(text="🙄 Generate Session 🙄", callback_data="genstring")
]
]
async def is_batal(msg): async def is_batal(msg):
if msg.text == "/cancel": if msg.text == "/cancel":
@ -55,6 +46,7 @@ async def is_batal(msg):
else: else:
return False return False
@app.on_callback_query(filters.regex(pattern=r"^(genstring|pyrogram|pyrogram_bot|telethon_bot|telethon)$")) @app.on_callback_query(filters.regex(pattern=r"^(genstring|pyrogram|pyrogram_bot|telethon_bot|telethon)$"))
async def callbackgenstring(bot, callback_query): async def callbackgenstring(bot, callback_query):
query = callback_query.matches[0].group(1) query = callback_query.matches[0].group(1)
@ -77,25 +69,21 @@ async def callbackgenstring(bot, callback_query):
await generate_session(bot, callback_query.message, telethon=True) await generate_session(bot, callback_query.message, telethon=True)
except Exception as e: except Exception as e:
LOGGER.error(traceback.format_exc()) LOGGER.error(traceback.format_exc())
ERROR_MESSAGE = "Something went wrong. \n\n**ERROR** : {} " \ ERROR_MESSAGE = "Something went wrong. \n\n**ERROR** : {} " "\n\n**Please forward this message to my Owner**, if this message " "doesn't contain any sensitive data " "because this error is **not logged by bot.** !"
"\n\n**Please forward this message to my Owner**, if this message " \
"doesn't contain any sensitive data " \
"because this error is **not logged by bot.** !"
await callback_query.message.reply(ERROR_MESSAGE.format(str(e))) await callback_query.message.reply(ERROR_MESSAGE.format(str(e)))
@app.on_message(filters.private & ~filters.forwarded & filters.command("genstring", COMMAND_HANDLER)) @app.on_message(filters.private & ~filters.forwarded & filters.command("genstring", COMMAND_HANDLER))
async def genstringg(_, msg): async def genstringg(_, msg):
await msg.reply(ask_ques, reply_markup=InlineKeyboardMarkup(buttons_ques)) await msg.reply(ask_ques, reply_markup=InlineKeyboardMarkup(buttons_ques))
async def generate_session(bot, msg, telethon=False, is_bot: bool = False): async def generate_session(bot, msg, telethon=False, is_bot: bool = False):
if telethon: ty = "Telethon" if telethon else "Pyrogram"
ty = "Telethon"
else:
ty = "Pyrogram"
if is_bot: if is_bot:
ty += " Bot" ty += " Bot"
await msg.reply(f"» Trying to start **{ty}** session generator...") await msg.reply(f"» Trying to start **{ty}** session generator...")
user_id = msg.chat.id msg.chat.id
api_id_msg = await msg.chat.ask("Please send your **API_ID** to proceed.\n\nClick on /skip for using bot's api.", filters=filters.text) api_id_msg = await msg.chat.ask("Please send your **API_ID** to proceed.\n\nClick on /skip for using bot's api.", filters=filters.text)
if await is_batal(api_id_msg): if await is_batal(api_id_msg):
return return
@ -114,10 +102,7 @@ async def generate_session(bot, msg, telethon=False, is_bot: bool = False):
return return
api_hash = api_hash_msg.text api_hash = api_hash_msg.text
await api_hash_msg.delete() await api_hash_msg.delete()
if not is_bot: t = "Please send your **BOT_TOKEN** to continue.\nExample : `5432198765:abcdanonymousterabaaplol`'" if is_bot else "» Please send your **PHONE_NUMBER** with country code for which you want generate session. \nᴇxᴀᴍᴩʟᴇ : `+6286356837789`'"
t = "» Please send your **PHONE_NUMBER** with country code for which you want generate session. \nᴇxᴀᴍᴩʟᴇ : `+6286356837789`'"
else:
t = "Please send your **BOT_TOKEN** to continue.\nExample : `5432198765:abcdanonymousterabaaplol`'"
phone_number_msg = await msg.chat.ask(t, filters=filters.text) phone_number_msg = await msg.chat.ask(t, filters=filters.text)
if await is_batal(phone_number_msg): if await is_batal(phone_number_msg):
return return
@ -127,9 +112,7 @@ async def generate_session(bot, msg, telethon=False, is_bot: bool = False):
await msg.reply("» Trying to send OTP at the given number...") await msg.reply("» Trying to send OTP at the given number...")
else: else:
await msg.reply("» Trying to login using Bot Token...") await msg.reply("» Trying to login using Bot Token...")
if telethon and is_bot: if telethon and is_bot or telethon:
client = TelegramClient(StringSession(), api_id, api_hash)
elif telethon:
client = TelegramClient(StringSession(), api_id, api_hash) client = TelegramClient(StringSession(), api_id, api_hash)
elif is_bot: elif is_bot:
client = Client(name="bot", api_id=api_id, api_hash=api_hash, bot_token=phone_number, in_memory=True) client = Client(name="bot", api_id=api_id, api_hash=api_hash, bot_token=phone_number, in_memory=True)
@ -190,8 +173,7 @@ async def generate_session(bot, msg, telethon=False, is_bot: bool = False):
except (PasswordHashInvalid, PasswordHashInvalidError): except (PasswordHashInvalid, PasswordHashInvalidError):
await two_step_msg.reply("» The password you've sent is wrong.\n\nPlease start generating session again.", quote=True, reply_markup=InlineKeyboardMarkup(gen_button)) await two_step_msg.reply("» The password you've sent is wrong.\n\nPlease start generating session again.", quote=True, reply_markup=InlineKeyboardMarkup(gen_button))
return return
else: elif telethon:
if telethon:
await client.start(bot_token=phone_number) await client.start(bot_token=phone_number)
else: else:
await client.sign_in_bot(phone_number) await client.sign_in_bot(phone_number)
@ -208,4 +190,7 @@ async def generate_session(bot, msg, telethon=False, is_bot: bool = False):
except KeyError: except KeyError:
pass pass
await client.disconnect() await client.disconnect()
await bot.send_message(msg.chat.id, "» Successfully generated your {} String Session.\n\nPlease check saved messages to get it ! \n\n**A String Generator bot by ** @IAmCuteCodes".format("Telethon" if telethon else "Pyrogram")) await bot.send_message(
msg.chat.id,
f'» Successfully generated your {"Telethon" if telethon else "Pyrogram"} String Session.\n\nPlease check saved messages to get it ! \n\n**A String Generator bot by ** @IAmCuteCodes',
)

View file

@ -9,11 +9,8 @@ from pyrogram import emoji, filters, enums
from pyrogram.errors import BadRequest, PeerIdInvalid, StickersetInvalid from pyrogram.errors import BadRequest, PeerIdInvalid, StickersetInvalid
from pyrogram.file_id import FileId from pyrogram.file_id import FileId
from pyrogram.raw.functions.messages import GetStickerSet, SendMedia from pyrogram.raw.functions.messages import GetStickerSet, SendMedia
from pyrogram.raw.functions.stickers import (AddStickerToSet, CreateStickerSet, from pyrogram.raw.functions.stickers import AddStickerToSet, CreateStickerSet, RemoveStickerFromSet
RemoveStickerFromSet) from pyrogram.raw.types import DocumentAttributeFilename, InputDocument, InputMediaUploadedDocument, InputStickerSetItem, InputStickerSetShortName
from pyrogram.raw.types import (DocumentAttributeFilename, InputDocument,
InputMediaUploadedDocument,
InputStickerSetItem, InputStickerSetShortName)
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from misskaty import BOT_USERNAME, app from misskaty import BOT_USERNAME, app

View file

@ -6,7 +6,6 @@
""" """
import json import json
import os import os
import traceback
from logging import getLogger from logging import getLogger
from re import I from re import I
from re import split as ngesplit from re import split as ngesplit
@ -157,7 +156,7 @@ async def stream_extract(bot, update):
start_time = perf_counter() start_time = perf_counter()
namafile = get_subname(lang, link, format) namafile = get_subname(lang, link, format)
LOGGER.info(f"ExtractSub: {namafile} by {update.from_user.first_name} [{update.from_user.id}]") LOGGER.info(f"ExtractSub: {namafile} by {update.from_user.first_name} [{update.from_user.id}]")
extract = (await shell_exec(f"mediaextract -i {link} -map {map} '{namafile}'"))[0] (await shell_exec(f"mediaextract -i {link} -map {map} '{namafile}'"))[0]
end_time = perf_counter() end_time = perf_counter()
timelog = "{:.2f}".format(end_time - start_time) + " second" timelog = "{:.2f}".format(end_time - start_time) + " second"
c_time = time() c_time = time()

View file

@ -7,7 +7,8 @@ from misskaty.vars import COMMAND_HANDLER
@app.on_message(filters.command(["session"], COMMAND_HANDLER)) @app.on_message(filters.command(["session"], COMMAND_HANDLER))
async def session(_, message): async def session(_, message):
if not message.from_user: return if not message.from_user:
return
nama = await message.chat.ask("Ketik nama kamu:") nama = await message.chat.ask("Ketik nama kamu:")
umur = await message.chat.ask("Ketik umur kamu") umur = await message.chat.ask("Ketik umur kamu")
alamat = await message.chat.ask("Ketik alamat kamu:") alamat = await message.chat.ask("Ketik alamat kamu:")

View file

@ -8,85 +8,54 @@ from misskaty.vars import COMMAND_HANDLER
async def getData(chat_id, message_id, GetWord, CurrentPage): async def getData(chat_id, message_id, GetWord, CurrentPage):
UDJson = (await http.get( UDJson = (await http.get(f"https://api.urbandictionary.com/v0/define?term={GetWord}")).json()
f'https://api.urbandictionary.com/v0/define?term={GetWord}')).json()
if not 'list' in UDJson: if "list" not in UDJson:
CNMessage = await app.send_message( CNMessage = await app.send_message(chat_id=chat_id, reply_to_message_id=message_id, text=(f"Word: {GetWord}\n" "Results: Sorry could not find any matching results!"))
chat_id=chat_id,
reply_to_message_id=message_id,
text=(
f"Word: {GetWord}\n"
"Results: Sorry could not find any matching results!"
)
)
await asyncio.sleep(5) await asyncio.sleep(5)
await CNMessage.delete() await CNMessage.delete()
return return
try: try:
index = int(CurrentPage - 1) index = int(CurrentPage - 1)
PageLen = len(UDJson['list']) PageLen = len(UDJson["list"])
UDReasult = ( UDReasult = f"**Definition of {GetWord}**\n" f"{UDJson['list'][index]['definition']}\n\n" "**📌 Examples**\n" f"__{UDJson['list'][index]['example']}__"
f"**Definition of {GetWord}**\n"
f"{UDJson['list'][index]['definition']}\n\n"
"**📌 Examples**\n"
f"__{UDJson['list'][index]['example']}__"
)
INGNORE_CHAR = "[]" UDFReasult = "".join(i for i in UDReasult if i not in "[]")
UDFReasult = ''.join(i for i in UDReasult if not i in INGNORE_CHAR)
return ( return (UDFReasult, PageLen)
UDFReasult,
PageLen
)
except ( except IndexError or KeyError:
IndexError CNMessage = await app.send_message(chat_id=chat_id, reply_to_message_id=message_id, text=(f"Word: {GetWord}\n" "Results: Sorry could not find any matching results!"))
or KeyError
):
CNMessage = await app.send_message(
chat_id=chat_id,
reply_to_message_id=message_id,
text=(
f"Word: {GetWord}\n"
"Results: Sorry could not find any matching results!"
)
)
await asyncio.sleep(5) await asyncio.sleep(5)
await CNMessage.delete() await CNMessage.delete()
@app.on_message(filters.command(['ud'], COMMAND_HANDLER))
@app.on_message(filters.command(["ud"], COMMAND_HANDLER))
async def urbanDictionary(client, message): async def urbanDictionary(client, message):
if not message.from_user: return if not message.from_user:
return
message_id = message.id message_id = message.id
chat_id = message.chat.id chat_id = message.chat.id
GetWord = ' '.join(message.command[1:]) GetWord = " ".join(message.command[1:])
if not GetWord: if not GetWord:
message = await message.chat.ask( message = await message.chat.ask("Now give any word for query!", identifier=(message.from_user.id, message.from_user.id, None))
'Now give any word for query!',
identifier=(message.from_user.id, message.from_user.id, None)
)
GetWord = message.text GetWord = message.text
CurrentPage = 1 CurrentPage = 1
UDReasult, PageLen = await getData(chat_id, message_id, GetWord, CurrentPage) UDReasult, PageLen = await getData(chat_id, message_id, GetWord, CurrentPage)
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'pagination_urban#{number}' + f'#{GetWord}') keyboard.paginate(PageLen, CurrentPage, "pagination_urban#{number}" + f"#{GetWord}")
await message.reply( await message.reply(text=f"{UDReasult}", reply_markup=keyboard)
text=f"{UDReasult}",
reply_markup=keyboard
)
@app.on_callback_query(filters.create(lambda _, __, query: 'pagination_urban#' in query.data))
@app.on_callback_query(filters.create(lambda _, __, query: "pagination_urban#" in query.data))
async def ud_callback(client, callback_query): async def ud_callback(client, callback_query):
message_id = callback_query.message.id message_id = callback_query.message.id
chat_id = callback_query.message.chat.id chat_id = callback_query.message.chat.id
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
GetWord = callback_query.data.split('#')[2] GetWord = callback_query.data.split("#")[2]
try: try:
UDReasult, PageLen = await getData(chat_id, message_id, GetWord, CurrentPage) UDReasult, PageLen = await getData(chat_id, message_id, GetWord, CurrentPage)
@ -94,10 +63,5 @@ async def ud_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'pagination_urban#{number}' + f'#{GetWord}') keyboard.paginate(PageLen, CurrentPage, "pagination_urban#{number}" + f"#{GetWord}")
await app.edit_message_text( await app.edit_message_text(chat_id=chat_id, message_id=message_id, text=UDReasult, reply_markup=keyboard)
chat_id=chat_id,
message_id=message_id,
text=UDReasult,
reply_markup=keyboard
)

View file

@ -10,7 +10,6 @@ import logging
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from pykeyboard import InlineKeyboard, InlineButton from pykeyboard import InlineKeyboard, InlineButton
from pyrogram import filters from pyrogram import filters
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from misskaty.helper.http import http from misskaty.helper.http import http
from misskaty.helper.kuso_utils import Kusonime from misskaty.helper.kuso_utils import Kusonime
from misskaty import app from misskaty import app
@ -36,6 +35,7 @@ LOGGER = logging.getLogger(__name__)
SCRAP_DICT = {} SCRAP_DICT = {}
data_kuso = {} data_kuso = {}
def split_arr(arr, size: 5): def split_arr(arr, size: 5):
arrs = [] arrs = []
while len(arr) > size: while len(arr) > size:
@ -45,13 +45,14 @@ def split_arr(arr, size: 5):
arrs.append(arr) arrs.append(arr)
return arrs return arrs
# Terbit21 GetData # Terbit21 GetData
async def getDataTerbit21(msg, kueri, CurrentPage): async def getDataTerbit21(msg, kueri, CurrentPage):
if not SCRAP_DICT.get(msg.id): if not SCRAP_DICT.get(msg.id):
if not kueri: if not kueri:
terbitjson = (await http.get('https://yasirapi.eu.org/terbit21')).json() terbitjson = (await http.get("https://yasirapi.eu.org/terbit21")).json()
else: else:
terbitjson = (await http.get(f'https://yasirapi.eu.org/terbit21?q={kueri}')).json() terbitjson = (await http.get(f"https://yasirapi.eu.org/terbit21?q={kueri}")).json()
if not terbitjson.get("result"): if not terbitjson.get("result"):
await editPesan(msg, "Sorry, could not find any results!") await editPesan(msg, "Sorry, could not find any results!")
return None, None return None, None
@ -68,19 +69,20 @@ async def getDataTerbit21(msg, kueri, CurrentPage):
TerbitRes += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n" TerbitRes += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n"
TerbitRes += "\n" if re.search(r"Complete|Ongoing", i["kategori"]) else f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n" TerbitRes += "\n" if re.search(r"Complete|Ongoing", i["kategori"]) else f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
IGNORE_CHAR = "[]" IGNORE_CHAR = "[]"
TerbitRes = ''.join(i for i in TerbitRes if not i in IGNORE_CHAR) TerbitRes = "".join(i for i in TerbitRes if not i in IGNORE_CHAR)
return TerbitRes, PageLen return TerbitRes, PageLen
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry, could not find any results!") await editPesan(msg, "Sorry, could not find any results!")
return None, None return None, None
# LK21 GetData # LK21 GetData
async def getDatalk21(msg, kueri, CurrentPage): async def getDatalk21(msg, kueri, CurrentPage):
if not SCRAP_DICT.get(msg.id): if not SCRAP_DICT.get(msg.id):
if not kueri: if not kueri:
lk21json = (await http.get('https://yasirapi.eu.org/lk21')).json() lk21json = (await http.get("https://yasirapi.eu.org/lk21")).json()
else: else:
lk21json = (await http.get(f'https://yasirapi.eu.org/lk21?q={kueri}')).json() lk21json = (await http.get(f"https://yasirapi.eu.org/lk21?q={kueri}")).json()
if not lk21json.get("result"): if not lk21json.get("result"):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, None return None, None
@ -97,16 +99,17 @@ async def getDatalk21(msg, kueri, CurrentPage):
lkResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n" lkResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n"
lkResult += "\n" if re.search(r"Complete|Ongoing", i["kategori"]) else f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n" lkResult += "\n" if re.search(r"Complete|Ongoing", i["kategori"]) else f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
IGNORE_CHAR = "[]" IGNORE_CHAR = "[]"
lkResult = ''.join(i for i in lkResult if not i in IGNORE_CHAR) lkResult = "".join(i for i in lkResult if not i in IGNORE_CHAR)
return lkResult, PageLen return lkResult, PageLen
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, None return None, None
# Pahe GetData # Pahe GetData
async def getDataPahe(msg, kueri, CurrentPage): async def getDataPahe(msg, kueri, CurrentPage):
if not SCRAP_DICT.get(msg.id): if not SCRAP_DICT.get(msg.id):
pahejson = (await http.get(f'https://yasirapi.eu.org/pahe?q={kueri}')).json() pahejson = (await http.get(f"https://yasirapi.eu.org/pahe?q={kueri}")).json()
if not pahejson.get("result"): if not pahejson.get("result"):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, None return None, None
@ -118,18 +121,18 @@ async def getDataPahe(msg, kueri, CurrentPage):
paheResult = f"<b>#Pahe Results For:</b> <code>{kueri}</code>\n\n" if kueri else f"<b>#Pahe Latest:</b>\n🌀 Use /pahe [title] to start search with title.\n\n" paheResult = f"<b>#Pahe Results For:</b> <code>{kueri}</code>\n\n" if kueri else f"<b>#Pahe Latest:</b>\n🌀 Use /pahe [title] to start search with title.\n\n"
for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1): for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1):
paheResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n\n" paheResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n\n"
IGNORE_CHAR = "[]" paheResult = "".join(i for i in paheResult if i not in "[]")
paheResult = ''.join(i for i in paheResult if not i in IGNORE_CHAR)
return paheResult, PageLen return paheResult, PageLen
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, None return None, None
# Kusonime GetData # Kusonime GetData
async def getDataKuso(msg, kueri, CurrentPage, user): async def getDataKuso(msg, kueri, CurrentPage, user):
if not SCRAP_DICT.get(msg.id): if not SCRAP_DICT.get(msg.id):
kusodata = [] kusodata = []
data = await http.get(f'https://kusonime.com/?s={kueri}', headers=headers) data = await http.get(f"https://kusonime.com/?s={kueri}", headers=headers)
res = BeautifulSoup(data.text, "lxml").find_all("h2", {"class": "episodeye"}) res = BeautifulSoup(data.text, "lxml").find_all("h2", {"class": "episodeye"})
for i in res: for i in res:
ress = i.find_all("a")[0] ress = i.find_all("a")[0]
@ -150,25 +153,21 @@ async def getDataKuso(msg, kueri, CurrentPage, user):
for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1): for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1):
kusoResult += f"<b>{c}</b>. {i['title']}\n{i['link']}\n\n" kusoResult += f"<b>{c}</b>. {i['title']}\n{i['link']}\n\n"
if c < 6: if c < 6:
extractbtn1.append( extractbtn1.append(InlineButton(c, f"kusoextract#{CurrentPage}#{c}#{user}#{msg.id}"))
InlineButton(c, f"kusoextract#{CurrentPage}#{c}#{user}#{msg.id}")
)
else: else:
extractbtn2.append( extractbtn2.append(InlineButton(c, f"kusoextract#{CurrentPage}#{c}#{user}#{msg.id}"))
InlineButton(c, f"kusoextract#{CurrentPage}#{c}#{user}#{msg.id}") kusoResult = "".join(i for i in kusoResult if i not in "[]")
)
IGNORE_CHAR = "[]"
kusoResult = ''.join(i for i in kusoResult if not i in IGNORE_CHAR)
return kusoResult, PageLen, extractbtn1, extractbtn2 return kusoResult, PageLen, extractbtn1, extractbtn2
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, 0, None, None return None, 0, None, None
# Movieku GetData # Movieku GetData
async def getDataMovieku(msg, kueri, CurrentPage): async def getDataMovieku(msg, kueri, CurrentPage):
if not SCRAP_DICT.get(msg.id): if not SCRAP_DICT.get(msg.id):
moviekudata = [] moviekudata = []
data = await http.get(f'https://107.152.37.223/?s={kueri}', headers=headers) data = await http.get(f"https://107.152.37.223/?s={kueri}", headers=headers)
r = BeautifulSoup(data.text, "lxml") r = BeautifulSoup(data.text, "lxml")
res = r.find_all(class_="bx") res = r.find_all(class_="bx")
for i in res: for i in res:
@ -188,24 +187,23 @@ async def getDataMovieku(msg, kueri, CurrentPage):
moviekuResult = f"<b>#Movieku Latest:</b>\n🌀 Use /movieku [title] to start search with title.\n\n" if kueri == "" else f"<b>#Movieku Results For:</b> <code>{kueri}</code>\n\n" moviekuResult = f"<b>#Movieku Latest:</b>\n🌀 Use /movieku [title] to start search with title.\n\n" if kueri == "" else f"<b>#Movieku Results For:</b> <code>{kueri}</code>\n\n"
for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1): for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1):
moviekuResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Quality/Status:</b> {i['type']}\n<b>Extract:</b> <code>/movieku_scrap {i['link']}</code>\n\n" moviekuResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Quality/Status:</b> {i['type']}\n<b>Extract:</b> <code>/movieku_scrap {i['link']}</code>\n\n"
IGNORE_CHAR = "[]" moviekuResult = "".join(i for i in moviekuResult if i not in "[]")
moviekuResult = ''.join(i for i in moviekuResult if not i in IGNORE_CHAR)
return moviekuResult, PageLen return moviekuResult, PageLen
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, None return None, None
# Savefilm21 GetData # Savefilm21 GetData
async def getDataSavefilm21(msg, kueri, CurrentPage, user): async def getDataSavefilm21(msg, kueri, CurrentPage, user):
if not SCRAP_DICT.get(msg.id): if not SCRAP_DICT.get(msg.id):
sfdata = [] sfdata = []
data = await http.get(f'https://185.99.135.215/?s={kueri}', headers=headers) data = await http.get(f"https://185.99.135.215/?s={kueri}", headers=headers)
text = BeautifulSoup(data.text, "lxml") text = BeautifulSoup(data.text, "lxml")
entry = text.find_all(class_="entry-header") entry = text.find_all(class_="entry-header")
if "Tidak Ditemukan" in entry[0].text: if "Tidak Ditemukan" in entry[0].text:
if not kueri: if not kueri:
await editPesan(msg, "Sorry, could not find any result") await editPesan(msg, "Sorry, could not find any result")
return None, 0, None
else: else:
await editPesan(msg, f"Sorry, could not find any result for: {kueri}") await editPesan(msg, f"Sorry, could not find any result for: {kueri}")
return None, 0, None return None, 0, None
@ -223,20 +221,18 @@ async def getDataSavefilm21(msg, kueri, CurrentPage, user):
sfResult = f"<b>#SaveFilm21 Latest:</b>\n🌀 Use /savefilm21 [title] to start search with title.\n\n" if kueri == "" else f"<b>#Savefilm21 Results For:</b> <code>{kueri}</code>\n\n" sfResult = f"<b>#SaveFilm21 Latest:</b>\n🌀 Use /savefilm21 [title] to start search with title.\n\n" if kueri == "" else f"<b>#Savefilm21 Results For:</b> <code>{kueri}</code>\n\n"
for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1): for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1):
sfResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Genre:</b> {i['genre']}\n\n" sfResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Genre:</b> {i['genre']}\n\n"
extractbtn.append( extractbtn.append(InlineButton(c, f"sf21extract#{CurrentPage}#{c}#{user}#{msg.id}"))
InlineButton(c, f"sf21extract#{CurrentPage}#{c}#{user}#{msg.id}") sfResult = "".join(i for i in sfResult if i not in "[]")
)
IGNORE_CHAR = "[]"
sfResult = ''.join(i for i in sfResult if not i in IGNORE_CHAR)
return sfResult, PageLen, extractbtn return sfResult, PageLen, extractbtn
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, 0, None return None, 0, None
# Lendrive GetData # Lendrive GetData
async def getDataLendrive(msg, kueri, CurrentPage, user): async def getDataLendrive(msg, kueri, CurrentPage, user):
if not SCRAP_DICT.get(msg.id): if not SCRAP_DICT.get(msg.id):
data = await http.get(f'https://lendrive.web.id/?s={kueri}', headers=headers) data = await http.get(f"https://lendrive.web.id/?s={kueri}", headers=headers)
soup = BeautifulSoup(data.text, "lxml") soup = BeautifulSoup(data.text, "lxml")
lenddata = [] lenddata = []
for o in soup.find_all(class_="bsx"): for o in soup.find_all(class_="bsx"):
@ -257,20 +253,18 @@ async def getDataLendrive(msg, kueri, CurrentPage, user):
lenddataResult = f"<b>#LenDrive Latest:</b>\n🌀 Use /lendrive [title] to start search with title.\n\n" if kueri == "" else f"<b>#LenDrive Results For:</b> <code>{kueri}</code>\n\n" lenddataResult = f"<b>#LenDrive Latest:</b>\n🌀 Use /lendrive [title] to start search with title.\n\n" if kueri == "" else f"<b>#LenDrive Results For:</b> <code>{kueri}</code>\n\n"
for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1): for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1):
lenddataResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Quality:</b> {i['quality']}\n<b>Status:</b> {i['status']}\n\n" lenddataResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Quality:</b> {i['quality']}\n<b>Status:</b> {i['status']}\n\n"
extractbtn.append( extractbtn.append(InlineButton(c, f"lendriveextract#{CurrentPage}#{c}#{user}#{msg.id}"))
InlineButton(c, f"lendriveextract#{CurrentPage}#{c}#{user}#{msg.id}") lenddataResult = "".join(i for i in lenddataResult if i not in "[]")
)
IGNORE_CHAR = "[]"
lenddataResult = ''.join(i for i in lenddataResult if not i in IGNORE_CHAR)
return lenddataResult, PageLen, extractbtn return lenddataResult, PageLen, extractbtn
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, 0, None return None, 0, None
# MelongMovie GetData # MelongMovie GetData
async def getDataMelong(msg, kueri, CurrentPage, user): async def getDataMelong(msg, kueri, CurrentPage, user):
if not SCRAP_DICT.get(msg.id): if not SCRAP_DICT.get(msg.id):
data = await http.get(f'http://167.99.31.48/?s={kueri}', headers=headers) data = await http.get(f"http://167.99.31.48/?s={kueri}", headers=headers)
bs4 = BeautifulSoup(data.text, "lxml") bs4 = BeautifulSoup(data.text, "lxml")
melongdata = [] melongdata = []
for res in bs4.select(".box"): for res in bs4.select(".box"):
@ -294,26 +288,23 @@ async def getDataMelong(msg, kueri, CurrentPage, user):
melongResult = f"<b>#MelongMovie Latest:</b>\n🌀 Use /melongmovie [title] to start search with title.\n\n" if kueri == "" else f"<b>#MelongMovie Results For:</b> <code>{kueri}</code>\n\n" melongResult = f"<b>#MelongMovie Latest:</b>\n🌀 Use /melongmovie [title] to start search with title.\n\n" if kueri == "" else f"<b>#MelongMovie Results For:</b> <code>{kueri}</code>\n\n"
for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1): for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1):
melongResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Quality:</b> {i['quality']}\n\n" melongResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Quality:</b> {i['quality']}\n\n"
extractbtn.append( extractbtn.append(InlineButton(c, f"melongextract#{CurrentPage}#{c}#{user}#{msg.id}"))
InlineButton(c, f"melongextract#{CurrentPage}#{c}#{user}#{msg.id}") melongResult = "".join(i for i in melongResult if i not in "[]")
)
IGNORE_CHAR = "[]"
melongResult = ''.join(i for i in melongResult if not i in IGNORE_CHAR)
return melongResult, PageLen, extractbtn return melongResult, PageLen, extractbtn
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, 0, None return None, 0, None
# GoMov GetData # GoMov GetData
async def getDataGomov(msg, kueri, CurrentPage, user): async def getDataGomov(msg, kueri, CurrentPage, user):
if not SCRAP_DICT.get(msg.id): if not SCRAP_DICT.get(msg.id):
gomovv = await http.get(f'https://185.173.38.216/?s={kueri}', headers=headers) gomovv = await http.get(f"https://185.173.38.216/?s={kueri}", headers=headers)
text = BeautifulSoup(gomovv.text, "lxml") text = BeautifulSoup(gomovv.text, "lxml")
entry = text.find_all(class_="entry-header") entry = text.find_all(class_="entry-header")
if entry[0].text.strip() == "Nothing Found": if entry[0].text.strip() == "Nothing Found":
if not kueri: if not kueri:
await editPesan(msg, "Sorry, i could not find anything.") await editPesan(msg, "Sorry, i could not find anything.")
return None, 0, None
else: else:
await editPesan(msg, f"Sorry, i could not find query: {kueri}") await editPesan(msg, f"Sorry, i could not find query: {kueri}")
return None, 0, None return None, 0, None
@ -334,191 +325,189 @@ async def getDataGomov(msg, kueri, CurrentPage, user):
for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1): for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1):
gomovResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Genre:</b> <code>{i['genre']}</code>\n\n" gomovResult += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Genre:</b> <code>{i['genre']}</code>\n\n"
if not re.search(r"Series", i["genre"]): if not re.search(r"Series", i["genre"]):
extractbtn.append( extractbtn.append(InlineButton(c, f"gomovextract#{CurrentPage}#{c}#{user}#{msg.id}"))
InlineButton(c, f"gomovextract#{CurrentPage}#{c}#{user}#{msg.id}")
)
gomovResult += "Some result will not appear in extract button because unsupported link." gomovResult += "Some result will not appear in extract button because unsupported link."
IGNORE_CHAR = "[]" gomovResult = "".join(i for i in gomovResult if i not in "[]")
gomovResult = ''.join(i for i in gomovResult if not i in IGNORE_CHAR)
return gomovResult, PageLen, extractbtn return gomovResult, PageLen, extractbtn
except (IndexError, KeyError): except (IndexError, KeyError):
await editPesan(msg, "Sorry could not find any matching results!") await editPesan(msg, "Sorry could not find any matching results!")
return None, 0, None return None, 0, None
# Terbit21 CMD # Terbit21 CMD
@app.on_message(filters.command(['terbit21'], COMMAND_HANDLER)) @app.on_message(filters.command(["terbit21"], COMMAND_HANDLER))
async def terbit21_s(client, message): async def terbit21_s(client, message):
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
kueri = None kueri = None
pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Terbit21..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Terbit21..", quote=True)
CurrentPage = 1 CurrentPage = 1
terbitres, PageLen = await getDataTerbit21(pesan, kueri, CurrentPage) terbitres, PageLen = await getDataTerbit21(pesan, kueri, CurrentPage)
if not terbitres: return if not terbitres:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_terbit21#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_terbit21#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, terbitres, reply_markup=keyboard) await editPesan(pesan, terbitres, reply_markup=keyboard)
# LK21 CMD # LK21 CMD
@app.on_message(filters.command(['lk21'], COMMAND_HANDLER)) @app.on_message(filters.command(["lk21"], COMMAND_HANDLER))
async def lk21_s(client, message): async def lk21_s(client, message):
chat_id = message.chat.id message.chat.id
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
kueri = None kueri = None
pesan = await kirimPesan(message, "⏳ Please wait, scraping data from LK21..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, scraping data from LK21..", quote=True)
CurrentPage = 1 CurrentPage = 1
lkres, PageLen = await getDatalk21(pesan, kueri, CurrentPage) lkres, PageLen = await getDatalk21(pesan, kueri, CurrentPage)
if not lkres: return if not lkres:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_lk21#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_lk21#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, lkres, disable_web_page_preview=True, reply_markup=keyboard) await editPesan(pesan, lkres, disable_web_page_preview=True, reply_markup=keyboard)
# Pahe CMD # Pahe CMD
@app.on_message(filters.command(['pahe'], COMMAND_HANDLER)) @app.on_message(filters.command(["pahe"], COMMAND_HANDLER))
async def pahe_s(client, message): async def pahe_s(client, message):
chat_id = message.chat.id message.chat.id
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
kueri = "" kueri = ""
pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Pahe Web..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Pahe Web..", quote=True)
CurrentPage = 1 CurrentPage = 1
paheres, PageLen = await getDataPahe(pesan, kueri, CurrentPage) paheres, PageLen = await getDataPahe(pesan, kueri, CurrentPage)
if not paheres: return if not paheres:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_pahe#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_pahe#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, paheres, reply_markup=keyboard) await editPesan(pesan, paheres, reply_markup=keyboard)
# Gomov CMD # Gomov CMD
@app.on_message(filters.command(['gomov'], COMMAND_HANDLER)) @app.on_message(filters.command(["gomov"], COMMAND_HANDLER))
async def gomov_s(client, message): async def gomov_s(client, message):
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
kueri = "" kueri = ""
pesan = await kirimPesan(message, "⏳ Please wait, scraping data Gomov Web..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, scraping data Gomov Web..", quote=True)
CurrentPage = 1 CurrentPage = 1
gomovres, PageLen, btn = await getDataGomov(pesan, kueri, CurrentPage, message.from_user.id) gomovres, PageLen, btn = await getDataGomov(pesan, kueri, CurrentPage, message.from_user.id)
if not gomovres: return if not gomovres:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_gomov#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_gomov#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, gomovres, reply_markup=keyboard) await editPesan(pesan, gomovres, reply_markup=keyboard)
# MelongMovie CMD # MelongMovie CMD
@app.on_message(filters.command(['melongmovie'], COMMAND_HANDLER)) @app.on_message(filters.command(["melongmovie"], COMMAND_HANDLER))
async def melong_s(client, message): async def melong_s(client, message):
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
kueri = "" kueri = ""
pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Melongmovie..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Melongmovie..", quote=True)
CurrentPage = 1 CurrentPage = 1
melongres, PageLen, btn = await getDataMelong(pesan, kueri, CurrentPage, message.from_user.id) melongres, PageLen, btn = await getDataMelong(pesan, kueri, CurrentPage, message.from_user.id)
if not melongres: return if not melongres:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_melong#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_melong#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, melongres, reply_markup=keyboard) await editPesan(pesan, melongres, reply_markup=keyboard)
# Savefilm21 CMD # Savefilm21 CMD
@app.on_message(filters.command(['savefilm21'], COMMAND_HANDLER)) @app.on_message(filters.command(["savefilm21"], COMMAND_HANDLER))
async def savefilm_s(client, message): async def savefilm_s(client, message):
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
kueri = "" kueri = ""
pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Savefilm21..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Savefilm21..", quote=True)
CurrentPage = 1 CurrentPage = 1
savefilmres, PageLen, btn = await getDataSavefilm21(pesan, kueri, CurrentPage, message.from_user.id) savefilmres, PageLen, btn = await getDataSavefilm21(pesan, kueri, CurrentPage, message.from_user.id)
if not savefilmres: return if not savefilmres:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_savefilm#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_savefilm#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, savefilmres, reply_markup=keyboard) await editPesan(pesan, savefilmres, reply_markup=keyboard)
# Kusonime CMD # Kusonime CMD
@app.on_message(filters.command(['kusonime'], COMMAND_HANDLER)) @app.on_message(filters.command(["kusonime"], COMMAND_HANDLER))
async def kusonime_s(client, message): async def kusonime_s(client, message):
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
kueri = "" kueri = ""
pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Kusonime..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Kusonime..", quote=True)
CurrentPage = 1 CurrentPage = 1
kusores, PageLen, btn1, btn2 = await getDataKuso(pesan, kueri, CurrentPage, message.from_user.id) kusores, PageLen, btn1, btn2 = await getDataKuso(pesan, kueri, CurrentPage, message.from_user.id)
if not kusores: return if not kusores:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_kuso#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_kuso#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn1) keyboard.row(*btn1)
if btn2: if btn2:
keyboard.row(*btn2) keyboard.row(*btn2)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, kusores, reply_markup=keyboard) await editPesan(pesan, kusores, reply_markup=keyboard)
# Lendrive CMD # Lendrive CMD
@app.on_message(filters.command(['lendrive'], COMMAND_HANDLER)) @app.on_message(filters.command(["lendrive"], COMMAND_HANDLER))
async def lendrive_s(client, message): async def lendrive_s(client, message):
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
kueri = "" kueri = ""
pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Lendrive..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Lendrive..", quote=True)
CurrentPage = 1 CurrentPage = 1
lendres, PageLen, btn = await getDataLendrive(pesan, kueri, CurrentPage, message.from_user.id) lendres, PageLen, btn = await getDataLendrive(pesan, kueri, CurrentPage, message.from_user.id)
if not lendres: return if not lendres:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_lendrive#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_lendrive#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, lendres, reply_markup=keyboard) await editPesan(pesan, lendres, reply_markup=keyboard)
# Movieku CMD # Movieku CMD
@app.on_message(filters.command(['movieku'], COMMAND_HANDLER)) @app.on_message(filters.command(["movieku"], COMMAND_HANDLER))
async def movieku_s(client, message): async def movieku_s(client, message):
kueri = ' '.join(message.command[1:]) kueri = " ".join(message.command[1:])
if not kueri: if not kueri:
kueri = "" kueri = ""
pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Movieku..", quote=True) pesan = await kirimPesan(message, "⏳ Please wait, scraping data from Movieku..", quote=True)
CurrentPage = 1 CurrentPage = 1
moviekures, PageLen = await getDataMovieku(pesan, kueri, CurrentPage) moviekures, PageLen = await getDataMovieku(pesan, kueri, CurrentPage)
if not moviekures: return if not moviekures:
return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_movieku#{number}' + f'#{pesan.id}#{message.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_movieku#{number}" + f"#{pesan.id}#{message.from_user.id}")
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{message.from_user.id}"))
InlineButton("❌ Close", f"close#{message.from_user.id}")
)
await editPesan(pesan, moviekures, reply_markup=keyboard) await editPesan(pesan, moviekures, reply_markup=keyboard)
# Savefillm21 Page Callback # Savefillm21 Page Callback
@app.on_callback_query(filters.create(lambda _, __, query: 'page_savefilm#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "page_savefilm#" in query.data))
async def savefilmpage_callback(client, callback_query): async def savefilmpage_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = SCRAP_DICT[message_id][1] kueri = SCRAP_DICT[message_id][1]
except KeyError: except KeyError:
@ -530,21 +519,20 @@ async def savefilmpage_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_savefilm#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_savefilm#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, savefilmres, reply_markup=keyboard) await editPesan(callback_query.message, savefilmres, reply_markup=keyboard)
# Kuso Page Callback # Kuso Page Callback
@app.on_callback_query(filters.create(lambda _, __, query: 'page_kuso#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "page_kuso#" in query.data))
async def kusopage_callback(client, callback_query): async def kusopage_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = SCRAP_DICT[message_id][1] kueri = SCRAP_DICT[message_id][1]
except KeyError: except KeyError:
@ -556,23 +544,22 @@ async def kusopage_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_kuso#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_kuso#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn1) keyboard.row(*btn1)
if btn2: if btn2:
keyboard.row(*btn2) keyboard.row(*btn2)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, kusores, reply_markup=keyboard) await editPesan(callback_query.message, kusores, reply_markup=keyboard)
# Lendrive Page Callback # Lendrive Page Callback
@app.on_callback_query(filters.create(lambda _, __, query: 'page_lendrive#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "page_lendrive#" in query.data))
async def moviekupage_callback(client, callback_query): async def moviekupage_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = SCRAP_DICT[message_id][1] kueri = SCRAP_DICT[message_id][1]
except KeyError: except KeyError:
@ -584,21 +571,20 @@ async def moviekupage_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_lendrive#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_lendrive#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, lendres, reply_markup=keyboard) await editPesan(callback_query.message, lendres, reply_markup=keyboard)
# Movieku Page Callback # Movieku Page Callback
@app.on_callback_query(filters.create(lambda _, __, query: 'page_movieku#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "page_movieku#" in query.data))
async def moviekupage_callback(client, callback_query): async def moviekupage_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = SCRAP_DICT[message_id][1] kueri = SCRAP_DICT[message_id][1]
except KeyError: except KeyError:
@ -610,19 +596,18 @@ async def moviekupage_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_movieku#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_movieku#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, moviekures, reply_markup=keyboard) await editPesan(callback_query.message, moviekures, reply_markup=keyboard)
# Terbit21 Page Callback # Terbit21 Page Callback
@app.on_callback_query(filters.create(lambda _, __, query: 'page_terbit21#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "page_terbit21#" in query.data))
async def terbit21page_callback(client, callback_query): async def terbit21page_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = SCRAP_DICT[message_id][1] kueri = SCRAP_DICT[message_id][1]
except KeyError: except KeyError:
@ -634,19 +619,18 @@ async def terbit21page_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_terbit21#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_terbit21#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, terbitres, reply_markup=keyboard) await editPesan(callback_query.message, terbitres, reply_markup=keyboard)
# Page Callback Melong # Page Callback Melong
@app.on_callback_query(filters.create(lambda _, __, query: 'page_melong#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "page_melong#" in query.data))
async def melongpage_callback(client, callback_query): async def melongpage_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = SCRAP_DICT[message_id][1] kueri = SCRAP_DICT[message_id][1]
except KeyError: except KeyError:
@ -658,21 +642,20 @@ async def melongpage_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_melong#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_melong#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, terbitres, reply_markup=keyboard) await editPesan(callback_query.message, terbitres, reply_markup=keyboard)
# Lk21 Page Callback # Lk21 Page Callback
@app.on_callback_query(filters.create(lambda _, __, query: 'page_lk21#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "page_lk21#" in query.data))
async def lk21page_callback(client, callback_query): async def lk21page_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = SCRAP_DICT[message_id][1] kueri = SCRAP_DICT[message_id][1]
except KeyError: except KeyError:
@ -684,19 +667,18 @@ async def lk21page_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_lk21#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_lk21#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, lkres, reply_markup=keyboard) await editPesan(callback_query.message, lkres, reply_markup=keyboard)
# Pahe Page Callback # Pahe Page Callback
@app.on_callback_query(filters.create(lambda _, __, query: 'page_pahe#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "page_pahe#" in query.data))
async def pahepage_callback(client, callback_query): async def pahepage_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = SCRAP_DICT[message_id][1] kueri = SCRAP_DICT[message_id][1]
except KeyError: except KeyError:
@ -708,19 +690,18 @@ async def pahepage_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_pahe#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_pahe#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, lkres, reply_markup=keyboard) await editPesan(callback_query.message, lkres, reply_markup=keyboard)
# Gomov Page Callback # Gomov Page Callback
@app.on_callback_query(filters.create(lambda _, __, query: 'page_gomov#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "page_gomov#" in query.data))
async def gomovpage_callback(client, callback_query): async def gomovpage_callback(client, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
message_id = int(callback_query.data.split('#')[2]) message_id = int(callback_query.data.split("#")[2])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
kueri = SCRAP_DICT[message_id][1] kueri = SCRAP_DICT[message_id][1]
except KeyError: except KeyError:
@ -732,23 +713,22 @@ async def gomovpage_callback(client, callback_query):
return return
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'page_gomov#{number}' + f'#{message_id}#{callback_query.from_user.id}') keyboard.paginate(PageLen, CurrentPage, "page_gomov#{number}" + f"#{message_id}#{callback_query.from_user.id}")
keyboard.row(InlineButton("👇 Extract Data ", "Hmmm")) keyboard.row(InlineButton("👇 Extract Data ", "Hmmm"))
keyboard.row(*btn) keyboard.row(*btn)
keyboard.row( keyboard.row(InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
await editPesan(callback_query.message, gomovres, reply_markup=keyboard) await editPesan(callback_query.message, gomovres, reply_markup=keyboard)
### Scrape DDL Link From Web ### ### Scrape DDL Link From Web ###
# Kusonime DDL # Kusonime DDL
@app.on_callback_query(filters.create(lambda _, __, query: 'kusoextract#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "kusoextract#" in query.data))
async def kusonime_scrap(_, callback_query): async def kusonime_scrap(_, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
idlink = int(callback_query.data.split("#")[2]) idlink = int(callback_query.data.split("#")[2])
message_id = int(callback_query.data.split('#')[4]) message_id = int(callback_query.data.split("#")[4])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link") link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link")
except KeyError: except KeyError:
@ -756,13 +736,9 @@ async def kusonime_scrap(_, callback_query):
kuso = Kusonime() kuso = Kusonime()
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.row( keyboard.row(InlineButton("↩️ Back", f"page_kuso#{CurrentPage}#{message_id}#{callback_query.from_user.id}"), InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("↩️ Back", f"page_kuso#{CurrentPage}#{message_id}#{callback_query.from_user.id}"),
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
try: try:
init_url = data_kuso.get(link, None) if init_url := data_kuso.get(link, None):
if init_url:
ph = init_url.get("ph_url") ph = init_url.get("ph_url")
await editPesan(callback_query.message, f"<b>Scrape result from {link}</b>:\n\n{ph}", reply_markup=keyboard, disable_web_page_preview=False) await editPesan(callback_query.message, f"<b>Scrape result from {link}</b>:\n\n{ph}", reply_markup=keyboard, disable_web_page_preview=False)
return return
@ -776,24 +752,22 @@ async def kusonime_scrap(_, callback_query):
data_kuso[link] = {"ph_url": tgh["url"]} data_kuso[link] = {"ph_url": tgh["url"]}
await editPesan(callback_query.message, f"<b>Scrape result from</b> <code>{link}</code>:\n\n{tgh['url']}", reply_markup=keyboard, disable_web_page_preview=False) await editPesan(callback_query.message, f"<b>Scrape result from</b> <code>{link}</code>:\n\n{tgh['url']}", reply_markup=keyboard, disable_web_page_preview=False)
# Savefilm21 DDL # Savefilm21 DDL
@app.on_callback_query(filters.create(lambda _, __, query: 'sf21extract#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "sf21extract#" in query.data))
async def savefilm21_scrap(_, callback_query): async def savefilm21_scrap(_, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
idlink = int(callback_query.data.split("#")[2]) idlink = int(callback_query.data.split("#")[2])
message_id = int(callback_query.data.split('#')[4]) message_id = int(callback_query.data.split("#")[4])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link") link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link")
except KeyError: except KeyError:
return await callback_query.answer("Invalid callback data, please send CMD again..") return await callback_query.answer("Invalid callback data, please send CMD again..")
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.row( keyboard.row(InlineButton("↩️ Back", f"page_savefilm#{CurrentPage}#{message_id}#{callback_query.from_user.id}"), InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("↩️ Back", f"page_savefilm#{CurrentPage}#{message_id}#{callback_query.from_user.id}"),
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
try: try:
html = await http.get(link, headers=headers) html = await http.get(link, headers=headers)
soup = BeautifulSoup(html.text, "lxml") soup = BeautifulSoup(html.text, "lxml")
@ -829,24 +803,22 @@ async def muviku_scrap(_, message):
except Exception as e: except Exception as e:
await message.reply(f"ERROR: {str(e)}") await message.reply(f"ERROR: {str(e)}")
# Scrape DDL Link Melongmovie # Scrape DDL Link Melongmovie
@app.on_callback_query(filters.create(lambda _, __, query: 'melongextract#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "melongextract#" in query.data))
async def melong_scrap(_, callback_query): async def melong_scrap(_, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
idlink = int(callback_query.data.split("#")[2]) idlink = int(callback_query.data.split("#")[2])
message_id = int(callback_query.data.split('#')[4]) message_id = int(callback_query.data.split("#")[4])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link") link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link")
except KeyError: except KeyError:
return await callback_query.answer("Invalid callback data, please send CMD again..") return await callback_query.answer("Invalid callback data, please send CMD again..")
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.row( keyboard.row(InlineButton("↩️ Back", f"page_melong#{CurrentPage}#{message_id}#{callback_query.from_user.id}"), InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("↩️ Back", f"page_melong#{CurrentPage}#{message_id}#{callback_query.from_user.id}"),
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
try: try:
html = await http.get(link, headers=headers) html = await http.get(link, headers=headers)
soup = BeautifulSoup(html.text, "lxml") soup = BeautifulSoup(html.text, "lxml")
@ -860,24 +832,22 @@ async def melong_scrap(_, callback_query):
return return
await editPesan(callback_query.message, f"<b>Scrape result from</b> <code>{link}</code>:\n\n{rep}", reply_markup=keyboard) await editPesan(callback_query.message, f"<b>Scrape result from</b> <code>{link}</code>:\n\n{rep}", reply_markup=keyboard)
# Scrape DDL Link Gomov # Scrape DDL Link Gomov
@app.on_callback_query(filters.create(lambda _, __, query: 'gomovextract#' in query.data)) @app.on_callback_query(filters.create(lambda _, __, query: "gomovextract#" in query.data))
async def gomov_dl(_, callback_query): async def gomov_dl(_, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
idlink = int(callback_query.data.split("#")[2]) idlink = int(callback_query.data.split("#")[2])
message_id = int(callback_query.data.split('#')[4]) message_id = int(callback_query.data.split("#")[4])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link") link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link")
except KeyError: except KeyError:
return await callback_query.answer("Invalid callback data, please send CMD again..") return await callback_query.answer("Invalid callback data, please send CMD again..")
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.row( keyboard.row(InlineButton("↩️ Back", f"page_gomov#{CurrentPage}#{message_id}#{callback_query.from_user.id}"), InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("↩️ Back", f"page_gomov#{CurrentPage}#{message_id}#{callback_query.from_user.id}"),
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
try: try:
html = await http.get(link, headers=headers) html = await http.get(link, headers=headers)
soup = BeautifulSoup(html.text, "lxml") soup = BeautifulSoup(html.text, "lxml")
@ -892,23 +862,21 @@ async def gomov_dl(_, callback_query):
return return
await editPesan(callback_query.message, f"<b>Scrape result from</b> <code>{link}</code>:\n\n{hasil}", reply_markup=keyboard) await editPesan(callback_query.message, f"<b>Scrape result from</b> <code>{link}</code>:\n\n{hasil}", reply_markup=keyboard)
@app.on_callback_query(filters.create(lambda _, __, query: 'lendriveextract#' in query.data))
@app.on_callback_query(filters.create(lambda _, __, query: "lendriveextract#" in query.data))
async def lendrive_dl(_, callback_query): async def lendrive_dl(_, callback_query):
if callback_query.from_user.id != int(callback_query.data.split('#')[3]): if callback_query.from_user.id != int(callback_query.data.split("#")[3]):
return await callback_query.answer("Not yours..", True) return await callback_query.answer("Not yours..", True)
idlink = int(callback_query.data.split("#")[2]) idlink = int(callback_query.data.split("#")[2])
message_id = int(callback_query.data.split('#')[4]) message_id = int(callback_query.data.split("#")[4])
CurrentPage = int(callback_query.data.split('#')[1]) CurrentPage = int(callback_query.data.split("#")[1])
try: try:
link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link") link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link")
except KeyError: except KeyError:
return await callback_query.answer("Invalid callback data, please send CMD again..") return await callback_query.answer("Invalid callback data, please send CMD again..")
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.row( keyboard.row(InlineButton("↩️ Back", f"page_lendrive#{CurrentPage}#{message_id}#{callback_query.from_user.id}"), InlineButton("❌ Close", f"close#{callback_query.from_user.id}"))
InlineButton("↩️ Back", f"page_lendrive#{CurrentPage}#{message_id}#{callback_query.from_user.id}"),
InlineButton("❌ Close", f"close#{callback_query.from_user.id}")
)
try: try:
hmm = await http.get(link, headers=headers) hmm = await http.get(link, headers=headers)
q = BeautifulSoup(hmm.text, "lxml") q = BeautifulSoup(hmm.text, "lxml")

View file

@ -4,8 +4,7 @@ from uuid import uuid4
from iytdl import iYTDL, main from iytdl import iYTDL, main
from pyrogram import filters from pyrogram import filters
from pyrogram.types import (CallbackQuery, InlineKeyboardButton, from pyrogram.types import CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup, InputMediaPhoto
InlineKeyboardMarkup, InputMediaPhoto)
from misskaty import app from misskaty import app
from misskaty.core.message_utils import * from misskaty.core.message_utils import *
@ -62,7 +61,8 @@ async def ytsearch(_, message):
@app.on_message(filters.command(["ytdown"], COMMAND_HANDLER)) @app.on_message(filters.command(["ytdown"], COMMAND_HANDLER))
@capture_err @capture_err
async def ytdownv2(_, message): async def ytdownv2(_, message):
if not message.from_user: return if not message.from_user:
return
if len(message.command) == 1: if len(message.command) == 1:
return await message.reply("Please input a valid YT-DLP Supported URL") return await message.reply("Please input a valid YT-DLP Supported URL")
url = message.text.split(" ", maxsplit=1)[1] url = message.text.split(" ", maxsplit=1)[1]

View file

@ -131,7 +131,6 @@ def extract_user(message: Message) -> Union[int, str]:
elif len(message.command) > 1: elif len(message.command) > 1:
if len(message.entities) > 1 and message.entities[1].type == "text_mention": if len(message.entities) > 1 and message.entities[1].type == "text_mention":
required_entity = message.entities[1] required_entity = message.entities[1]
user_id = required_entity.user.id user_id = required_entity.user.id
user_first_name = required_entity.user.first_name user_first_name = required_entity.user.first_name