mirror of
https://github.com/yasirarism/MissKatyPyro.git
synced 2025-12-29 17:44:50 +00:00
Sourcery refactored master branch (#3)
* 'Refactored by Sourcery' * reformating: code Co-authored-by: Sourcery AI <> Co-authored-by: yasirarism <mail@yasir.eu.org>
This commit is contained in:
parent
e8e2b649ff
commit
983f3b50ca
47 changed files with 389 additions and 1306 deletions
|
|
@ -47,9 +47,7 @@ async def is_afk(user_id: int) -> bool:
|
|||
|
||||
|
||||
async def add_afk(user_id: int, mode):
|
||||
await usersdb.update_one(
|
||||
{"user_id": user_id}, {"$set": {"reason": mode}}, upsert=True
|
||||
)
|
||||
await usersdb.update_one({"user_id": user_id}, {"$set": {"reason": mode}}, upsert=True)
|
||||
|
||||
|
||||
async def remove_afk(user_id: int):
|
||||
|
|
|
|||
|
|
@ -6,9 +6,7 @@ filtersdb = dbname.filters
|
|||
|
||||
async def _get_filters(chat_id: int) -> Dict[str, int]:
|
||||
_filters = await filtersdb.find_one({"chat_id": chat_id})
|
||||
if not _filters:
|
||||
return {}
|
||||
return _filters["filters"]
|
||||
return _filters["filters"] if _filters else {}
|
||||
|
||||
|
||||
async def delete_filter(chat_id: int, name: str) -> bool:
|
||||
|
|
@ -28,9 +26,7 @@ async def delete_filter(chat_id: int, name: str) -> bool:
|
|||
async def get_filter(chat_id: int, name: str) -> Union[bool, dict]:
|
||||
name = name.lower().strip()
|
||||
_filters = await _get_filters(chat_id)
|
||||
if name in _filters:
|
||||
return _filters[name]
|
||||
return False
|
||||
return _filters[name] if name in _filters else False
|
||||
|
||||
|
||||
async def get_filters_names(chat_id: int) -> List[str]:
|
||||
|
|
|
|||
|
|
@ -42,9 +42,7 @@ async def update_karma(chat_id: int, name: str, karma: dict):
|
|||
name = name.lower().strip()
|
||||
karmas = await get_karmas(chat_id)
|
||||
karmas[name] = karma
|
||||
await karmadb.update_one(
|
||||
{"chat_id": chat_id}, {"$set": {"karma": karmas}}, upsert=True
|
||||
)
|
||||
await karmadb.update_one({"chat_id": chat_id}, {"$set": {"karma": karmas}}, upsert=True)
|
||||
|
||||
|
||||
async def is_karma_on(chat_id: int) -> bool:
|
||||
|
|
|
|||
|
|
@ -6,9 +6,7 @@ notesdb = dbname.notes
|
|||
|
||||
async def _get_notes(chat_id: int) -> Dict[str, int]:
|
||||
_notes = await notesdb.find_one({"chat_id": chat_id})
|
||||
if not _notes:
|
||||
return {}
|
||||
return _notes["notes"]
|
||||
return _notes["notes"] if _notes else {}
|
||||
|
||||
|
||||
async def delete_note(chat_id: int, name: str) -> bool:
|
||||
|
|
@ -28,9 +26,7 @@ async def delete_note(chat_id: int, name: str) -> bool:
|
|||
async def get_note(chat_id: int, name: str) -> Union[bool, dict]:
|
||||
name = name.lower().strip()
|
||||
_notes = await _get_notes(chat_id)
|
||||
if name in _notes:
|
||||
return _notes[name]
|
||||
return False
|
||||
return _notes[name] if name in _notes else False
|
||||
|
||||
|
||||
async def get_note_names(chat_id: int) -> List[str]:
|
||||
|
|
@ -45,6 +41,4 @@ async def save_note(chat_id: int, name: str, note: dict):
|
|||
_notes = await _get_notes(chat_id)
|
||||
_notes[name] = note
|
||||
|
||||
await notesdb.update_one(
|
||||
{"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True
|
||||
)
|
||||
await notesdb.update_one({"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True)
|
||||
|
|
|
|||
|
|
@ -79,18 +79,14 @@ class Database:
|
|||
is_disabled=False,
|
||||
reason="",
|
||||
)
|
||||
await self.grp.update_one(
|
||||
{"id": int(id)}, {"$set": {"chat_status": chat_status}}
|
||||
)
|
||||
await self.grp.update_one({"id": int(id)}, {"$set": {"chat_status": chat_status}})
|
||||
|
||||
async def disable_chat(self, chat, reason="No Reason"):
|
||||
chat_status = dict(
|
||||
is_disabled=True,
|
||||
reason=reason,
|
||||
)
|
||||
await self.grp.update_one(
|
||||
{"id": int(chat)}, {"$set": {"chat_status": chat_status}}
|
||||
)
|
||||
await self.grp.update_one({"id": int(chat)}, {"$set": {"chat_status": chat_status}})
|
||||
|
||||
async def total_chat_count(self):
|
||||
return await self.grp.count_documents({})
|
||||
|
|
|
|||
|
|
@ -31,9 +31,7 @@ async def add_warn(chat_id: int, name: str, warn: dict):
|
|||
warns = await get_warns(chat_id)
|
||||
warns[name] = warn
|
||||
|
||||
await warnsdb.update_one(
|
||||
{"chat_id": chat_id}, {"$set": {"warns": warns}}, upsert=True
|
||||
)
|
||||
await warnsdb.update_one({"chat_id": chat_id}, {"$set": {"warns": warns}}, upsert=True)
|
||||
|
||||
|
||||
async def remove_warns(chat_id: int, name: str) -> bool:
|
||||
|
|
|
|||
|
|
@ -49,12 +49,7 @@ async def list_admins(chat_id: int):
|
|||
|
||||
admins_in_chat[chat_id] = {
|
||||
"last_updated_at": time(),
|
||||
"data": [
|
||||
member.user.id
|
||||
async for member in app.get_chat_members(
|
||||
chat_id, filter=enums.ChatMembersFilter.ADMINISTRATORS
|
||||
)
|
||||
],
|
||||
"data": [member.user.id async for member in app.get_chat_members(chat_id, filter=enums.ChatMembersFilter.ADMINISTRATORS)],
|
||||
}
|
||||
return admins_in_chat[chat_id]["data"]
|
||||
|
||||
|
|
@ -76,11 +71,8 @@ async def authorised(func, subFunc2, client, message, *args, **kwargs):
|
|||
|
||||
|
||||
async def unauthorised(message: Message, permission, subFunc2):
|
||||
text = f"You don't have the required permission to perform this action.\n**Permission:** __{permission}__"
|
||||
chatID = message.chat.id
|
||||
text = (
|
||||
"You don't have the required permission to perform this action."
|
||||
+ f"\n**Permission:** __{permission}__"
|
||||
)
|
||||
try:
|
||||
await message.reply_text(text)
|
||||
except ChatWriteForbidden:
|
||||
|
|
|
|||
|
|
@ -113,11 +113,8 @@ def extract_text_and_keyb(ikb, text: str, row_width: int = 2):
|
|||
keyboard = {}
|
||||
try:
|
||||
text = text.strip()
|
||||
if text.startswith("`"):
|
||||
text = text[1:]
|
||||
if text.endswith("`"):
|
||||
text = text[:-1]
|
||||
|
||||
text = text.removeprefix("`")
|
||||
text = text.removesuffix("`")
|
||||
text, keyb = text.split("~")
|
||||
|
||||
keyb = findall(r"\[.+\,.+\]", keyb)
|
||||
|
|
|
|||
|
|
@ -63,15 +63,9 @@ def paginate_modules(page_n, module_dict, prefix, chat=None):
|
|||
if len(pairs) > COLUMN_SIZE:
|
||||
pairs = pairs[modulo_page * COLUMN_SIZE : COLUMN_SIZE * (modulo_page + 1)] + [
|
||||
(
|
||||
EqInlineKeyboardButton(
|
||||
"❮", callback_data=f"{prefix}_prev({modulo_page})"
|
||||
),
|
||||
EqInlineKeyboardButton(
|
||||
"Back", callback_data=f"{prefix}_home({modulo_page})"
|
||||
),
|
||||
EqInlineKeyboardButton(
|
||||
"❯", callback_data=f"{prefix}_next({modulo_page})"
|
||||
),
|
||||
EqInlineKeyboardButton("❮", callback_data=f"{prefix}_prev({modulo_page})"),
|
||||
EqInlineKeyboardButton("Back", callback_data=f"{prefix}_home({modulo_page})"),
|
||||
EqInlineKeyboardButton("❯", callback_data=f"{prefix}_next({modulo_page})"),
|
||||
)
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import string
|
|||
import psutil
|
||||
import time
|
||||
import os
|
||||
from misskaty import botStartTime, user, app, UBOT_NAME, BOT_NAME
|
||||
from misskaty import BOT_NAME, UBOT_NAME, botStartTime
|
||||
from misskaty.plugins import ALL_MODULES
|
||||
from misskaty.helper.human_read import get_readable_time
|
||||
from misskaty.helper.http import http
|
||||
|
|
|
|||
|
|
@ -19,32 +19,18 @@ def __list_all_modules():
|
|||
# This generates a list of modules in this
|
||||
# folder for the * in __main__ to work.
|
||||
mod_paths = glob.glob(f"{dirname(__file__)}/*.py")
|
||||
all_modules = [
|
||||
basename(f)[:-3]
|
||||
for f in mod_paths
|
||||
if isfile(f)
|
||||
and f.endswith(".py")
|
||||
and not f.endswith("__init__.py")
|
||||
and not f.endswith("__main__.py")
|
||||
]
|
||||
all_modules = [basename(f)[:-3] for f in mod_paths if isfile(f) and f.endswith(".py") and not f.endswith("__init__.py") and not f.endswith("__main__.py")]
|
||||
|
||||
if MOD_LOAD or MOD_NOLOAD:
|
||||
to_load = MOD_LOAD
|
||||
if to_load:
|
||||
if not all(
|
||||
any(mod == module_name for module_name in all_modules)
|
||||
for mod in to_load
|
||||
):
|
||||
if not all(any(mod == module_name for module_name in all_modules) for mod in to_load):
|
||||
sys.exit()
|
||||
|
||||
else:
|
||||
to_load = all_modules
|
||||
|
||||
return (
|
||||
[item for item in to_load if item not in MOD_NOLOAD]
|
||||
if MOD_NOLOAD
|
||||
else to_load
|
||||
)
|
||||
return [item for item in to_load if item not in MOD_NOLOAD] if MOD_NOLOAD else to_load
|
||||
|
||||
return all_modules
|
||||
|
||||
|
|
|
|||
|
|
@ -59,12 +59,7 @@ async def admin_cache_func(_, cmu):
|
|||
if cmu.old_chat_member and cmu.old_chat_member.promoted_by:
|
||||
admins_in_chat[cmu.chat.id] = {
|
||||
"last_updated_at": time(),
|
||||
"data": [
|
||||
member.user.id
|
||||
async for member in app.get_chat_members(
|
||||
cmu.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS
|
||||
)
|
||||
],
|
||||
"data": [member.user.id async for member in app.get_chat_members(cmu.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS)],
|
||||
}
|
||||
LOGGER.info(f"Updated admin cache for {cmu.chat.id} [{cmu.chat.title}]")
|
||||
|
||||
|
|
@ -146,9 +141,7 @@ async def kickFunc(_, message):
|
|||
|
||||
|
||||
# Ban/DBan/TBan User
|
||||
@app.on_message(
|
||||
filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & ~filters.private
|
||||
)
|
||||
@app.on_message(filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & ~filters.private)
|
||||
@adminsOnly("can_restrict_members")
|
||||
async def banFunc(_, message):
|
||||
user_id, reason = await extract_user_and_reason(message, sender_chat=True)
|
||||
|
|
@ -160,23 +153,14 @@ async def banFunc(_, message):
|
|||
if user_id in SUDO:
|
||||
return await message.reply_text("You Wanna Ban The Elevated One?, RECONSIDER!")
|
||||
if user_id in (await list_admins(message.chat.id)):
|
||||
return await message.reply_text(
|
||||
"I can't ban an admin, You know the rules, so do i."
|
||||
)
|
||||
return await message.reply_text("I can't ban an admin, You know the rules, so do i.")
|
||||
|
||||
try:
|
||||
mention = (await app.get_users(user_id)).mention
|
||||
except IndexError:
|
||||
mention = (
|
||||
message.reply_to_message.sender_chat.title
|
||||
if message.reply_to_message
|
||||
else "Anon"
|
||||
)
|
||||
mention = message.reply_to_message.sender_chat.title if message.reply_to_message else "Anon"
|
||||
|
||||
msg = (
|
||||
f"**Banned User:** {mention}\n"
|
||||
f"**Banned By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
|
||||
)
|
||||
msg = f"**Banned User:** {mention}\n" f"**Banned By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
|
||||
if message.command[0][0] == "d":
|
||||
await message.reply_to_message.delete()
|
||||
if message.command[0] == "tban":
|
||||
|
|
@ -221,33 +205,25 @@ async def unban_func(_, message):
|
|||
elif len(message.command) == 1 and reply:
|
||||
user = message.reply_to_message.from_user.id
|
||||
else:
|
||||
return await message.reply_text(
|
||||
"Provide a username or reply to a user's message to unban."
|
||||
)
|
||||
return await message.reply_text("Provide a username or reply to a user's message to unban.")
|
||||
await message.chat.unban_member(user)
|
||||
umention = (await app.get_users(user)).mention
|
||||
await message.reply_text(f"Unbanned! {umention}")
|
||||
|
||||
|
||||
# Ban users listed in a message
|
||||
@app.on_message(
|
||||
filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & ~filters.private
|
||||
)
|
||||
@app.on_message(filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & ~filters.private)
|
||||
async def list_ban_(c, message):
|
||||
userid, msglink_reason = await extract_user_and_reason(message)
|
||||
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")
|
||||
if len(msglink_reason.split(" ")) == 1: # message link included with the reason
|
||||
return await message.reply_text("You must provide a reason to list-ban")
|
||||
# seperate messge link from reason
|
||||
lreason = msglink_reason.split()
|
||||
messagelink, reason = lreason[0], " ".join(lreason[1:])
|
||||
|
||||
if not re.search(
|
||||
r"(https?://)?t(elegram)?\.me/\w+/\d+", messagelink
|
||||
): # validate link
|
||||
if not re.search(r"(https?://)?t(elegram)?\.me/\w+/\d+", messagelink): # validate link
|
||||
return await message.reply_text("Invalid message link provided")
|
||||
|
||||
if userid == 1507530289:
|
||||
|
|
@ -256,9 +232,7 @@ async def list_ban_(c, message):
|
|||
return await message.reply_text("You Wanna Ban The Elevated One?, RECONSIDER!")
|
||||
splitted = messagelink.split("/")
|
||||
uname, mid = splitted[-2], int(splitted[-1])
|
||||
m = await message.reply_text(
|
||||
"`Banning User from multiple groups. This may take some time`"
|
||||
)
|
||||
m = await message.reply_text("`Banning User from multiple groups. This may take some time`")
|
||||
try:
|
||||
msgtext = (await app.get_messages(uname, mid)).text
|
||||
gusernames = re.findall("@\w+", msgtext)
|
||||
|
|
@ -287,17 +261,11 @@ async def list_ban_(c, message):
|
|||
|
||||
|
||||
# Unban users listed in a message
|
||||
@app.on_message(
|
||||
filters.user(SUDO)
|
||||
& filters.command("listunban", COMMAND_HANDLER)
|
||||
& ~filters.private
|
||||
)
|
||||
@app.on_message(filters.user(SUDO) & filters.command("listunban", COMMAND_HANDLER) & ~filters.private)
|
||||
async def list_unban_(c, message):
|
||||
userid, msglink = await extract_user_and_reason(message)
|
||||
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")
|
||||
|
||||
if not re.search(r"(https?://)?t(elegram)?\.me/\w+/\d+", msglink): # validate link
|
||||
return await message.reply_text("Invalid message link provided")
|
||||
|
|
@ -344,9 +312,7 @@ async def deleteFunc(_, message):
|
|||
|
||||
|
||||
# Promote Members
|
||||
@app.on_message(
|
||||
filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & ~filters.private
|
||||
)
|
||||
@app.on_message(filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & ~filters.private)
|
||||
@adminsOnly("can_promote_members")
|
||||
async def promoteFunc(_, message):
|
||||
user_id = await extract_user(message)
|
||||
|
|
@ -450,15 +416,10 @@ async def mute(_, message):
|
|||
if user_id in SUDO:
|
||||
return await message.reply_text("You wanna mute the elevated one?, RECONSIDER!")
|
||||
if user_id in (await list_admins(message.chat.id)):
|
||||
return await message.reply_text(
|
||||
"I can't mute an admin, You know the rules, so do i."
|
||||
)
|
||||
return await message.reply_text("I can't mute an admin, You know the rules, so do i.")
|
||||
mention = (await app.get_users(user_id)).mention
|
||||
keyboard = ikb({"🚨 Unmute 🚨": f"unmute_{user_id}"})
|
||||
msg = (
|
||||
f"**Muted User:** {mention}\n"
|
||||
f"**Muted By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
|
||||
)
|
||||
msg = f"**Muted User:** {mention}\n" f"**Muted By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
|
||||
if message.command[0] == "tmute":
|
||||
split = reason.split(None, 1)
|
||||
time_value = split[0]
|
||||
|
|
@ -534,9 +495,7 @@ async def warn_user(_, message):
|
|||
if user_id in SUDO:
|
||||
return await message.reply_text("You Wanna Warn The Elevated One?, RECONSIDER!")
|
||||
if user_id in (await list_admins(chat_id)):
|
||||
return await message.reply_text(
|
||||
"I can't warn an admin, You know the rules, so do i."
|
||||
)
|
||||
return await message.reply_text("I can't warn an admin, You know the rules, so do i.")
|
||||
user, warns = await asyncio.gather(
|
||||
app.get_users(user_id),
|
||||
get_warn(chat_id, await int_to_alpha(user_id)),
|
||||
|
|
@ -569,8 +528,7 @@ async def remove_warning(_, cq):
|
|||
permission = "can_restrict_members"
|
||||
if permission not in permissions:
|
||||
return await cq.answer(
|
||||
"You don't have enough permissions to perform this action.\n"
|
||||
+ f"Permission needed: {permission}",
|
||||
"You don't have enough permissions to perform this action.\n" + f"Permission needed: {permission}",
|
||||
show_alert=True,
|
||||
)
|
||||
user_id = cq.data.split("_")[1]
|
||||
|
|
@ -595,8 +553,7 @@ async def unmute_user(_, cq):
|
|||
permission = "can_restrict_members"
|
||||
if permission not in permissions:
|
||||
return await cq.answer(
|
||||
"You don't have enough permissions to perform this action.\n"
|
||||
+ f"Permission needed: {permission}",
|
||||
"You don't have enough permissions to perform this action.\n" + f"Permission needed: {permission}",
|
||||
show_alert=True,
|
||||
)
|
||||
user_id = cq.data.split("_")[1]
|
||||
|
|
@ -615,8 +572,7 @@ async def unban_user(_, cq):
|
|||
permission = "can_restrict_members"
|
||||
if permission not in permissions:
|
||||
return await cq.answer(
|
||||
"You don't have enough permissions to perform this action.\n"
|
||||
+ f"Permission needed: {permission}",
|
||||
"You don't have enough permissions to perform this action.\n" + f"Permission needed: {permission}",
|
||||
show_alert=True,
|
||||
)
|
||||
user_id = cq.data.split("_")[1]
|
||||
|
|
@ -633,9 +589,7 @@ async def unban_user(_, cq):
|
|||
@adminsOnly("can_restrict_members")
|
||||
async def remove_warnings(_, 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
|
||||
mention = message.reply_to_message.from_user.mention
|
||||
chat_id = message.chat.id
|
||||
|
|
@ -666,13 +620,7 @@ async def check_warns(_, message):
|
|||
|
||||
|
||||
# Report User in Group
|
||||
@app.on_message(
|
||||
(
|
||||
filters.command("report", COMMAND_HANDLER)
|
||||
| filters.command(["admins", "admin"], prefixes="@")
|
||||
)
|
||||
& ~filters.private
|
||||
)
|
||||
@app.on_message((filters.command("report", COMMAND_HANDLER) | filters.command(["admins", "admin"], prefixes="@")) & ~filters.private)
|
||||
@capture_err
|
||||
async def report_user(_, message):
|
||||
if not message.reply_to_message:
|
||||
|
|
@ -687,28 +635,13 @@ async def report_user(_, message):
|
|||
linked_chat = (await app.get_chat(message.chat.id)).linked_chat
|
||||
if linked_chat is None:
|
||||
if reply_id in list_of_admins or reply_id == message.chat.id:
|
||||
return await message.reply_text(
|
||||
"Do you know that the user you are replying is an admin ?"
|
||||
)
|
||||
return await message.reply_text("Do you know that the user you are replying is an admin ?")
|
||||
|
||||
elif (
|
||||
reply_id in list_of_admins
|
||||
or reply_id == message.chat.id
|
||||
or reply_id == linked_chat.id
|
||||
):
|
||||
return await message.reply_text(
|
||||
"Do you know that the user you are replying is an admin ?"
|
||||
)
|
||||
user_mention = (
|
||||
reply.from_user.mention if reply.from_user else reply.sender_chat.title
|
||||
)
|
||||
elif reply_id in list_of_admins or reply_id == message.chat.id or reply_id == linked_chat.id:
|
||||
return await message.reply_text("Do you know that the user you are replying is an admin ?")
|
||||
user_mention = reply.from_user.mention if reply.from_user else reply.sender_chat.title
|
||||
text = f"Reported {user_mention} to admins!"
|
||||
admin_data = [
|
||||
m
|
||||
async for m in app.get_chat_members(
|
||||
message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS
|
||||
)
|
||||
]
|
||||
admin_data = [m async for m in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS)]
|
||||
for admin in admin_data:
|
||||
if admin.user.is_bot or admin.user.is_deleted:
|
||||
# return bots or deleted admins
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
#
|
||||
|
||||
# Modified plugin by me from https://github.com/TeamYukki/YukkiAFKBot to make compatible with pyrogram v2
|
||||
import time, asyncio
|
||||
import time
|
||||
from misskaty import app
|
||||
from utils import put_cleanmode
|
||||
from pyrogram import filters
|
||||
|
|
@ -18,7 +18,6 @@ from database.afk_db import (
|
|||
remove_afk,
|
||||
is_afk,
|
||||
add_afk,
|
||||
is_cleanmode_on,
|
||||
cleanmode_off,
|
||||
cleanmode_on,
|
||||
)
|
||||
|
|
@ -49,39 +48,41 @@ async def active_afk(_, message):
|
|||
data = reasondb["data"]
|
||||
reasonafk = reasondb["reason"]
|
||||
seenago = get_readable_time2((int(time.time() - timeafk)))
|
||||
if afktype == "text":
|
||||
if afktype == "animation":
|
||||
send = (
|
||||
await message.reply_animation(
|
||||
data,
|
||||
caption=f"**{message.from_user.first_name}** is back online and was away for {seenago}",
|
||||
)
|
||||
if str(reasonafk) == "None"
|
||||
else await message.reply_animation(
|
||||
data,
|
||||
caption=f"**{message.from_user.first_name}** is back online and was away for {seenago}\n\nReason: `{reasonafk}`",
|
||||
)
|
||||
)
|
||||
elif afktype == "photo":
|
||||
send = (
|
||||
await message.reply_photo(
|
||||
photo=f"downloads/{user_id}.jpg",
|
||||
caption=f"**{message.from_user.first_name}** is back online and was away for {seenago}",
|
||||
)
|
||||
if str(reasonafk) == "None"
|
||||
else await message.reply_photo(
|
||||
photo=f"downloads/{user_id}.jpg",
|
||||
caption=f"**{message.from_user.first_name}** is back online and was away for {seenago}\n\nReason: `{reasonafk}`",
|
||||
)
|
||||
)
|
||||
elif afktype == "text":
|
||||
send = await message.reply_text(
|
||||
f"**{message.from_user.first_name}** is back online and was away for {seenago}",
|
||||
disable_web_page_preview=True,
|
||||
)
|
||||
if afktype == "text_reason":
|
||||
elif afktype == "text_reason":
|
||||
send = await message.reply_text(
|
||||
f"**{message.from_user.first_name}** is back online and was away for {seenago}\n\nReason: `{reasonafk}`",
|
||||
disable_web_page_preview=True,
|
||||
)
|
||||
if afktype == "animation":
|
||||
if str(reasonafk) == "None":
|
||||
send = await message.reply_animation(
|
||||
data,
|
||||
caption=f"**{message.from_user.first_name}** is back online and was away for {seenago}",
|
||||
)
|
||||
else:
|
||||
send = await message.reply_animation(
|
||||
data,
|
||||
caption=f"**{message.from_user.first_name}** is back online and was away for {seenago}\n\nReason: `{reasonafk}`",
|
||||
)
|
||||
if afktype == "photo":
|
||||
if str(reasonafk) == "None":
|
||||
send = await message.reply_photo(
|
||||
photo=f"downloads/{user_id}.jpg",
|
||||
caption=f"**{message.from_user.first_name}** is back online and was away for {seenago}",
|
||||
)
|
||||
else:
|
||||
send = await message.reply_photo(
|
||||
photo=f"downloads/{user_id}.jpg",
|
||||
caption=f"**{message.from_user.first_name}** is back online and was away for {seenago}\n\nReason: `{reasonafk}`",
|
||||
)
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
send = await message.reply_text(
|
||||
f"**{message.from_user.first_name}** is back online",
|
||||
disable_web_page_preview=True,
|
||||
|
|
@ -146,9 +147,7 @@ async def active_afk(_, message):
|
|||
"reason": None,
|
||||
}
|
||||
else:
|
||||
await app.download_media(
|
||||
message.reply_to_message, file_name=f"{user_id}.jpg"
|
||||
)
|
||||
await app.download_media(message.reply_to_message, file_name=f"{user_id}.jpg")
|
||||
details = {
|
||||
"type": "photo",
|
||||
"time": time.time(),
|
||||
|
|
@ -165,9 +164,7 @@ async def active_afk(_, message):
|
|||
"reason": _reason,
|
||||
}
|
||||
else:
|
||||
await app.download_media(
|
||||
message.reply_to_message, file_name=f"{user_id}.jpg"
|
||||
)
|
||||
await app.download_media(message.reply_to_message, file_name=f"{user_id}.jpg")
|
||||
details = {
|
||||
"type": "photo",
|
||||
"time": time.time(),
|
||||
|
|
@ -183,9 +180,7 @@ async def active_afk(_, message):
|
|||
}
|
||||
|
||||
await add_afk(user_id, details)
|
||||
send = await message.reply_text(
|
||||
f"{message.from_user.mention} [<code>{message.from_user.id}</code>] is now AFK!."
|
||||
)
|
||||
send = await message.reply_text(f"{message.from_user.mention} [<code>{message.from_user.id}</code>] is now AFK!.")
|
||||
await put_cleanmode(message.chat.id, send.id)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -19,12 +19,8 @@ async def approve_join_chat(c, m):
|
|||
markup = InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="Sudah", callback_data=f"approve_{m.chat.id}"
|
||||
),
|
||||
InlineKeyboardButton(
|
||||
text="Belum", callback_data=f"declined_{m.chat.id}"
|
||||
),
|
||||
InlineKeyboardButton(text="Sudah", callback_data=f"approve_{m.chat.id}"),
|
||||
InlineKeyboardButton(text="Belum", callback_data=f"declined_{m.chat.id}"),
|
||||
]
|
||||
]
|
||||
)
|
||||
|
|
@ -42,14 +38,10 @@ async def approve_join_chat(c, m):
|
|||
async def approve_chat(c, q):
|
||||
i, chat = q.data.split("_")
|
||||
try:
|
||||
await q.message.edit(
|
||||
"Yeayy, selamat kamu bisa bergabung di Channel YMovieZ Reborn..."
|
||||
)
|
||||
await q.message.edit("Yeayy, selamat kamu bisa bergabung di Channel YMovieZ Reborn...")
|
||||
await c.approve_chat_join_request(chat, q.from_user.id)
|
||||
except UserAlreadyParticipant:
|
||||
await q.message.edit(
|
||||
"Kamu sudah di acc join grup, jadi ga perlu menekan button."
|
||||
)
|
||||
await q.message.edit("Kamu sudah di acc join grup, jadi ga perlu menekan button.")
|
||||
except Exception as err:
|
||||
await q.message.edit(err)
|
||||
|
||||
|
|
@ -58,13 +50,9 @@ async def approve_chat(c, q):
|
|||
async def decline_chat(c, q):
|
||||
i, chat = q.data.split("_")
|
||||
try:
|
||||
await q.message.edit(
|
||||
"Yahh, kamu ditolak join channel. Biasakan rajin membaca yahhh.."
|
||||
)
|
||||
await q.message.edit("Yahh, kamu ditolak join channel. Biasakan rajin membaca yahhh..")
|
||||
await c.decline_chat_join_request(chat, q.from_user.id)
|
||||
except UserAlreadyParticipant:
|
||||
await q.message.edit(
|
||||
"Kamu sudah di acc join grup, jadi ga perlu menekan button."
|
||||
)
|
||||
await q.message.edit("Kamu sudah di acc join grup, jadi ga perlu menekan button.")
|
||||
except Exception as err:
|
||||
await q.message.edit(err)
|
||||
|
|
|
|||
|
|
@ -18,9 +18,7 @@ LOGGER = getLogger(__name__)
|
|||
|
||||
|
||||
async def FilterMessage(message: Message):
|
||||
if (message.forward_from or message.forward_from_chat) and (
|
||||
"forwarded" not in FORWARD_FILTERS
|
||||
):
|
||||
if (message.forward_from or message.forward_from_chat) and ("forwarded" not in FORWARD_FILTERS):
|
||||
return 400
|
||||
if (len(FORWARD_FILTERS) == 9) or (
|
||||
(message.video and ("video" in FORWARD_FILTERS))
|
||||
|
|
@ -44,10 +42,7 @@ async def CheckBlockedExt(event: Message):
|
|||
if (media is not None) and (media.file_name is not None):
|
||||
_file = media.file_name.rsplit(".", 1)
|
||||
if len(_file) == 2:
|
||||
return (
|
||||
_file[-1].lower() in BLOCKED_EXTENSIONS
|
||||
or _file[-1].upper() in BLOCKED_EXTENSIONS
|
||||
)
|
||||
return _file[-1].lower() in BLOCKED_EXTENSIONS or _file[-1].upper() in BLOCKED_EXTENSIONS
|
||||
|
||||
else:
|
||||
return False
|
||||
|
|
@ -81,9 +76,7 @@ async def ForwardMessage(client: user, msg: Message):
|
|||
LOGGER.warning(f"#FloodWait: Stopped Forwarder for {e.x}s!")
|
||||
await ForwardMessage(client, msg)
|
||||
except Exception as err:
|
||||
LOGGER.warning(
|
||||
f"#ERROR: {err}\n\nUnable to Forward Message to {str(FORWARD_TO_CHAT_ID[i])}, reason: <code>{err}</code>"
|
||||
)
|
||||
LOGGER.warning(f"#ERROR: {err}\n\nUnable to Forward Message to {str(FORWARD_TO_CHAT_ID[i])}, reason: <code>{err}</code>")
|
||||
except Exception as err:
|
||||
LOGGER.warning(f"#ERROR: {err}")
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,7 @@ from misskaty import app
|
|||
|
||||
|
||||
async def banned_users(_, client, message: Message):
|
||||
return (
|
||||
message.from_user is not None or not message.sender_chat
|
||||
) and message.from_user.id in temp.BANNED_USERS
|
||||
return (message.from_user is not None or not message.sender_chat) and message.from_user.id in temp.BANNED_USERS
|
||||
|
||||
|
||||
banned_user = filters.create(banned_users)
|
||||
|
|
@ -26,9 +24,7 @@ disabled_group = filters.create(disabled_chat)
|
|||
@app.on_message(filters.private & banned_user & filters.incoming)
|
||||
async def ban_reply(bot, message):
|
||||
ban = await db.get_ban_status(message.from_user.id)
|
||||
await message.reply(
|
||||
f'Sorry Dude, You are Banned to use Me. \nBan Reason: {ban["ban_reason"]}'
|
||||
)
|
||||
await message.reply(f'Sorry Dude, You are Banned to use Me. \nBan Reason: {ban["ban_reason"]}')
|
||||
|
||||
|
||||
@app.on_message(filters.group & disabled_group & filters.incoming)
|
||||
|
|
|
|||
|
|
@ -35,10 +35,6 @@ async def broadcast(bot, message):
|
|||
done += 1
|
||||
await asyncio.sleep(2)
|
||||
if not done % 20:
|
||||
await sts.edit(
|
||||
f"Broadcast in progress:\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}"
|
||||
)
|
||||
await sts.edit(f"Broadcast in progress:\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}")
|
||||
time_taken = datetime.timedelta(seconds=int(time.time() - start_time))
|
||||
await sts.edit(
|
||||
f"Broadcast Completed:\nCompleted in {time_taken} seconds.\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}"
|
||||
)
|
||||
await sts.edit(f"Broadcast Completed:\nCompleted in {time_taken} seconds.\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}")
|
||||
|
|
|
|||
|
|
@ -42,10 +42,7 @@ async def pling_bypass(url):
|
|||
res = await http.get(link)
|
||||
json_dic_files = res.json().pop("files")
|
||||
msg = f"\n**Source Link** :\n`{url}`\n**Direct Link :**\n"
|
||||
msg += "\n".join(
|
||||
f'**→ [{i["name"]}]({unquote(i["url"])}) ({get_readable_file_size(int(i["size"]))})**'
|
||||
for i in json_dic_files
|
||||
)
|
||||
msg += "\n".join(f'**→ [{i["name"]}]({unquote(i["url"])}) ({get_readable_file_size(int(i["size"]))})**' for i in json_dic_files)
|
||||
return msg
|
||||
except Exception as e:
|
||||
return e
|
||||
|
|
@ -78,9 +75,7 @@ def wetransfer_bypass(url: str) -> str:
|
|||
r = s.get("https://wetransfer.com/")
|
||||
m = re.search('name="csrf-token" content="([^"]+)"', r.text)
|
||||
s.headers.update({"x-csrf-token": m[1], "x-requested-with": "XMLHttpRequest"})
|
||||
r = s.post(
|
||||
f"https://wetransfer.com/api/v4/transfers/{transfer_id}/download", json=j
|
||||
)
|
||||
r = s.post(f"https://wetransfer.com/api/v4/transfers/{transfer_id}/download", json=j)
|
||||
j = r.json()
|
||||
dl_url = j["direct_link"]
|
||||
|
||||
|
|
@ -91,11 +86,9 @@ def wetransfer_bypass(url: str) -> str:
|
|||
@capture_err
|
||||
async def bypass(_, message):
|
||||
if len(message.command) == 1:
|
||||
return await message.reply(
|
||||
f"Gunakan perintah /{message.command[0]} untuk bypass url"
|
||||
)
|
||||
return await message.reply(f"Gunakan perintah /{message.command[0]} untuk bypass url")
|
||||
url = message.command[1]
|
||||
host = urllib.parse.urlparse(url).netloc
|
||||
urllib.parse.urlparse(url).netloc
|
||||
msg = await message.reply("Bypassing URL..", quote=True)
|
||||
mention = f"**Bypasser:** {message.from_user.mention} ({message.from_user.id})"
|
||||
if re.match(r"https?://(store.kde.org|www.pling.com)\/p\/(\d+)", url):
|
||||
|
|
@ -117,8 +110,6 @@ async def bypass(_, message):
|
|||
reply_markup=markup,
|
||||
disable_web_page_preview=True,
|
||||
)
|
||||
elif "we.tl" or "wetransfer.com" in host:
|
||||
else:
|
||||
data = wetransfer_bypass(url)
|
||||
await msg.edit(f"{data}\n\n{mention}")
|
||||
else:
|
||||
await msg.edit("Unsupported link..")
|
||||
|
|
|
|||
|
|
@ -7,9 +7,7 @@ from misskaty.helper.http import http
|
|||
@app.on_message(filters.command("ask", COMMAND_HANDLER))
|
||||
async def chatbot(c, m):
|
||||
if len(m.command) == 1:
|
||||
return await m.reply(
|
||||
f"Gunakan perintah <code>/{m.command[0]} [pertanyaan]</code> untuk menanyakan pertanyaan menggunakan AI."
|
||||
)
|
||||
return await m.reply(f"Gunakan perintah <code>/{m.command[0]} [pertanyaan]</code> untuk menanyakan pertanyaan menggunakan AI.")
|
||||
pertanyaan = m.text.split(" ", maxsplit=1)[1]
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
|
|
@ -24,11 +22,7 @@ async def chatbot(c, m):
|
|||
}
|
||||
msg = await m.reply("Wait a moment looking for your answer..")
|
||||
try:
|
||||
response = (
|
||||
await http.post(
|
||||
"https://api.openai.com/v1/completions", headers=headers, json=json_data
|
||||
)
|
||||
).json()
|
||||
response = (await http.post("https://api.openai.com/v1/completions", headers=headers, json=json_data)).json()
|
||||
await msg.edit(response["choices"][0]["text"])
|
||||
except:
|
||||
await msg.edit("Yahh, sorry i can't get your answer.")
|
||||
|
|
|
|||
|
|
@ -66,9 +66,7 @@ async def glot(lang, langcode, code):
|
|||
"content-type": "application/json",
|
||||
"Authorization": "Token b8a2b75a-a078-4089-869c-e53d448b1ebb",
|
||||
}
|
||||
r = await session.post(
|
||||
f"https://glot.io/api/run/{lang}/latest", headers=headers, json=data
|
||||
)
|
||||
r = await session.post(f"https://glot.io/api/run/{lang}/latest", headers=headers, json=data)
|
||||
return await r.json()
|
||||
|
||||
|
||||
|
|
@ -76,9 +74,7 @@ async def glot(lang, langcode, code):
|
|||
async def list_lang(client, message):
|
||||
daftarlang = await listcode()
|
||||
list_ = "".join(f"~> {i['name']}\n" for i in daftarlang)
|
||||
return await message.reply(
|
||||
f"<b>List of Supported Programming Languages:</b>\n{list_}"
|
||||
)
|
||||
return await message.reply(f"<b>List of Supported Programming Languages:</b>\n{list_}")
|
||||
|
||||
|
||||
@app.on_message(filters.command(["assembly"], "!"))
|
||||
|
|
|
|||
|
|
@ -192,9 +192,7 @@ async def chat_watcher_func(_, message):
|
|||
reasonafk = reasondb["reason"]
|
||||
seenago = get_readable_time2((int(time.time() - timeafk)))
|
||||
if afktype == "text":
|
||||
msg += (
|
||||
f"**{first_name[:25]}** is AFK since {seenago} ago.\n\n"
|
||||
)
|
||||
msg += f"**{first_name[:25]}** is AFK since {seenago} ago.\n\n"
|
||||
if afktype == "text_reason":
|
||||
msg += f"**{first_name[:25]}** is AFK since {seenago} ago.\n\n**Reason:** {reasonafk}\n\n"
|
||||
if afktype == "animation":
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import asyncio
|
|||
from pyrogram import filters, enums
|
||||
from misskaty import app
|
||||
from misskaty.vars import COMMAND_HANDLER, SUDO
|
||||
from misskaty.core.custom_filter import edited
|
||||
|
||||
__MODULE__ = "DevCommand"
|
||||
__HELP__ = """
|
||||
|
|
@ -37,9 +36,7 @@ async def donate(_, message):
|
|||
)
|
||||
|
||||
|
||||
@app.on_message(
|
||||
filters.command(["balas"], COMMAND_HANDLER) & filters.user(SUDO) & filters.reply
|
||||
)
|
||||
@app.on_message(filters.command(["balas"], COMMAND_HANDLER) & filters.user(SUDO) & filters.reply)
|
||||
async def balas(c, m):
|
||||
pesan = m.text.split(" ", 1)
|
||||
await m.delete()
|
||||
|
|
@ -53,9 +50,7 @@ async def neofetch(c, m):
|
|||
|
||||
|
||||
@app.on_message(filters.command(["shell", "sh"], COMMAND_HANDLER) & filters.user(SUDO))
|
||||
@app.on_edited_message(
|
||||
filters.command(["shell", "sh"], COMMAND_HANDLER) & filters.user(SUDO)
|
||||
)
|
||||
@app.on_edited_message(filters.command(["shell", "sh"], COMMAND_HANDLER) & filters.user(SUDO))
|
||||
async def shell(client, message):
|
||||
cmd = message.text.split(" ", 1)
|
||||
if len(cmd) == 1:
|
||||
|
|
@ -127,17 +122,12 @@ async def evaluation_cmd_t(client, message):
|
|||
|
||||
|
||||
async def aexec(code, client, message):
|
||||
exec(
|
||||
"async def __aexec(client, message): "
|
||||
+ "".join(f"\n {l_}" for l_ in code.split("\n"))
|
||||
)
|
||||
exec("async def __aexec(client, message): " + "".join(f"\n {l_}" for l_ in code.split("\n")))
|
||||
return await locals()["__aexec"](client, message)
|
||||
|
||||
|
||||
async def shell_exec(code, treat=True):
|
||||
process = await asyncio.create_subprocess_shell(
|
||||
code, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT
|
||||
)
|
||||
process = await asyncio.create_subprocess_shell(code, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT)
|
||||
|
||||
stdout = (await process.communicate())[0]
|
||||
if treat:
|
||||
|
|
|
|||
|
|
@ -2,11 +2,8 @@ import time
|
|||
import asyncio
|
||||
import math
|
||||
import os
|
||||
import aiohttp
|
||||
import json
|
||||
from misskaty.helper.http import http
|
||||
from logging import getLogger
|
||||
from bs4 import BeautifulSoup
|
||||
from misskaty import app
|
||||
from pySmartDL import SmartDL
|
||||
from datetime import datetime
|
||||
|
|
@ -54,15 +51,7 @@ async def upload(bot, message):
|
|||
text = callapi.json()
|
||||
output = f'<u>File Uploaded to Anonfile</u>\n\n📂 File Name: {text["data"]["file"]["metadata"]["name"]}\n\n📦 File Size: {text["data"]["file"]["metadata"]["size"]["readable"]}\n\n📥 Download Link: {text["data"]["file"]["url"]["full"]}'
|
||||
|
||||
btn = InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"📥 Download 📥", url=f"{text['data']['file']['url']['full']}"
|
||||
)
|
||||
]
|
||||
]
|
||||
)
|
||||
btn = InlineKeyboardMarkup([[InlineKeyboardButton("📥 Download 📥", url=f"{text['data']['file']['url']['full']}")]])
|
||||
await m.edit(output, reply_markup=btn)
|
||||
except Exception as e:
|
||||
await bot.send_message(message.chat.id, text=f"Something Went Wrong!\n\n{e}")
|
||||
|
|
@ -83,9 +72,7 @@ async def download(client, message):
|
|||
)
|
||||
end_t = datetime.now()
|
||||
ms = (end_t - start_t).seconds
|
||||
await pesan.edit(
|
||||
f"Downloaded to <code>{the_real_download_location}</code> in <u>{ms}</u> seconds."
|
||||
)
|
||||
await pesan.edit(f"Downloaded to <code>{the_real_download_location}</code> in <u>{ms}</u> seconds.")
|
||||
elif len(message.command) > 1:
|
||||
start_t = datetime.now()
|
||||
the_url_parts = " ".join(message.command[1:])
|
||||
|
|
@ -121,14 +108,10 @@ async def download(client, message):
|
|||
current_message += f"File Name: <code>{custom_file_name}</code>\n"
|
||||
current_message += f"Speed: {speed}\n"
|
||||
current_message += f"{progress_str}\n"
|
||||
current_message += (
|
||||
f"{humanbytes(downloaded)} of {humanbytes(total_length)}\n"
|
||||
)
|
||||
current_message += f"{humanbytes(downloaded)} of {humanbytes(total_length)}\n"
|
||||
current_message += f"ETA: {estimated_total_time}"
|
||||
if round(diff % 10.00) == 0 and current_message != display_message:
|
||||
await pesan.edit(
|
||||
disable_web_page_preview=True, text=current_message
|
||||
)
|
||||
await pesan.edit(disable_web_page_preview=True, text=current_message)
|
||||
display_message = current_message
|
||||
await asyncio.sleep(10)
|
||||
except Exception as e:
|
||||
|
|
@ -136,22 +119,16 @@ async def download(client, message):
|
|||
if os.path.exists(download_file_path):
|
||||
end_t = datetime.now()
|
||||
ms = (end_t - start_t).seconds
|
||||
await pesan.edit(
|
||||
f"Downloaded to <code>{download_file_path}</code> in {ms} seconds"
|
||||
)
|
||||
await pesan.edit(f"Downloaded to <code>{download_file_path}</code> in {ms} seconds")
|
||||
else:
|
||||
await pesan.edit(
|
||||
"Reply to a Telegram Media, to download it to my local server."
|
||||
)
|
||||
await pesan.edit("Reply to a Telegram Media, to download it to my local server.")
|
||||
|
||||
|
||||
@app.on_message(filters.command(["tiktokdl"], COMMAND_HANDLER))
|
||||
@capture_err
|
||||
async def tiktokdl(client, message):
|
||||
if len(message.command) == 1:
|
||||
return await message.reply(
|
||||
f"Use command /{message.command[0]} [link] to download tiktok video."
|
||||
)
|
||||
return await message.reply(f"Use command /{message.command[0]} [link] to download tiktok video.")
|
||||
link = message.command[1]
|
||||
msg = await message.reply("Trying download...")
|
||||
try:
|
||||
|
|
@ -170,9 +147,7 @@ async def tiktokdl(client, message):
|
|||
@capture_err
|
||||
async def fbdl(client, message):
|
||||
if len(message.command) == 1:
|
||||
return await message.reply(
|
||||
f"Use command /{message.command[0]} [link] to download Facebook video."
|
||||
)
|
||||
return await message.reply(f"Use command /{message.command[0]} [link] to download Facebook video.")
|
||||
link = message.command[1]
|
||||
msg = await message.reply("Trying download...")
|
||||
try:
|
||||
|
|
@ -194,7 +169,5 @@ async def fbdl(client, message):
|
|||
except:
|
||||
pass
|
||||
except Exception as e:
|
||||
await message.reply(
|
||||
f"Failed to download Facebook video..\n\n<b>Reason:</b> {e}"
|
||||
)
|
||||
await message.reply(f"Failed to download Facebook video..\n\n<b>Reason:</b> {e}")
|
||||
await msg.delete()
|
||||
|
|
|
|||
|
|
@ -17,28 +17,17 @@ async def start(_, message):
|
|||
await message.reply_text(text=f"Wa'alaikumsalam {message.from_user.mention} 😇")
|
||||
|
||||
|
||||
@app.on_message(
|
||||
filters.regex(r"#request|#req", re.I)
|
||||
& (filters.text | filters.photo)
|
||||
& filters.chat(-1001255283935)
|
||||
& ~filters.channel
|
||||
)
|
||||
@app.on_message(filters.regex(r"#request|#req", re.I) & (filters.text | filters.photo) & filters.chat(-1001255283935) & ~filters.channel)
|
||||
@capture_err
|
||||
async def request_user(client, message):
|
||||
if message.sender_chat:
|
||||
return await message.reply(
|
||||
f"{message.from_user.mention} mohon gunakan akun asli saat request."
|
||||
)
|
||||
return await message.reply(f"{message.from_user.mention} mohon gunakan akun asli saat request.")
|
||||
is_in_gap, sleep_time = await check_time_gap(message.from_user.id)
|
||||
if is_in_gap:
|
||||
return await message.reply("Sabar dikit napa.. 🙄")
|
||||
markup = InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="💬 Lihat Pesan", url=f"https://t.me/c/1255283935/{message.id}"
|
||||
)
|
||||
],
|
||||
[InlineKeyboardButton(text="💬 Lihat Pesan", url=f"https://t.me/c/1255283935/{message.id}")],
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="🚫 Tolak",
|
||||
|
|
@ -70,9 +59,7 @@ async def request_user(client, message):
|
|||
else:
|
||||
REQUEST_DB[user_id] = 1
|
||||
if REQUEST_DB[user_id] > 3:
|
||||
return await message.reply(
|
||||
f"Mohon maaf {message.from_user.mention}, maksimal request hanya 3x perhari. Kalo mau tambah 5k per request 😝😝."
|
||||
)
|
||||
return await message.reply(f"Mohon maaf {message.from_user.mention}, maksimal request hanya 3x perhari. Kalo mau tambah 5k per request 😝😝.")
|
||||
if message.text:
|
||||
forward = await client.send_message(
|
||||
-1001575525902,
|
||||
|
|
@ -153,36 +140,18 @@ async def _callbackreq(c, q):
|
|||
if q.message.caption:
|
||||
await q.message.edit_text(
|
||||
f"<b>COMPLETED</b>\n\n<s>{q.message.caption}</s>",
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="✅ Request Completed", callback_data="reqcompl"
|
||||
)
|
||||
]
|
||||
]
|
||||
),
|
||||
reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="✅ Request Completed", callback_data="reqcompl")]]),
|
||||
)
|
||||
else:
|
||||
await q.message.edit_text(
|
||||
f"<b>COMPLETED</b>\n\n<s>{q.message.text}</s>",
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="✅ Request Completed", callback_data="reqcompl"
|
||||
)
|
||||
]
|
||||
]
|
||||
),
|
||||
reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="✅ Request Completed", callback_data="reqcompl")]]),
|
||||
)
|
||||
await q.answer("Request berhasil diselesaikan ✅")
|
||||
else:
|
||||
await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True)
|
||||
except UserNotParticipant:
|
||||
return await q.answer(
|
||||
"Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10
|
||||
)
|
||||
return await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10)
|
||||
except PeerIdInvalid:
|
||||
return await q.answer(
|
||||
"Silahkan kirim pesan digrup supaya bot bisa merespon.",
|
||||
|
|
@ -238,9 +207,7 @@ async def _callbackreqada(c, q):
|
|||
else:
|
||||
await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True)
|
||||
except UserNotParticipant:
|
||||
return await q.answer(
|
||||
"Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10
|
||||
)
|
||||
return await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10)
|
||||
except PeerIdInvalid:
|
||||
return await q.answer(
|
||||
"Silahkan kirim pesan digrup supaya bot bisa merespon.",
|
||||
|
|
@ -267,36 +234,18 @@ async def _callbackreject(c, q):
|
|||
if q.message.caption:
|
||||
await q.message.edit_text(
|
||||
f"<b>REJECTED</b>\n\n<s>{q.message.caption}</s>",
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="🚫 Request Rejected", callback_data="reqreject"
|
||||
)
|
||||
]
|
||||
]
|
||||
),
|
||||
reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="🚫 Request Rejected", callback_data="reqreject")]]),
|
||||
)
|
||||
else:
|
||||
await q.message.edit_text(
|
||||
f"<b>REJECTED</b>\n\n<s>{q.message.text}</s>",
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text="🚫 Request Rejected", callback_data="reqreject"
|
||||
)
|
||||
]
|
||||
]
|
||||
),
|
||||
reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="🚫 Request Rejected", callback_data="reqreject")]]),
|
||||
)
|
||||
await q.answer("Request berhasil ditolak 🚫")
|
||||
else:
|
||||
await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True)
|
||||
except UserNotParticipant:
|
||||
await q.answer(
|
||||
"Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10
|
||||
)
|
||||
await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10)
|
||||
except PeerIdInvalid:
|
||||
return await q.answer(
|
||||
"Silahkan kirim pesan digrup supaya bot bisa merespon.",
|
||||
|
|
@ -348,9 +297,7 @@ async def _callbackunav(c, q):
|
|||
]
|
||||
),
|
||||
)
|
||||
await q.answer(
|
||||
"Request tidak tersedia, mungkin belum rilis atau memang tidak tersedia versi digital."
|
||||
)
|
||||
await q.answer("Request tidak tersedia, mungkin belum rilis atau memang tidak tersedia versi digital.")
|
||||
else:
|
||||
await q.answer(
|
||||
"Apa motivasi kamu menekan tombol ini?",
|
||||
|
|
@ -358,9 +305,7 @@ async def _callbackunav(c, q):
|
|||
cache_time=1000,
|
||||
)
|
||||
except UserNotParticipant:
|
||||
await q.answer(
|
||||
"Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10
|
||||
)
|
||||
await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10)
|
||||
except PeerIdInvalid:
|
||||
return await q.answer(
|
||||
"Silahkan kirim pesan digrup supaya bot bisa merespon.",
|
||||
|
|
@ -398,9 +343,7 @@ async def _callbackaft_unav(c, q):
|
|||
|
||||
@app.on_callback_query(filters.regex(r"^reqavailable$"))
|
||||
async def _callbackaft_dahada(c, q):
|
||||
await q.answer(
|
||||
"Request ini sudah ada, silahkan cari 🔍 di channelnya yaa 😉..", show_alert=True
|
||||
)
|
||||
await q.answer("Request ini sudah ada, silahkan cari 🔍 di channelnya yaa 😉..", show_alert=True)
|
||||
|
||||
|
||||
scheduler = AsyncIOScheduler(timezone="Asia/Jakarta")
|
||||
|
|
|
|||
|
|
@ -48,13 +48,9 @@ You can use markdown or html to save text too.
|
|||
@adminsOnly("can_change_info")
|
||||
async def save_filters(_, message):
|
||||
if len(message.command) == 1 or not message.reply_to_message:
|
||||
return await message.reply_text(
|
||||
"**Usage:**\nReply to a text or sticker with /filter [FILTER_NAME] to save it."
|
||||
)
|
||||
return await message.reply_text("**Usage:**\nReply to a text or sticker with /filter [FILTER_NAME] to save it.")
|
||||
if not message.reply_to_message.text and not message.reply_to_message.sticker:
|
||||
return await message.reply_text(
|
||||
"__**You can only save text or stickers in filters for now.**__"
|
||||
)
|
||||
return await message.reply_text("__**You can only save text or stickers in filters for now.**__")
|
||||
name = message.text.split(None, 1)[1].strip()
|
||||
if not name:
|
||||
return await message.reply_text("**Usage:**\n__/filter [FILTER_NAME]__")
|
||||
|
|
@ -62,9 +58,7 @@ async def save_filters(_, message):
|
|||
_type = "text" if message.reply_to_message.text else "sticker"
|
||||
_filter = {
|
||||
"type": _type,
|
||||
"data": message.reply_to_message.text.markdown
|
||||
if _type == "text"
|
||||
else message.reply_to_message.sticker.file_id,
|
||||
"data": message.reply_to_message.text.markdown if _type == "text" else message.reply_to_message.sticker.file_id,
|
||||
}
|
||||
await save_filter(chat_id, name, _filter)
|
||||
await message.reply(f"__**Saved filter {name}.**__")
|
||||
|
|
@ -119,8 +113,7 @@ async def filters_re(_, message):
|
|||
if data_type == "text":
|
||||
keyb = None
|
||||
if re.findall(r"\[.+\,.+\]", data):
|
||||
keyboard = extract_text_and_keyb(ikb, data)
|
||||
if keyboard:
|
||||
if keyboard := extract_text_and_keyb(ikb, data):
|
||||
data, keyb = keyboard
|
||||
|
||||
if message.reply_to_message:
|
||||
|
|
|
|||
|
|
@ -50,16 +50,12 @@ async def genss(client, message):
|
|||
chat_id=message.chat.id,
|
||||
message_id=process.id,
|
||||
)
|
||||
await client.send_chat_action(
|
||||
chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO
|
||||
)
|
||||
await client.send_chat_action(chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO)
|
||||
|
||||
try:
|
||||
await gather(
|
||||
*[
|
||||
message.reply_document(
|
||||
images, reply_to_message_id=message.id
|
||||
),
|
||||
message.reply_document(images, reply_to_message_id=message.id),
|
||||
message.reply_photo(images, reply_to_message_id=message.id),
|
||||
]
|
||||
)
|
||||
|
|
@ -67,9 +63,7 @@ async def genss(client, message):
|
|||
await sleep(e.value)
|
||||
await gather(
|
||||
*[
|
||||
message.reply_document(
|
||||
images, reply_to_message_id=message.id
|
||||
),
|
||||
message.reply_document(images, reply_to_message_id=message.id),
|
||||
message.reply_photo(images, reply_to_message_id=message.id),
|
||||
]
|
||||
)
|
||||
|
|
@ -100,13 +94,9 @@ async def genss_link(client, message):
|
|||
try:
|
||||
link = message.text.split(" ")[1]
|
||||
if link.startswith("https://file.yasirweb.my.id"):
|
||||
link = link.replace(
|
||||
"https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev"
|
||||
)
|
||||
link = link.replace("https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev")
|
||||
if link.startswith("https://link.yasirweb.my.id"):
|
||||
link = link.replace(
|
||||
"https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com"
|
||||
)
|
||||
link = link.replace("https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com")
|
||||
process = await message.reply_text("`Processing, please wait..`")
|
||||
tmp_directory_for_each_user = f"./MissKaty_Genss/{str(message.from_user.id)}"
|
||||
if not os.path.isdir(tmp_directory_for_each_user):
|
||||
|
|
@ -118,9 +108,7 @@ async def genss_link(client, message):
|
|||
chat_id=message.chat.id,
|
||||
message_id=process.id,
|
||||
)
|
||||
await client.send_chat_action(
|
||||
chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO
|
||||
)
|
||||
await client.send_chat_action(chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO)
|
||||
try:
|
||||
await message.reply_media_group(images, reply_to_message_id=message.id)
|
||||
except FloodWait as e:
|
||||
|
|
|
|||
|
|
@ -45,9 +45,7 @@ def draw_multiple_line_text(image, text, font, text_start_height):
|
|||
lines = textwrap.wrap(text, width=50)
|
||||
for line in lines:
|
||||
line_width, line_height = font.getsize(line)
|
||||
draw.text(
|
||||
((image_width - line_width) / 2, y_text), line, font=font, fill="black"
|
||||
)
|
||||
draw.text(((image_width - line_width) / 2, y_text), line, font=font, fill="black")
|
||||
y_text += line_height
|
||||
|
||||
|
||||
|
|
@ -57,12 +55,8 @@ def welcomepic(pic, user, chat, count, id):
|
|||
background = background.resize((1024, 500), Image.ANTIALIAS)
|
||||
pfp = Image.open(pic).convert("RGBA")
|
||||
pfp = circle(pfp)
|
||||
pfp = pfp.resize(
|
||||
(265, 265)
|
||||
) # Resizes the Profilepicture so it fits perfectly in the circle
|
||||
font = ImageFont.truetype(
|
||||
"Calistoga-Regular.ttf", 37
|
||||
) # <- Text Font of the Member Count. Change the text size for your preference
|
||||
pfp = pfp.resize((265, 265)) # Resizes the Profilepicture so it fits perfectly in the circle
|
||||
font = ImageFont.truetype("Calistoga-Regular.ttf", 37) # <- Text Font of the Member Count. Change the text size for your preference
|
||||
member_text = f"User#{count}, Selamat Datang {user}" # <- Text under the Profilepicture with the Membercount
|
||||
draw_multiple_line_text(background, member_text, font, 395)
|
||||
draw_multiple_line_text(background, chat, font, 47)
|
||||
|
|
@ -73,22 +67,14 @@ def welcomepic(pic, user, chat, count, id):
|
|||
size=20,
|
||||
align="right",
|
||||
)
|
||||
background.paste(
|
||||
pfp, (379, 123), pfp
|
||||
) # Pastes the Profilepicture on the Background Image
|
||||
background.save(
|
||||
f"downloads/welcome#{id}.png"
|
||||
) # Saves the finished Image in the folder with the filename
|
||||
background.paste(pfp, (379, 123), pfp) # Pastes the Profilepicture on the Background Image
|
||||
background.save(f"downloads/welcome#{id}.png") # Saves the finished Image in the folder with the filename
|
||||
return f"downloads/welcome#{id}.png"
|
||||
|
||||
|
||||
@app.on_chat_member_updated(filters.group & filters.chat(-1001128045651))
|
||||
async def member_has_joined(c: app, member: ChatMemberUpdated):
|
||||
if (
|
||||
not member.new_chat_member
|
||||
or member.new_chat_member.status in {"banned", "left", "restricted"}
|
||||
or member.old_chat_member
|
||||
):
|
||||
if not member.new_chat_member or member.new_chat_member.status in {"banned", "left", "restricted"} or member.old_chat_member:
|
||||
return
|
||||
user = member.new_chat_member.user if member.new_chat_member else member.from_user
|
||||
if user.id in SUDO:
|
||||
|
|
@ -107,21 +93,15 @@ async def member_has_joined(c: app, member: ChatMemberUpdated):
|
|||
pass
|
||||
mention = f"<a href='tg://user?id={user.id}'>{user.first_name}</a>"
|
||||
joined_date = datetime.fromtimestamp(time.time()).strftime("%Y.%m.%d %H:%M:%S")
|
||||
first_name = (
|
||||
f"{user.first_name} {user.last_name}" if user.last_name else user.first_name
|
||||
)
|
||||
first_name = f"{user.first_name} {user.last_name}" if user.last_name else user.first_name
|
||||
id = user.id
|
||||
dc = user.dc_id or "Member tanpa PP"
|
||||
count = await app.get_chat_members_count(member.chat.id)
|
||||
try:
|
||||
pic = await app.download_media(
|
||||
user.photo.big_file_id, file_name=f"pp{user.id}.png"
|
||||
)
|
||||
pic = await app.download_media(user.photo.big_file_id, file_name=f"pp{user.id}.png")
|
||||
except AttributeError:
|
||||
pic = "img/profilepic.png"
|
||||
welcomeimg = await welcomepic(
|
||||
pic, user.first_name, member.chat.title, count, user.id
|
||||
)
|
||||
welcomeimg = await welcomepic(pic, user.first_name, member.chat.title, count, user.id)
|
||||
temp.MELCOW[f"welcome-{member.chat.id}"] = await c.send_photo(
|
||||
member.chat.id,
|
||||
photo=welcomeimg,
|
||||
|
|
@ -130,30 +110,18 @@ async def member_has_joined(c: app, member: ChatMemberUpdated):
|
|||
userspammer = ""
|
||||
# Spamwatch Detection
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": "Bearer XvfzE4AUNXkzCy0DnIVpFDlxZi79lt6EnwKgBj8Quuzms0OSdHvf1k6zSeyzZ_lz"
|
||||
}
|
||||
apispamwatch = (
|
||||
await http.get(
|
||||
f"https://api.spamwat.ch/banlist/{user.id}", headers=headers
|
||||
)
|
||||
).json()
|
||||
headers = {"Authorization": "Bearer XvfzE4AUNXkzCy0DnIVpFDlxZi79lt6EnwKgBj8Quuzms0OSdHvf1k6zSeyzZ_lz"}
|
||||
apispamwatch = (await http.get(f"https://api.spamwat.ch/banlist/{user.id}", headers=headers)).json()
|
||||
if not apispamwatch.get("error"):
|
||||
await app.ban_chat_member(
|
||||
member.chat.id, user.id, datetime.now() + timedelta(seconds=30)
|
||||
)
|
||||
await app.ban_chat_member(member.chat.id, user.id, datetime.now() + timedelta(seconds=30))
|
||||
userspammer += f"<b>#SpamWatch Federation Ban</b>\nUser {mention} [<code>{user.id}</code>] has been kicked because <code>{apispamwatch.get('reason')}</code>.\n"
|
||||
except Exception as err:
|
||||
LOGGER.error(f"ERROR in Spamwatch Detection. {err}")
|
||||
# Combot API Detection
|
||||
try:
|
||||
apicombot = (
|
||||
await http.get(f"https://api.cas.chat/check?user_id={user.id}")
|
||||
).json()
|
||||
apicombot = (await http.get(f"https://api.cas.chat/check?user_id={user.id}")).json()
|
||||
if apicombot.get("ok") == "true":
|
||||
await app.ban_chat_member(
|
||||
member.chat.id, user.id, datetime.now() + timedelta(seconds=30)
|
||||
)
|
||||
await app.ban_chat_member(member.chat.id, user.id, datetime.now() + timedelta(seconds=30))
|
||||
userspammer += f"<b>#CAS Federation Ban</b>\nUser {mention} [<code>{user.id}</code>] detected as spambot and has been kicked. Powered by <a href='https://api.cas.chat/check?user_id={user.id}'>Combot AntiSpam.</a>"
|
||||
except Exception as err:
|
||||
LOGGER.error(f"ERROR in Combot API Detection. {err}")
|
||||
|
|
@ -181,9 +149,7 @@ async def save_group(bot, message):
|
|||
await db.add_chat(message.chat.id, message.chat.title)
|
||||
if message.chat.id in temp.BANNED_CHATS:
|
||||
# Inspired from a boat of a banana tree
|
||||
buttons = [
|
||||
[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]
|
||||
]
|
||||
buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]]
|
||||
reply_markup = InlineKeyboardMarkup(buttons)
|
||||
k = await message.reply(
|
||||
text="<b>CHAT NOT ALLOWED 🐞\n\nMy admins has restricted me from working here ! If you want to know more about it contact support..</b>",
|
||||
|
|
@ -198,9 +164,7 @@ async def save_group(bot, message):
|
|||
return
|
||||
buttons = [
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"ℹ️ Help", url=f"https://t.me/{temp.U_NAME}?start=help"
|
||||
),
|
||||
InlineKeyboardButton("ℹ️ Help", url=f"https://t.me/{temp.U_NAME}?start=help"),
|
||||
InlineKeyboardButton("📢 Updates", url="https://t.me/YasirPediaChannel"),
|
||||
]
|
||||
]
|
||||
|
|
@ -213,14 +177,10 @@ async def save_group(bot, message):
|
|||
for u in message.new_chat_members:
|
||||
count = await app.get_chat_members_count(message.chat.id)
|
||||
try:
|
||||
pic = await app.download_media(
|
||||
u.photo.big_file_id, file_name=f"pp{u.id}.png"
|
||||
)
|
||||
pic = await app.download_media(u.photo.big_file_id, file_name=f"pp{u.id}.png")
|
||||
except AttributeError:
|
||||
pic = "img/profilepic.png"
|
||||
welcomeimg = await welcomepic(
|
||||
pic, u.first_name, message.chat.title, count, u.id
|
||||
)
|
||||
welcomeimg = await welcomepic(pic, u.first_name, message.chat.title, count, u.id)
|
||||
if (temp.MELCOW).get(f"welcome-{message.chat.id}") is not None:
|
||||
try:
|
||||
await (temp.MELCOW[f"welcome-{message.chat.id}"]).delete()
|
||||
|
|
@ -251,9 +211,7 @@ async def leave_a_chat(bot, message):
|
|||
except:
|
||||
chat = chat
|
||||
try:
|
||||
buttons = [
|
||||
[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]
|
||||
]
|
||||
buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]]
|
||||
reply_markup = InlineKeyboardMarkup(buttons)
|
||||
await bot.send_message(
|
||||
chat_id=chat,
|
||||
|
|
@ -285,16 +243,12 @@ async def disable_chat(bot, message):
|
|||
if not cha_t:
|
||||
return await message.reply("Chat Not Found In DB")
|
||||
if cha_t["is_disabled"]:
|
||||
return await message.reply(
|
||||
f"This chat is already disabled:\nReason-<code> {cha_t['reason']} </code>"
|
||||
)
|
||||
return await message.reply(f"This chat is already disabled:\nReason-<code> {cha_t['reason']} </code>")
|
||||
await db.disable_chat(chat_, reason)
|
||||
temp.BANNED_CHATS.append(chat_)
|
||||
await message.reply("Chat Succesfully Disabled")
|
||||
try:
|
||||
buttons = [
|
||||
[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]
|
||||
]
|
||||
buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]]
|
||||
reply_markup = InlineKeyboardMarkup(buttons)
|
||||
await bot.send_message(
|
||||
chat_id=chat_,
|
||||
|
|
@ -339,9 +293,7 @@ async def gen_invite(bot, message):
|
|||
try:
|
||||
link = await bot.create_chat_invite_link(chat)
|
||||
except ChatAdminRequired:
|
||||
return await message.reply(
|
||||
"Invite Link Generation Failed, Iam Not Having Sufficient Rights"
|
||||
)
|
||||
return await message.reply("Invite Link Generation Failed, Iam Not Having Sufficient Rights")
|
||||
except Exception as e:
|
||||
return await message.reply(f"Error {e}")
|
||||
await message.reply(f"Here is your Invite Link {link.invite_link}")
|
||||
|
|
@ -354,15 +306,11 @@ async def adminlist(_, message):
|
|||
return await message.reply("Perintah ini hanya untuk grup")
|
||||
try:
|
||||
administrators = []
|
||||
async for m in app.get_chat_members(
|
||||
message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS
|
||||
):
|
||||
async for m in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS):
|
||||
administrators.append(f"{m.user.first_name}")
|
||||
|
||||
res = "".join(f"~ {i}\n" for i in administrators)
|
||||
return await message.reply(
|
||||
f"Daftar Admin di <b>{message.chat.title}</b> ({message.chat.id}):\n~ {res}"
|
||||
)
|
||||
return await message.reply(f"Daftar Admin di <b>{message.chat.title}</b> ({message.chat.id}):\n~ {res}")
|
||||
except Exception as e:
|
||||
await message.reply(f"ERROR: {str(e)}")
|
||||
|
||||
|
|
@ -380,9 +328,7 @@ async def kickme(_, message):
|
|||
await message.reply_text(txt)
|
||||
await message.unban_member(message.from_user.id)
|
||||
except RPCError as ef:
|
||||
await message.reply_text(
|
||||
f"Sepertinya ada error, silahkan report ke owner saya. \nERROR: {str(ef)}"
|
||||
)
|
||||
await message.reply_text(f"Sepertinya ada error, silahkan report ke owner saya. \nERROR: {str(ef)}")
|
||||
return
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -17,67 +17,48 @@ __HELP__ = """"
|
|||
"""
|
||||
|
||||
|
||||
@app.on_message(
|
||||
filters.incoming & ~filters.private & filters.command(["inkick"], COMMAND_HANDLER)
|
||||
)
|
||||
@app.on_message(filters.incoming & ~filters.private & filters.command(["inkick"], COMMAND_HANDLER))
|
||||
async def inkick(_, message):
|
||||
user = await app.get_chat_member(message.chat.id, message.from_user.id)
|
||||
if user.status.value in ("administrator", "owner"):
|
||||
if len(message.command) > 1:
|
||||
input_str = message.command
|
||||
sent_message = await message.reply_text(
|
||||
"🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**"
|
||||
)
|
||||
sent_message = await message.reply_text("🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**")
|
||||
count = 0
|
||||
async for member in app.get_chat_members(message.chat.id):
|
||||
if member.user.is_bot:
|
||||
continue
|
||||
if (
|
||||
member.user.status.value in input_str
|
||||
and member.status.value not in ("administrator", "owner")
|
||||
):
|
||||
if member.user.status.value in input_str and member.status.value not in ("administrator", "owner"):
|
||||
try:
|
||||
await message.chat.ban_member(member.user.id)
|
||||
count += 1
|
||||
await sleep(1)
|
||||
await message.chat.unban_member(member.user.id)
|
||||
except (ChatAdminRequired, UserAdminInvalid):
|
||||
await sent_message.edit(
|
||||
"❗**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__"
|
||||
)
|
||||
await sent_message.edit("❗**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__")
|
||||
await app.leave_chat(message.chat.id)
|
||||
break
|
||||
except FloodWait as e:
|
||||
await sleep(e.value)
|
||||
try:
|
||||
await sent_message.edit(
|
||||
f"✔️ **Berhasil menendang {count} pengguna berdasarkan argumen.**"
|
||||
)
|
||||
await sent_message.edit(f"✔️ **Berhasil menendang {count} pengguna berdasarkan argumen.**")
|
||||
|
||||
except ChatWriteForbidden:
|
||||
await app.leave_chat(message.chat.id)
|
||||
else:
|
||||
await message.reply_text(
|
||||
"❗ **Arguments Required**\n__See /help in personal message for more information.__"
|
||||
)
|
||||
await message.reply_text("❗ **Arguments Required**\n__See /help in personal message for more information.__")
|
||||
else:
|
||||
sent_message = await message.reply_text(
|
||||
"❗ **You have to be the group creator to do that.**"
|
||||
)
|
||||
sent_message = await message.reply_text("❗ **You have to be the group creator to do that.**")
|
||||
await sleep(5)
|
||||
await sent_message.delete()
|
||||
|
||||
|
||||
# Kick User Without Username
|
||||
@app.on_message(
|
||||
filters.incoming & ~filters.private & filters.command(["uname"], COMMAND_HANDLER)
|
||||
)
|
||||
@app.on_message(filters.incoming & ~filters.private & filters.command(["uname"], COMMAND_HANDLER))
|
||||
async def uname(_, message):
|
||||
user = await app.get_chat_member(message.chat.id, message.from_user.id)
|
||||
if user.status.value in ("administrator", "owner"):
|
||||
sent_message = await message.reply_text(
|
||||
"🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**"
|
||||
)
|
||||
sent_message = await message.reply_text("🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**")
|
||||
count = 0
|
||||
async for member in app.get_chat_members(message.chat.id):
|
||||
if not member.user.username and member.status.value not in (
|
||||
|
|
@ -90,37 +71,27 @@ async def uname(_, message):
|
|||
await sleep(1)
|
||||
await message.chat.unban_member(member.user.id)
|
||||
except (ChatAdminRequired, UserAdminInvalid):
|
||||
await sent_message.edit(
|
||||
"❗**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__"
|
||||
)
|
||||
await sent_message.edit("❗**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__")
|
||||
await app.leave_chat(message.chat.id)
|
||||
break
|
||||
except FloodWait as e:
|
||||
await sleep(e.value)
|
||||
try:
|
||||
await sent_message.edit(
|
||||
f"✔️ **Berhasil menendang {count} pengguna berdasarkan argumen.**"
|
||||
)
|
||||
await sent_message.edit(f"✔️ **Berhasil menendang {count} pengguna berdasarkan argumen.**")
|
||||
|
||||
except ChatWriteForbidden:
|
||||
await app.leave_chat(message.chat.id)
|
||||
else:
|
||||
sent_message = await message.reply_text(
|
||||
"❗ **You have to be the group creator to do that.**"
|
||||
)
|
||||
sent_message = await message.reply_text("❗ **You have to be the group creator to do that.**")
|
||||
await sleep(5)
|
||||
await sent_message.delete()
|
||||
|
||||
|
||||
@app.on_message(
|
||||
filters.incoming & ~filters.private & filters.command(["dkick"], COMMAND_HANDLER)
|
||||
)
|
||||
@app.on_message(filters.incoming & ~filters.private & filters.command(["dkick"], COMMAND_HANDLER))
|
||||
async def dkick(client, message):
|
||||
user = await app.get_chat_member(message.chat.id, message.from_user.id)
|
||||
if user.status.value in ("administrator", "owner"):
|
||||
sent_message = await message.reply_text(
|
||||
"🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**"
|
||||
)
|
||||
sent_message = await message.reply_text("🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**")
|
||||
count = 0
|
||||
async for member in app.get_chat_members(message.chat.id):
|
||||
if member.user.is_deleted and member.status.value not in (
|
||||
|
|
@ -133,9 +104,7 @@ async def dkick(client, message):
|
|||
await sleep(1)
|
||||
await message.chat.unban_member(member.user.id)
|
||||
except (ChatAdminRequired, UserAdminInvalid):
|
||||
await sent_message.edit(
|
||||
"❗**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__"
|
||||
)
|
||||
await sent_message.edit("❗**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__")
|
||||
await app.leave_chat(message.chat.id)
|
||||
break
|
||||
except FloodWait as e:
|
||||
|
|
@ -145,16 +114,12 @@ async def dkick(client, message):
|
|||
except ChatWriteForbidden:
|
||||
await app.leave_chat(message.chat.id)
|
||||
else:
|
||||
sent_message = await message.reply_text(
|
||||
"❗ **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**"
|
||||
)
|
||||
sent_message = await message.reply_text("❗ **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**")
|
||||
await sleep(5)
|
||||
await sent_message.delete()
|
||||
|
||||
|
||||
@app.on_message(
|
||||
filters.incoming & ~filters.private & filters.command(["instatus"], COMMAND_HANDLER)
|
||||
)
|
||||
@app.on_message(filters.incoming & ~filters.private & filters.command(["instatus"], COMMAND_HANDLER))
|
||||
async def instatus(client, message):
|
||||
start_time = time.perf_counter()
|
||||
user = await app.get_chat_member(message.chat.id, message.from_user.id)
|
||||
|
|
@ -163,9 +128,7 @@ async def instatus(client, message):
|
|||
enums.ChatMemberStatus.ADMINISTRATOR,
|
||||
enums.ChatMemberStatus.OWNER,
|
||||
):
|
||||
sent_message = await message.reply_text(
|
||||
"**Sedang mengumpulkan informasi pengguna...**"
|
||||
)
|
||||
sent_message = await message.reply_text("**Sedang mengumpulkan informasi pengguna...**")
|
||||
recently = 0
|
||||
within_week = 0
|
||||
within_month = 0
|
||||
|
|
@ -177,13 +140,9 @@ async def instatus(client, message):
|
|||
banned = 0
|
||||
uncached = 0
|
||||
bot = 0
|
||||
async for ban in app.get_chat_members(
|
||||
message.chat.id, filter=enums.ChatMembersFilter.BANNED
|
||||
):
|
||||
async for ban in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.BANNED):
|
||||
banned += 1
|
||||
async for restr in app.get_chat_members(
|
||||
message.chat.id, filter=enums.ChatMembersFilter.RESTRICTED
|
||||
):
|
||||
async for restr in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.RESTRICTED):
|
||||
restricted += 1
|
||||
async for member in app.get_chat_members(message.chat.id):
|
||||
user = member.user
|
||||
|
|
@ -226,8 +185,6 @@ async def instatus(client, message):
|
|||
)
|
||||
)
|
||||
else:
|
||||
sent_message = await message.reply_text(
|
||||
"❗ **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**"
|
||||
)
|
||||
sent_message = await message.reply_text("❗ **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**")
|
||||
await sleep(5)
|
||||
await sent_message.delete()
|
||||
|
|
|
|||
|
|
@ -38,12 +38,7 @@ PRVT_MSGS = {}
|
|||
async def inline_menu(_, inline_query: InlineQuery):
|
||||
if inline_query.query.strip().lower().strip() == "":
|
||||
buttons = InlineKeyboard(row_width=2)
|
||||
buttons.add(
|
||||
*[
|
||||
(InlineKeyboardButton(text=i, switch_inline_query_current_chat=i))
|
||||
for i in keywords_list
|
||||
]
|
||||
)
|
||||
buttons.add(*[(InlineKeyboardButton(text=i, switch_inline_query_current_chat=i)) for i in keywords_list])
|
||||
|
||||
btn = InlineKeyboard(row_width=2)
|
||||
bot_state = "Alive" if await app.get_me() else "Dead"
|
||||
|
|
@ -67,27 +62,21 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
InlineQueryResultArticle(
|
||||
title="Inline Commands",
|
||||
description="Help Related To Inline Usage.",
|
||||
input_message_content=InputTextMessageContent(
|
||||
"Click A Button To Get Started."
|
||||
),
|
||||
input_message_content=InputTextMessageContent("Click A Button To Get Started."),
|
||||
thumb_url="https://hamker.me/cy00x5x.png",
|
||||
reply_markup=buttons,
|
||||
),
|
||||
InlineQueryResultArticle(
|
||||
title="Github Repo",
|
||||
description="Github Repo of This Bot.",
|
||||
input_message_content=InputTextMessageContent(
|
||||
f"<b>Github Repo @{BOT_USERNAME}</b>\n\nhttps://github.com/yasirarism/MissKatyPyro"
|
||||
),
|
||||
input_message_content=InputTextMessageContent(f"<b>Github Repo @{BOT_USERNAME}</b>\n\nhttps://github.com/yasirarism/MissKatyPyro"),
|
||||
thumb_url="https://hamker.me/gjc9fo3.png",
|
||||
),
|
||||
InlineQueryResultArticle(
|
||||
title="Alive",
|
||||
description="Check Bot's Stats",
|
||||
thumb_url="https://yt3.ggpht.com/ytc/AMLnZu-zbtIsllERaGYY8Aecww3uWUASPMjLUUEt7ecu=s900-c-k-c0x00ffffff-no-rj",
|
||||
input_message_content=InputTextMessageContent(
|
||||
msg, disable_web_page_preview=True
|
||||
),
|
||||
input_message_content=InputTextMessageContent(msg, disable_web_page_preview=True),
|
||||
reply_markup=btn,
|
||||
),
|
||||
]
|
||||
|
|
@ -100,13 +89,8 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
switch_pm_parameter="inline",
|
||||
)
|
||||
judul = 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"
|
||||
}
|
||||
search_results = await http.get(
|
||||
f"https://www.google.com/search?q={judul}&num=20", headers=headers
|
||||
)
|
||||
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"}
|
||||
search_results = await http.get(f"https://www.google.com/search?q={judul}&num=20", headers=headers)
|
||||
soup = BeautifulSoup(search_results.text, "lxml")
|
||||
data = []
|
||||
for result in soup.select(".tF2Cxc"):
|
||||
|
|
@ -129,9 +113,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
url=link,
|
||||
description=snippet,
|
||||
thumb_url="https://te.legra.ph/file/ed8ea62ae636793000bb4.jpg",
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton(text="Open Website", url=link)]]
|
||||
),
|
||||
reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="Open Website", url=link)]]),
|
||||
)
|
||||
)
|
||||
await inline_query.answer(
|
||||
|
|
@ -169,11 +151,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
)
|
||||
prvte_msg = InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"Show Message 🔐", callback_data=f"prvtmsg({inline_query.id})"
|
||||
)
|
||||
],
|
||||
[InlineKeyboardButton("Show Message 🔐", callback_data=f"prvtmsg({inline_query.id})")],
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"Destroy☠️ this msg",
|
||||
|
|
@ -182,15 +160,9 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
],
|
||||
]
|
||||
)
|
||||
mention = (
|
||||
f"@{penerima.username}"
|
||||
if penerima.username
|
||||
else f"<a href='tg://user?id={penerima.id}'>{penerima.first_name}</a>"
|
||||
)
|
||||
mention = f"@{penerima.username}" if penerima.username else f"<a href='tg://user?id={penerima.id}'>{penerima.first_name}</a>"
|
||||
|
||||
msg_c = (
|
||||
f"🔒 A <b>private message</b> to {mention} [<code>{penerima.id}</code>], "
|
||||
)
|
||||
msg_c = f"🔒 A <b>private message</b> to {mention} [<code>{penerima.id}</code>], "
|
||||
msg_c += "Only he/she can open it."
|
||||
results = [
|
||||
InlineQueryResultArticle(
|
||||
|
|
@ -210,9 +182,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
switch_pm_parameter="inline",
|
||||
)
|
||||
query = inline_query.query.split(None, 1)[1].strip()
|
||||
search_results = await http.get(
|
||||
f"https://api.github.com/search/repositories?q={query}"
|
||||
)
|
||||
search_results = await http.get(f"https://api.github.com/search/repositories?q={query}")
|
||||
srch_results = json.loads(search_results.text)
|
||||
item = srch_results.get("items")
|
||||
data = []
|
||||
|
|
@ -235,9 +205,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
url=link,
|
||||
description=deskripsi,
|
||||
thumb_url="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton(text="Open Github Link", url=link)]]
|
||||
),
|
||||
reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="Open Github Link", url=link)]]),
|
||||
)
|
||||
)
|
||||
await inline_query.answer(
|
||||
|
|
@ -256,9 +224,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
switch_pm_parameter="inline",
|
||||
)
|
||||
query = inline_query.query.split(None, 1)[1].strip()
|
||||
search_results = await http.get(
|
||||
f"https://api.hayo.my.id/api/pypi?package={query}"
|
||||
)
|
||||
search_results = await http.get(f"https://api.hayo.my.id/api/pypi?package={query}")
|
||||
srch_results = json.loads(search_results.text)
|
||||
data = []
|
||||
for sraeo in srch_results:
|
||||
|
|
@ -279,9 +245,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
url=link,
|
||||
description=deskripsi,
|
||||
thumb_url="https://raw.githubusercontent.com/github/explore/666de02829613e0244e9441b114edb85781e972c/topics/pip/pip.png",
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton(text="Open Link", url=link)]]
|
||||
),
|
||||
reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="Open Link", url=link)]]),
|
||||
)
|
||||
)
|
||||
await inline_query.answer(
|
||||
|
|
@ -300,9 +264,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
switch_pm_parameter="inline",
|
||||
)
|
||||
judul = inline_query.query.split(None, 1)[1].strip()
|
||||
search_results = await http.get(
|
||||
f"https://api.abir-hasan.tk/youtube?query={judul}"
|
||||
)
|
||||
search_results = await http.get(f"https://api.abir-hasan.tk/youtube?query={judul}")
|
||||
srch_results = json.loads(search_results.text)
|
||||
asroe = srch_results.get("results")
|
||||
oorse = []
|
||||
|
|
@ -314,9 +276,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
durasi = sraeo.get("accessibility").get("duration")
|
||||
publishTime = sraeo.get("publishedTime")
|
||||
try:
|
||||
deskripsi = "".join(
|
||||
f"{i['text']} " for i in sraeo.get("descriptionSnippet")
|
||||
)
|
||||
deskripsi = "".join(f"{i['text']} " for i in sraeo.get("descriptionSnippet"))
|
||||
except:
|
||||
deskripsi = "-"
|
||||
message_text = f"<a href='{link}'>{title}</a>\n"
|
||||
|
|
@ -335,9 +295,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
url=link,
|
||||
description=deskripsi,
|
||||
thumb_url=thumb,
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton(text="Watch Video 📹", url=link)]]
|
||||
),
|
||||
reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="Watch Video 📹", url=link)]]),
|
||||
)
|
||||
)
|
||||
await inline_query.answer(
|
||||
|
|
@ -356,9 +314,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
switch_pm_parameter="inline",
|
||||
)
|
||||
movie_name = inline_query.query.split(None, 1)[1].strip()
|
||||
search_results = await http.get(
|
||||
f"https://yasirapi.eu.org/imdb-search?q={movie_name}"
|
||||
)
|
||||
search_results = await http.get(f"https://yasirapi.eu.org/imdb-search?q={movie_name}")
|
||||
res = json.loads(search_results.text).get("result")
|
||||
oorse = []
|
||||
for midb in res:
|
||||
|
|
@ -367,11 +323,7 @@ async def inline_menu(_, inline_query: InlineQuery):
|
|||
stars = midb.get("s", "")
|
||||
imdb_url = f"https://imdb.com/title/{midb.get('id')}"
|
||||
year = f"({midb.get('y')})" if midb.get("y") else ""
|
||||
image_url = (
|
||||
midb.get("i").get("imageUrl").replace(".jpg", "._V1_UX360.jpg")
|
||||
if midb.get("i")
|
||||
else "https://te.legra.ph/file/e263d10ff4f4426a7c664.jpg"
|
||||
)
|
||||
image_url = midb.get("i").get("imageUrl").replace(".jpg", "._V1_UX360.jpg") if midb.get("i") else "https://te.legra.ph/file/e263d10ff4f4426a7c664.jpg"
|
||||
caption = f"<a href='{image_url}'>🎬</a>"
|
||||
caption += f"<a href='{imdb_url}'>{title} {year}</a>"
|
||||
oorse.append(
|
||||
|
|
@ -446,83 +398,46 @@ async def imdb_inl(_, query):
|
|||
url = f"https://www.imdb.com/title/{movie}/"
|
||||
resp = await get_content(url)
|
||||
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])
|
||||
res_str = ""
|
||||
type = f"<code>{r_json['@type']}</code>" if r_json.get("@type") else ""
|
||||
if r_json.get("name"):
|
||||
try:
|
||||
tahun = (
|
||||
sop.select('ul[data-testid="hero-title-block__metadata"]')[0]
|
||||
.find(class_="sc-8c396aa2-2 itZqyK")
|
||||
.text
|
||||
)
|
||||
tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find(class_="sc-8c396aa2-2 itZqyK").text
|
||||
except:
|
||||
tahun = "-"
|
||||
res_str += f"<b>📹 Judul:</b> <a href='{url}'>{r_json['name']} [{tahun}]</a> (<code>{type}</code>)\n"
|
||||
if r_json.get("alternateName"):
|
||||
res_str += (
|
||||
f"<b>📢 AKA:</b> <code>{r_json.get('alternateName')}</code>\n\n"
|
||||
)
|
||||
res_str += f"<b>📢 AKA:</b> <code>{r_json.get('alternateName')}</code>\n\n"
|
||||
else:
|
||||
res_str += "\n"
|
||||
if sop.select('li[data-testid="title-techspec_runtime"]'):
|
||||
durasi = (
|
||||
sop.select('li[data-testid="title-techspec_runtime"]')[0]
|
||||
.find(class_="ipc-metadata-list-item__content-container")
|
||||
.text
|
||||
)
|
||||
durasi = sop.select('li[data-testid="title-techspec_runtime"]')[0].find(class_="ipc-metadata-list-item__content-container").text
|
||||
res_str += f"<b>Durasi:</b> <code>{GoogleTranslator('auto', 'id').translate(durasi)}</code>\n"
|
||||
if r_json.get("contentRating"):
|
||||
res_str += f"<b>Kategori:</b> <code>{r_json['contentRating']}</code> \n"
|
||||
if r_json.get("aggregateRating"):
|
||||
res_str += f"<b>Peringkat:</b> <code>{r_json['aggregateRating']['ratingValue']}⭐️ dari {r_json['aggregateRating']['ratingCount']} pengguna</code> \n"
|
||||
if sop.select('li[data-testid="title-details-releasedate"]'):
|
||||
rilis = (
|
||||
sop.select('li[data-testid="title-details-releasedate"]')[0]
|
||||
.find(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)
|
||||
.text
|
||||
)
|
||||
rilis_url = sop.select('li[data-testid="title-details-releasedate"]')[
|
||||
0
|
||||
].find(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)[
|
||||
"href"
|
||||
]
|
||||
rilis = sop.select('li[data-testid="title-details-releasedate"]')[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link").text
|
||||
rilis_url = sop.select('li[data-testid="title-details-releasedate"]')[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")["href"]
|
||||
res_str += f"<b>Rilis:</b> <a href='https://www.imdb.com{rilis_url}'>{rilis}</a>\n"
|
||||
if r_json.get("genre"):
|
||||
genre = "".join(
|
||||
f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, "
|
||||
if i in GENRES_EMOJI
|
||||
else f"#{i.replace('-', '_').replace(' ', '_')}, "
|
||||
for i in r_json["genre"]
|
||||
)
|
||||
genre = "".join(f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, " if i in GENRES_EMOJI else f"#{i.replace('-', '_').replace(' ', '_')}, " for i in r_json["genre"])
|
||||
|
||||
genre = genre[:-2]
|
||||
res_str += f"<b>Genre:</b> {genre}\n"
|
||||
if sop.select('li[data-testid="title-details-origin"]'):
|
||||
country = "".join(
|
||||
f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
|
||||
for country in sop.select('li[data-testid="title-details-origin"]')[
|
||||
0
|
||||
].findAll(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)
|
||||
for country in sop.select('li[data-testid="title-details-origin"]')[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
|
||||
)
|
||||
country = country[:-2]
|
||||
res_str += f"<b>Negara:</b> {country}\n"
|
||||
if sop.select('li[data-testid="title-details-languages"]'):
|
||||
language = "".join(
|
||||
f"#{lang.text.replace(' ', '_').replace('-', '_')}, "
|
||||
for lang in sop.select('li[data-testid="title-details-languages"]')[
|
||||
0
|
||||
].findAll(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)
|
||||
for lang in sop.select('li[data-testid="title-details-languages"]')[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
|
||||
)
|
||||
language = language[:-2]
|
||||
res_str += f"<b>Bahasa:</b> {language}\n"
|
||||
|
|
@ -553,9 +468,7 @@ async def imdb_inl(_, query):
|
|||
actors = actors[:-2]
|
||||
res_str += f"<b>Pemeran:</b> {actors}\n\n"
|
||||
if r_json.get("description"):
|
||||
summary = GoogleTranslator("auto", "id").translate(
|
||||
r_json.get("description")
|
||||
)
|
||||
summary = GoogleTranslator("auto", "id").translate(r_json.get("description"))
|
||||
res_str += f"<b>📜 Plot: </b> <code>{summary}</code>\n\n"
|
||||
if r_json.get("keywords"):
|
||||
keywords = r_json["keywords"].split(",")
|
||||
|
|
@ -566,11 +479,7 @@ async def imdb_inl(_, query):
|
|||
key_ = key_[:-2]
|
||||
res_str += f"<b>🔥 Kata Kunci:</b> {key_} \n"
|
||||
if sop.select('li[data-testid="award_information"]'):
|
||||
awards = (
|
||||
sop.select('li[data-testid="award_information"]')[0]
|
||||
.find(class_="ipc-metadata-list-item__list-content-item")
|
||||
.text
|
||||
)
|
||||
awards = sop.select('li[data-testid="award_information"]')[0].find(class_="ipc-metadata-list-item__list-content-item").text
|
||||
res_str += f"<b>🏆 Penghargaan:</b> <code>{GoogleTranslator('auto', 'id').translate(awards)}</code>\n\n"
|
||||
else:
|
||||
res_str += "\n"
|
||||
|
|
|
|||
|
|
@ -24,9 +24,7 @@ Give reputation to other people in group.
|
|||
karma_positive_group = 3
|
||||
karma_negative_group = 4
|
||||
|
||||
regex_upvote = (
|
||||
r"^(\+|\+\+|\+1|thx|tnx|ty|thank you|thanx|thanks|pro|cool|good|makasih|👍|\+\+ .+)$"
|
||||
)
|
||||
regex_upvote = r"^(\+|\+\+|\+1|thx|tnx|ty|thank you|thanx|thanks|pro|cool|good|makasih|👍|\+\+ .+)$"
|
||||
regex_downvote = r"^(-|--|-1|👎|-- .+)$"
|
||||
|
||||
n = "\n"
|
||||
|
|
@ -47,30 +45,18 @@ def section(
|
|||
text = (bold_ul(title) + n) if underline else bold(title) + n
|
||||
|
||||
for key, value in body.items():
|
||||
text += (
|
||||
indent * w
|
||||
+ bold(key)
|
||||
+ ((value[0] + n) if isinstance(value, list) else mono(value))
|
||||
)
|
||||
text += indent * w + bold(key) + ((value[0] + n) if isinstance(value, list) else mono(value))
|
||||
return text
|
||||
|
||||
|
||||
async def get_user_id_and_usernames(client) -> dict:
|
||||
with client.storage.lock, client.storage.conn:
|
||||
users = client.storage.conn.execute(
|
||||
'SELECT * FROM peers WHERE type in ("user", "bot") AND username NOT null'
|
||||
).fetchall()
|
||||
users = client.storage.conn.execute('SELECT * FROM peers WHERE type in ("user", "bot") AND username NOT null').fetchall()
|
||||
return {user[0]: user[3] for user in users}
|
||||
|
||||
|
||||
@app.on_message(
|
||||
filters.text
|
||||
& filters.group
|
||||
& filters.incoming
|
||||
& filters.reply
|
||||
& filters.regex(regex_upvote, re.IGNORECASE)
|
||||
& ~filters.via_bot
|
||||
& ~filters.bot,
|
||||
filters.text & filters.group & filters.incoming & filters.reply & filters.regex(regex_upvote, re.IGNORECASE) & ~filters.via_bot & ~filters.bot,
|
||||
group=karma_positive_group,
|
||||
)
|
||||
@capture_err
|
||||
|
|
@ -94,19 +80,11 @@ async def upvote(_, message):
|
|||
karma = 1
|
||||
new_karma = {"karma": karma}
|
||||
await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
|
||||
await message.reply_text(
|
||||
f"Incremented Karma of {user_mention} By 1 \nTotal Points: {karma}"
|
||||
)
|
||||
await message.reply_text(f"Incremented Karma of {user_mention} By 1 \nTotal Points: {karma}")
|
||||
|
||||
|
||||
@app.on_message(
|
||||
filters.text
|
||||
& filters.group
|
||||
& filters.incoming
|
||||
& filters.reply
|
||||
& filters.regex(regex_downvote, re.IGNORECASE)
|
||||
& ~filters.via_bot
|
||||
& ~filters.bot,
|
||||
filters.text & filters.group & filters.incoming & filters.reply & filters.regex(regex_downvote, re.IGNORECASE) & ~filters.via_bot & ~filters.bot,
|
||||
group=karma_negative_group,
|
||||
)
|
||||
@capture_err
|
||||
|
|
@ -131,9 +109,7 @@ async def downvote(_, message):
|
|||
karma = 1
|
||||
new_karma = {"karma": karma}
|
||||
await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
|
||||
await message.reply_text(
|
||||
f"Decremented Karma Of {user_mention} By 1 \nTotal Points: {karma}"
|
||||
)
|
||||
await message.reply_text(f"Decremented Karma Of {user_mention} By 1 \nTotal Points: {karma}")
|
||||
|
||||
|
||||
@app.on_message(filters.command("karma") & filters.group)
|
||||
|
|
|
|||
|
|
@ -25,9 +25,7 @@ from misskaty.helper.pyro_progress import (
|
|||
@capture_err
|
||||
async def mediainfo(client, message):
|
||||
if message.reply_to_message and message.reply_to_message.media:
|
||||
process = await message.reply_text(
|
||||
"`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True
|
||||
)
|
||||
process = await message.reply_text("`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True)
|
||||
file_info = get_file_id(message.reply_to_message)
|
||||
if file_info is None:
|
||||
await process.edit_text("Balas ke format media yang valid")
|
||||
|
|
@ -63,22 +61,14 @@ async def mediainfo(client, message):
|
|||
try:
|
||||
link = message.text.split(" ", maxsplit=1)[1]
|
||||
if link.startswith("https://file.yasirweb.my.id"):
|
||||
link = link.replace(
|
||||
"https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev"
|
||||
)
|
||||
link = link.replace("https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev")
|
||||
if link.startswith("https://link.yasirweb.my.id"):
|
||||
link = link.replace(
|
||||
"https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com"
|
||||
)
|
||||
link = link.replace("https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com")
|
||||
process = await message.reply_text("`Mohon tunggu sejenak...`")
|
||||
try:
|
||||
output = subprocess.check_output(["mediainfo", f"{link}"]).decode(
|
||||
"utf-8"
|
||||
)
|
||||
output = subprocess.check_output(["mediainfo", f"{link}"]).decode("utf-8")
|
||||
except Exception:
|
||||
return await process.edit(
|
||||
"Sepertinya link yang kamu kirim tidak valid, pastikan direct link dan bisa di download."
|
||||
)
|
||||
return await process.edit("Sepertinya link yang kamu kirim tidak valid, pastikan direct link dan bisa di download.")
|
||||
title = "MissKaty Bot Mediainfo"
|
||||
body_text = f"""
|
||||
<img src='https://telegra.ph/file/72c99bbc89bbe4e178cc9.jpg' />
|
||||
|
|
@ -89,9 +79,7 @@ async def mediainfo(client, message):
|
|||
# response = await http.post(siteurl, data={"content": output, "extension": 'txt'} )
|
||||
# response = response.json()
|
||||
# spacebin = "https://spaceb.in/"+response['payload']['id']
|
||||
markup = InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton(text="💬 Telegraph", url=tgraph)]]
|
||||
)
|
||||
markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="💬 Telegraph", url=tgraph)]])
|
||||
with io.BytesIO(str.encode(output)) as out_file:
|
||||
out_file.name = "MissKaty_Mediainfo.txt"
|
||||
await message.reply_document(
|
||||
|
|
@ -101,6 +89,4 @@ async def mediainfo(client, message):
|
|||
)
|
||||
await process.delete()
|
||||
except IndexError:
|
||||
return await message.reply_text(
|
||||
"Gunakan command /mediainfo [link], atau reply telegram media dengan /mediainfo."
|
||||
)
|
||||
return await message.reply_text("Gunakan command /mediainfo [link], atau reply telegram media dengan /mediainfo.")
|
||||
|
|
|
|||
|
|
@ -133,9 +133,7 @@ async def draw_meme_text(image_path, text):
|
|||
@app.on_message(filters.command(["mmf"], COMMAND_HANDLER))
|
||||
@capture_err
|
||||
async def memify(client, message):
|
||||
if message.reply_to_message and (
|
||||
message.reply_to_message.sticker or message.reply_to_message.photo
|
||||
):
|
||||
if message.reply_to_message and (message.reply_to_message.sticker or message.reply_to_message.photo):
|
||||
try:
|
||||
file = await message.reply_to_message.download()
|
||||
res = await draw_meme_text(file, message.text.split(None, 1)[1].strip())
|
||||
|
|
@ -145,10 +143,6 @@ async def memify(client, message):
|
|||
except:
|
||||
pass
|
||||
except:
|
||||
await message.reply(
|
||||
"Gunakan command <b>/mmf <text></b> dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah."
|
||||
)
|
||||
await message.reply("Gunakan command <b>/mmf <text></b> dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah.")
|
||||
else:
|
||||
await message.reply(
|
||||
"Gunakan command <b>/mmf <text></b> dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah."
|
||||
)
|
||||
await message.reply("Gunakan command <b>/mmf <text></b> dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah.")
|
||||
|
|
|
|||
|
|
@ -52,20 +52,12 @@ def remove_html_tags(text):
|
|||
async def stackoverflow(client, message):
|
||||
if len(message.command) == 1:
|
||||
return await message.reply("Give a query to search in StackOverflow!")
|
||||
r = (
|
||||
await http.get(
|
||||
f"https://api.stackexchange.com/2.3/search/excerpts?order=asc&sort=relevance&q={message.command[1]}&accepted=True&migrated=False¬ice=False&wiki=False&site=stackoverflow"
|
||||
)
|
||||
).json()
|
||||
r = (await http.get(f"https://api.stackexchange.com/2.3/search/excerpts?order=asc&sort=relevance&q={message.command[1]}&accepted=True&migrated=False¬ice=False&wiki=False&site=stackoverflow")).json()
|
||||
hasil = ""
|
||||
for count, data in enumerate(r["items"], start=1):
|
||||
question = data["question_id"]
|
||||
title = data["title"]
|
||||
snippet = (
|
||||
remove_html_tags(data["excerpt"])[:80].replace("\n", "").replace(" ", "")
|
||||
if len(remove_html_tags(data["excerpt"])) > 80
|
||||
else remove_html_tags(data["excerpt"]).replace("\n", "").replace(" ", "")
|
||||
)
|
||||
snippet = remove_html_tags(data["excerpt"])[:80].replace("\n", "").replace(" ", "") if len(remove_html_tags(data["excerpt"])) > 80 else remove_html_tags(data["excerpt"]).replace("\n", "").replace(" ", "")
|
||||
hasil += f"{count}. <a href='https://stackoverflow.com/questions/{question}'>{title}</a>\n<code>{snippet}</code>\n"
|
||||
try:
|
||||
await message.reply(hasil)
|
||||
|
|
@ -84,10 +76,7 @@ async def gsearch(client, message):
|
|||
query = message.text.split(" ", maxsplit=1)[1]
|
||||
msg = await message.reply_text(f"**Googling** for `{query}` ...")
|
||||
try:
|
||||
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"}
|
||||
html = await http.get(
|
||||
f"https://www.google.com/search?q={query}&gl=id&hl=id&num=17",
|
||||
headers=headers,
|
||||
|
|
@ -116,9 +105,7 @@ async def gsearch(client, message):
|
|||
arr = json.dumps(data, indent=2, ensure_ascii=False)
|
||||
parse = json.loads(arr)
|
||||
total = len(parse)
|
||||
res = "".join(
|
||||
f"<a href='{i['link']}'>{i['title']}</a>\n{i['snippet']}\n\n" for i in parse
|
||||
)
|
||||
res = "".join(f"<a href='{i['link']}'>{i['title']}</a>\n{i['snippet']}\n\n" for i in parse)
|
||||
except Exception:
|
||||
exc = traceback.format_exc()
|
||||
return await msg.edit(exc)
|
||||
|
|
@ -131,9 +118,7 @@ async def gsearch(client, message):
|
|||
@app.on_message(filters.command(["tr", "trans", "translate"], COMMAND_HANDLER))
|
||||
@capture_err
|
||||
async def translate(client, message):
|
||||
if message.reply_to_message and (
|
||||
message.reply_to_message.text or message.reply_to_message.caption
|
||||
):
|
||||
if message.reply_to_message and (message.reply_to_message.text or message.reply_to_message.caption):
|
||||
target_lang = "id" if len(message.command) == 1 else message.text.split()[1]
|
||||
text = message.reply_to_message.text or message.reply_to_message.caption
|
||||
else:
|
||||
|
|
@ -145,28 +130,20 @@ async def translate(client, message):
|
|||
text = message.text.split(None, 2)[2]
|
||||
msg = await message.reply("Menerjemahkan...")
|
||||
try:
|
||||
tekstr = (
|
||||
await http.get(
|
||||
f"https://script.google.com/macros/s/AKfycbyhNk6uVgrtJLEFRUT6y5B2pxETQugCZ9pKvu01-bE1gKkDRsw/exec?q={text}&target={target_lang}"
|
||||
)
|
||||
).json()["text"]
|
||||
tekstr = (await http.get(f"https://script.google.com/macros/s/AKfycbyhNk6uVgrtJLEFRUT6y5B2pxETQugCZ9pKvu01-bE1gKkDRsw/exec?q={text}&target={target_lang}")).json()["text"]
|
||||
except Exception as err:
|
||||
return await msg.edit(f"Error: <code>{str(err)}</code>")
|
||||
try:
|
||||
await msg.edit(f"<code>{tekstr}</code>")
|
||||
except MessageTooLong:
|
||||
url = await rentry(tekstr.text)
|
||||
await msg.edit(
|
||||
f"Your translated text pasted to rentry because has long text:\n{url}"
|
||||
)
|
||||
await msg.edit(f"Your translated text pasted to rentry because has long text:\n{url}")
|
||||
|
||||
|
||||
@app.on_message(filters.command(["tts"], COMMAND_HANDLER))
|
||||
@capture_err
|
||||
async def tts(_, message):
|
||||
if message.reply_to_message and (
|
||||
message.reply_to_message.text or message.reply_to_message.caption
|
||||
):
|
||||
if message.reply_to_message and (message.reply_to_message.text or message.reply_to_message.caption):
|
||||
if len(message.text.split()) == 1:
|
||||
target_lang = "id"
|
||||
else:
|
||||
|
|
@ -218,16 +195,12 @@ async def topho(client, message):
|
|||
if not message.reply_to_message or not message.reply_to_message.sticker:
|
||||
return await message.reply_text("Reply ke sticker untuk mengubah ke foto")
|
||||
if message.reply_to_message.sticker.is_animated:
|
||||
return await message.reply_text(
|
||||
"Ini sticker animasi, command ini hanya untuk sticker biasa."
|
||||
)
|
||||
return await message.reply_text("Ini sticker animasi, command ini hanya untuk sticker biasa.")
|
||||
photo = await client.download_media(
|
||||
message.reply_to_message.sticker.file_id,
|
||||
f"tostick_{message.from_user.id}.jpg",
|
||||
)
|
||||
await message.reply_photo(
|
||||
photo=photo, caption=f"Sticker -> Image\n@{BOT_USERNAME}"
|
||||
)
|
||||
await message.reply_photo(photo=photo, caption=f"Sticker -> Image\n@{BOT_USERNAME}")
|
||||
|
||||
os.remove(photo)
|
||||
except Exception as e:
|
||||
|
|
@ -260,16 +233,10 @@ async def showid(client, message):
|
|||
)
|
||||
file_info = get_file_id(message.reply_to_message)
|
||||
else:
|
||||
_id += (
|
||||
"<b>➲ User ID</b>: "
|
||||
f"<code>{message.from_user.id if message.from_user else 'Anonymous'}</code>\n"
|
||||
)
|
||||
_id += "<b>➲ User ID</b>: " f"<code>{message.from_user.id if message.from_user else 'Anonymous'}</code>\n"
|
||||
file_info = get_file_id(message)
|
||||
if file_info:
|
||||
_id += (
|
||||
f"<b>{file_info.message_type}</b>: "
|
||||
f"<code>{file_info.file_id}</code>\n"
|
||||
)
|
||||
_id += f"<b>{file_info.message_type}</b>: " f"<code>{file_info.file_id}</code>\n"
|
||||
await message.reply_text(_id, quote=True)
|
||||
|
||||
|
||||
|
|
@ -300,12 +267,8 @@ async def who_is(client, message):
|
|||
if message.chat.type in (("supergroup", "channel")):
|
||||
try:
|
||||
chat_member_p = await message.chat.get_member(from_user.id)
|
||||
joined_date = datetime.fromtimestamp(
|
||||
chat_member_p.joined_date or time.time()
|
||||
).strftime("%Y.%m.%d %H:%M:%S")
|
||||
message_out_str += (
|
||||
"<b>➲Joined this Chat on:</b> <code>" f"{joined_date}" "</code>\n"
|
||||
)
|
||||
joined_date = datetime.fromtimestamp(chat_member_p.joined_date or time.time()).strftime("%Y.%m.%d %H:%M:%S")
|
||||
message_out_str += "<b>➲Joined this Chat on:</b> <code>" f"{joined_date}" "</code>\n"
|
||||
except UserNotParticipant:
|
||||
pass
|
||||
if chat_photo := from_user.photo:
|
||||
|
|
@ -332,9 +295,7 @@ async def who_is(client, message):
|
|||
await status_message.delete()
|
||||
|
||||
|
||||
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"}
|
||||
|
||||
|
||||
async def get_content(url):
|
||||
|
|
@ -387,22 +348,16 @@ async def mdl_callback(bot: Client, query: CallbackQuery):
|
|||
try:
|
||||
res = (await http.get(f"https://kuryana.vercel.app/id/{slug}")).json()
|
||||
result += f"<b>Title:</b> <a href='{res['data']['link']}'>{res['data']['title']}</a>\n"
|
||||
result += (
|
||||
f"<b>AKA:</b> <code>{res['data']['others']['also_known_as']}</code>\n\n"
|
||||
)
|
||||
result += f"<b>AKA:</b> <code>{res['data']['others']['also_known_as']}</code>\n\n"
|
||||
result += f"<b>Rating:</b> <code>{res['data']['details']['score']}</code>\n"
|
||||
result += f"<b>Content Rating:</b> <code>{res['data']['details']['content_rating']}</code>\n"
|
||||
result += f"<b>Type:</b> <code>{res['data']['details']['type']}</code>\n"
|
||||
result += (
|
||||
f"<b>Country:</b> <code>{res['data']['details']['country']}</code>\n"
|
||||
)
|
||||
result += f"<b>Country:</b> <code>{res['data']['details']['country']}</code>\n"
|
||||
if res["data"]["details"]["type"] == "Movie":
|
||||
result += f"<b>Release Date:</b> <code>{res['data']['details']['release_date']}</code>\n"
|
||||
elif res["data"]["details"]["type"] == "Drama":
|
||||
result += f"<b>Episode:</b> {res['data']['details']['episodes']}\n"
|
||||
result += (
|
||||
f"<b>Aired:</b> <code>{res['data']['details']['aired']}</code>\n"
|
||||
)
|
||||
result += f"<b>Aired:</b> <code>{res['data']['details']['aired']}</code>\n"
|
||||
try:
|
||||
result += f"<b>Aired on:</b> <code>{res['data']['details']['aired_on']}</code>\n"
|
||||
except:
|
||||
|
|
@ -411,17 +366,11 @@ async def mdl_callback(bot: Client, query: CallbackQuery):
|
|||
result += f"<b>Original Network:</b> <code>{res['data']['details']['original_network']}</code>\n"
|
||||
except:
|
||||
pass
|
||||
result += (
|
||||
f"<b>Duration:</b> <code>{res['data']['details']['duration']}</code>\n"
|
||||
)
|
||||
result += (
|
||||
f"<b>Genre:</b> <code>{res['data']['others']['genres']}</code>\n\n"
|
||||
)
|
||||
result += f"<b>Duration:</b> <code>{res['data']['details']['duration']}</code>\n"
|
||||
result += f"<b>Genre:</b> <code>{res['data']['others']['genres']}</code>\n\n"
|
||||
result += f"<b>Synopsis:</b> <code>{res['data']['synopsis']}</code>\n"
|
||||
result += f"<b>Tags:</b> <code>{res['data']['others']['tags']}</code>\n"
|
||||
btn = InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton("🎬 Open MyDramaList", url=res["data"]["link"])]]
|
||||
)
|
||||
btn = InlineKeyboardMarkup([[InlineKeyboardButton("🎬 Open MyDramaList", url=res["data"]["link"])]])
|
||||
await query.message.edit_text(result, reply_markup=btn)
|
||||
except Exception as e:
|
||||
await query.message.edit_text(f"<b>ERROR:</b>\n<code>{e}</code>")
|
||||
|
|
@ -435,13 +384,9 @@ async def mdl_callback(bot: Client, query: CallbackQuery):
|
|||
async def imdb1_search(client, message):
|
||||
BTN = []
|
||||
if message.sender_chat:
|
||||
return await message.reply(
|
||||
"Mohon maaf fitur tidak tersedia untuk akun channel, harap ganti ke akun biasa.."
|
||||
)
|
||||
return await message.reply("Mohon maaf fitur tidak tersedia untuk akun channel, harap ganti ke akun biasa..")
|
||||
if len(message.command) == 1:
|
||||
return await message.reply(
|
||||
"Berikan aku nama series atau movie yang ingin dicari. 🤷🏻♂️", quote=True
|
||||
)
|
||||
return await message.reply("Berikan aku nama series atau movie yang ingin dicari. 🤷🏻♂️", quote=True)
|
||||
r, judul = message.text.split(None, 1)
|
||||
k = await message.reply("🔎 Sedang mencari di Database IMDB..", quote=True)
|
||||
msg = ""
|
||||
|
|
@ -458,11 +403,7 @@ async def imdb1_search(client, message):
|
|||
type = movie.get("q").replace("feature", "movie").capitalize()
|
||||
movieID = re.findall(r"tt(\d+)", movie.get("id"))[0]
|
||||
msg += f"{count}. {title} {year} ~ {type}\n"
|
||||
BTN.append(
|
||||
InlineKeyboardButton(
|
||||
text=count, callback_data=f"imdbid#{message.from_user.id}#{movieID}"
|
||||
)
|
||||
)
|
||||
BTN.append(InlineKeyboardButton(text=count, callback_data=f"imdbid#{message.from_user.id}#{movieID}"))
|
||||
buttons.add(*BTN)
|
||||
await k.edit(msg, reply_markup=buttons)
|
||||
except Exception as err:
|
||||
|
|
@ -480,18 +421,12 @@ async def imdbcb_backup(bot: Client, query: CallbackQuery):
|
|||
url = f"https://www.imdb.com/title/tt{movie}/"
|
||||
resp = await get_content(url)
|
||||
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])
|
||||
res_str = ""
|
||||
type = f"<code>{r_json['@type']}</code>" if r_json.get("@type") else ""
|
||||
if r_json.get("name"):
|
||||
try:
|
||||
tahun = (
|
||||
sop.select('ul[data-testid="hero-title-block__metadata"]')[0]
|
||||
.find(class_="sc-8c396aa2-2 itZqyK")
|
||||
.text
|
||||
)
|
||||
tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find(class_="sc-8c396aa2-2 itZqyK").text
|
||||
except:
|
||||
tahun = "-"
|
||||
res_str += f"<b>📹 Judul:</b> <a href='{url}'>{r_json['name']} [{tahun}]</a> (<code>{type}</code>)\n"
|
||||
|
|
@ -500,63 +435,31 @@ async def imdbcb_backup(bot: Client, query: CallbackQuery):
|
|||
else:
|
||||
res_str += "\n"
|
||||
if sop.select('li[data-testid="title-techspec_runtime"]'):
|
||||
durasi = (
|
||||
sop.select('li[data-testid="title-techspec_runtime"]')[0]
|
||||
.find(class_="ipc-metadata-list-item__content-container")
|
||||
.text
|
||||
)
|
||||
durasi = sop.select('li[data-testid="title-techspec_runtime"]')[0].find(class_="ipc-metadata-list-item__content-container").text
|
||||
res_str += f"<b>Durasi:</b> <code>{GoogleTranslator('auto', 'id').translate(durasi)}</code>\n"
|
||||
if r_json.get("contentRating"):
|
||||
res_str += f"<b>Kategori:</b> <code>{r_json['contentRating']}</code> \n"
|
||||
if r_json.get("aggregateRating"):
|
||||
res_str += f"<b>Peringkat:</b> <code>{r_json['aggregateRating']['ratingValue']}⭐️ dari {r_json['aggregateRating']['ratingCount']} pengguna</code> \n"
|
||||
if sop.select('li[data-testid="title-details-releasedate"]'):
|
||||
rilis = (
|
||||
sop.select('li[data-testid="title-details-releasedate"]')[0]
|
||||
.find(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)
|
||||
.text
|
||||
)
|
||||
rilis_url = sop.select('li[data-testid="title-details-releasedate"]')[
|
||||
0
|
||||
].find(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)[
|
||||
"href"
|
||||
]
|
||||
res_str += (
|
||||
f"<b>Rilis:</b> <a href='https://www.imdb.com{rilis_url}'>{rilis}</a>\n"
|
||||
)
|
||||
rilis = sop.select('li[data-testid="title-details-releasedate"]')[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link").text
|
||||
rilis_url = sop.select('li[data-testid="title-details-releasedate"]')[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")["href"]
|
||||
res_str += f"<b>Rilis:</b> <a href='https://www.imdb.com{rilis_url}'>{rilis}</a>\n"
|
||||
if r_json.get("genre"):
|
||||
genre = "".join(
|
||||
f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, "
|
||||
if i in GENRES_EMOJI
|
||||
else f"#{i.replace('-', '_').replace(' ', '_')}, "
|
||||
for i in r_json["genre"]
|
||||
)
|
||||
genre = "".join(f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, " if i in GENRES_EMOJI else f"#{i.replace('-', '_').replace(' ', '_')}, " for i in r_json["genre"])
|
||||
|
||||
genre = genre[:-2]
|
||||
res_str += f"<b>Genre:</b> {genre}\n"
|
||||
if sop.select('li[data-testid="title-details-origin"]'):
|
||||
country = "".join(
|
||||
f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
|
||||
for country in sop.select('li[data-testid="title-details-origin"]')[
|
||||
0
|
||||
].findAll(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)
|
||||
for country in sop.select('li[data-testid="title-details-origin"]')[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
|
||||
)
|
||||
country = country[:-2]
|
||||
res_str += f"<b>Negara:</b> {country}\n"
|
||||
if sop.select('li[data-testid="title-details-languages"]'):
|
||||
language = "".join(
|
||||
f"#{lang.text.replace(' ', '_').replace('-', '_')}, "
|
||||
for lang in sop.select('li[data-testid="title-details-languages"]')[
|
||||
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 sop.select('li[data-testid="title-details-languages"]')[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
|
||||
)
|
||||
language = language[:-2]
|
||||
res_str += f"<b>Bahasa:</b> {language}\n"
|
||||
|
|
@ -587,9 +490,7 @@ async def imdbcb_backup(bot: Client, query: CallbackQuery):
|
|||
actors = actors[:-2]
|
||||
res_str += f"<b>Pemeran:</b> {actors}\n\n"
|
||||
if r_json.get("description"):
|
||||
summary = GoogleTranslator("auto", "id").translate(
|
||||
r_json.get("description")
|
||||
)
|
||||
summary = GoogleTranslator("auto", "id").translate(r_json.get("description"))
|
||||
res_str += f"<b>📜 Plot: </b> <code>{summary}</code>\n\n"
|
||||
if r_json.get("keywords"):
|
||||
keywords = r_json["keywords"].split(",")
|
||||
|
|
@ -600,11 +501,7 @@ async def imdbcb_backup(bot: Client, query: CallbackQuery):
|
|||
key_ = key_[:-2]
|
||||
res_str += f"<b>🔥 Kata Kunci:</b> {key_} \n"
|
||||
if sop.select('li[data-testid="award_information"]'):
|
||||
awards = (
|
||||
sop.select('li[data-testid="award_information"]')[0]
|
||||
.find(class_="ipc-metadata-list-item__list-content-item")
|
||||
.text
|
||||
)
|
||||
awards = sop.select('li[data-testid="award_information"]')[0].find(class_="ipc-metadata-list-item__list-content-item").text
|
||||
res_str += f"<b>🏆 Penghargaan:</b> <code>{GoogleTranslator('auto', 'id').translate(awards)}</code>\n\n"
|
||||
else:
|
||||
res_str += "\n"
|
||||
|
|
@ -614,23 +511,13 @@ async def imdbcb_backup(bot: Client, query: CallbackQuery):
|
|||
markup = InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"
|
||||
),
|
||||
InlineKeyboardButton("🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"),
|
||||
InlineKeyboardButton("▶️ Trailer", url=trailer_url),
|
||||
]
|
||||
]
|
||||
)
|
||||
else:
|
||||
markup = InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"
|
||||
)
|
||||
]
|
||||
]
|
||||
)
|
||||
markup = InlineKeyboardMarkup([[InlineKeyboardButton("🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}")]])
|
||||
if thumb := r_json.get("image"):
|
||||
try:
|
||||
await query.message.reply_photo(
|
||||
|
|
@ -657,9 +544,7 @@ async def imdbcb_backup(bot: Client, query: CallbackQuery):
|
|||
)
|
||||
await query.message.delete()
|
||||
else:
|
||||
await query.message.edit(
|
||||
res_str, reply_markup=markup, disable_web_page_preview=False
|
||||
)
|
||||
await query.message.edit(res_str, reply_markup=markup, disable_web_page_preview=False)
|
||||
await query.answer()
|
||||
except MessageNotModified:
|
||||
pass
|
||||
|
|
@ -696,11 +581,7 @@ async def imdb_en_search(client, message):
|
|||
type = movie.get("qid").replace("feature", "movie").capitalize()
|
||||
movieID = re.findall(r"tt(\d+)", movie.get("id"))[0]
|
||||
msg += f"{count}. {titles} {year} ~ {type}\n"
|
||||
BTN.append(
|
||||
InlineKeyboardButton(
|
||||
text=count, callback_data=f"imdben#{message.from_user.id}#{movieID}"
|
||||
)
|
||||
)
|
||||
BTN.append(InlineKeyboardButton(text=count, callback_data=f"imdben#{message.from_user.id}#{movieID}"))
|
||||
buttons.add(*BTN)
|
||||
await k.edit(msg, reply_markup=buttons)
|
||||
except Exception as err:
|
||||
|
|
@ -719,18 +600,12 @@ async def imdb_en_callback(bot: Client, query: CallbackQuery):
|
|||
url = f"https://www.imdb.com/title/tt{movie}/"
|
||||
resp = await get_content(url)
|
||||
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])
|
||||
res_str = ""
|
||||
type = f"<code>{r_json['@type']}</code>" if r_json.get("@type") else ""
|
||||
if r_json.get("name"):
|
||||
try:
|
||||
tahun = (
|
||||
sop.select('ul[data-testid="hero-title-block__metadata"]')[0]
|
||||
.find(class_="sc-8c396aa2-2 itZqyK")
|
||||
.text
|
||||
)
|
||||
tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find(class_="sc-8c396aa2-2 itZqyK").text
|
||||
except:
|
||||
tahun = "-"
|
||||
res_str += f"<b>📹 Title:</b> <a href='{url}'>{r_json['name']} [{tahun}]</a> (<code>{type}</code>)\n"
|
||||
|
|
@ -739,61 +614,31 @@ async def imdb_en_callback(bot: Client, query: CallbackQuery):
|
|||
else:
|
||||
res_str += "\n"
|
||||
if sop.select('li[data-testid="title-techspec_runtime"]'):
|
||||
durasi = (
|
||||
sop.select('li[data-testid="title-techspec_runtime"]')[0]
|
||||
.find(class_="ipc-metadata-list-item__content-container")
|
||||
.text
|
||||
)
|
||||
durasi = sop.select('li[data-testid="title-techspec_runtime"]')[0].find(class_="ipc-metadata-list-item__content-container").text
|
||||
res_str += f"<b>Duration:</b> <code>{durasi}</code>\n"
|
||||
if r_json.get("contentRating"):
|
||||
res_str += f"<b>Category:</b> <code>{r_json['contentRating']}</code> \n"
|
||||
if r_json.get("aggregateRating"):
|
||||
res_str += f"<b>Rating:</b> <code>{r_json['aggregateRating']['ratingValue']}⭐️ from {r_json['aggregateRating']['ratingCount']} user</code> \n"
|
||||
if sop.select('li[data-testid="title-details-releasedate"]'):
|
||||
rilis = (
|
||||
sop.select('li[data-testid="title-details-releasedate"]')[0]
|
||||
.find(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)
|
||||
.text
|
||||
)
|
||||
rilis_url = sop.select('li[data-testid="title-details-releasedate"]')[
|
||||
0
|
||||
].find(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)[
|
||||
"href"
|
||||
]
|
||||
rilis = sop.select('li[data-testid="title-details-releasedate"]')[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link").text
|
||||
rilis_url = sop.select('li[data-testid="title-details-releasedate"]')[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")["href"]
|
||||
res_str += f"<b>Release Data:</b> <a href='https://www.imdb.com{rilis_url}'>{rilis}</a>\n"
|
||||
if r_json.get("genre"):
|
||||
genre = "".join(
|
||||
f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, "
|
||||
if i in GENRES_EMOJI
|
||||
else f"#{i.replace('-', '_').replace(' ', '_')}, "
|
||||
for i in r_json["genre"]
|
||||
)
|
||||
genre = "".join(f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, " if i in GENRES_EMOJI else f"#{i.replace('-', '_').replace(' ', '_')}, " for i in r_json["genre"])
|
||||
|
||||
genre = genre[:-2]
|
||||
res_str += f"<b>Genre:</b> {genre}\n"
|
||||
if sop.select('li[data-testid="title-details-origin"]'):
|
||||
country = "".join(
|
||||
f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
|
||||
for country in sop.select('li[data-testid="title-details-origin"]')[
|
||||
0
|
||||
].findAll(
|
||||
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
|
||||
)
|
||||
for country in sop.select('li[data-testid="title-details-origin"]')[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
|
||||
)
|
||||
country = country[:-2]
|
||||
res_str += f"<b>Country:</b> {country}\n"
|
||||
if sop.select('li[data-testid="title-details-languages"]'):
|
||||
language = "".join(
|
||||
f"#{lang.text.replace(' ', '_').replace('-', '_')}, "
|
||||
for lang in sop.select('li[data-testid="title-details-languages"]')[
|
||||
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 sop.select('li[data-testid="title-details-languages"]')[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
|
||||
)
|
||||
language = language[:-2]
|
||||
res_str += f"<b>Language:</b> {language}\n"
|
||||
|
|
@ -834,11 +679,7 @@ async def imdb_en_callback(bot: Client, query: CallbackQuery):
|
|||
key_ = key_[:-2]
|
||||
res_str += f"<b>🔥 Keywords:</b> {key_} \n"
|
||||
if sop.select('li[data-testid="award_information"]'):
|
||||
awards = (
|
||||
sop.select('li[data-testid="award_information"]')[0]
|
||||
.find(class_="ipc-metadata-list-item__list-content-item")
|
||||
.text
|
||||
)
|
||||
awards = sop.select('li[data-testid="award_information"]')[0].find(class_="ipc-metadata-list-item__list-content-item").text
|
||||
res_str += f"<b>🏆 Awards:</b> <code>{awards}</code>\n\n"
|
||||
else:
|
||||
res_str += "\n"
|
||||
|
|
@ -848,23 +689,13 @@ async def imdb_en_callback(bot: Client, query: CallbackQuery):
|
|||
markup = InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"
|
||||
),
|
||||
InlineKeyboardButton("🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"),
|
||||
InlineKeyboardButton("▶️ Trailer", url=trailer_url),
|
||||
]
|
||||
]
|
||||
)
|
||||
else:
|
||||
markup = InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"
|
||||
)
|
||||
]
|
||||
]
|
||||
)
|
||||
markup = InlineKeyboardMarkup([[InlineKeyboardButton("🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}")]])
|
||||
if thumb := r_json.get("image"):
|
||||
try:
|
||||
await query.message.reply_photo(
|
||||
|
|
@ -891,9 +722,7 @@ async def imdb_en_callback(bot: Client, query: CallbackQuery):
|
|||
)
|
||||
await query.message.delete()
|
||||
else:
|
||||
await query.message.edit(
|
||||
res_str, reply_markup=markup, disable_web_page_preview=False
|
||||
)
|
||||
await query.message.edit(res_str, reply_markup=markup, disable_web_page_preview=False)
|
||||
await query.answer()
|
||||
except Exception:
|
||||
exc = traceback.format_exc()
|
||||
|
|
|
|||
|
|
@ -47,9 +47,7 @@ async def job_close():
|
|||
jam = now.strftime("%H:%M")
|
||||
try:
|
||||
# version = check_output(["git log -1 --date=format:v%y.%m%d.%H%M --pretty=format:%cd"], shell=True).decode()
|
||||
reply_markup = InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton(text="❤️", callback_data="nightmd")]]
|
||||
)
|
||||
reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="❤️", callback_data="nightmd")]])
|
||||
await app.set_chat_permissions(
|
||||
-1001128045651,
|
||||
ChatPermissions(can_send_messages=False, can_invite_users=True),
|
||||
|
|
@ -87,9 +85,7 @@ async def job_close_ymoviez():
|
|||
jam = now.strftime("%H:%M")
|
||||
try:
|
||||
# version = check_output(["git log -1 --date=format:v%y.%m%d.%H%M --pretty=format:%cd"], shell=True).decode()
|
||||
reply_markup = InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton(text="❤️", callback_data="nightmd")]]
|
||||
)
|
||||
reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="❤️", callback_data="nightmd")]])
|
||||
await app.set_chat_permissions(
|
||||
-1001255283935,
|
||||
ChatPermissions(can_send_messages=False, can_invite_users=True),
|
||||
|
|
@ -126,9 +122,7 @@ async def job_open():
|
|||
jam = now.strftime("%H:%M")
|
||||
try:
|
||||
# version = check_output(["git log -1 --date=format:v%y.%m%d.%H%M --pretty=format:%cd"], shell=True).decode()
|
||||
reply_markup = InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton(text="❤️", callback_data="nightmd")]]
|
||||
)
|
||||
reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="❤️", callback_data="nightmd")]])
|
||||
await app.set_chat_permissions(
|
||||
-1001128045651,
|
||||
ChatPermissions(
|
||||
|
|
@ -172,9 +166,7 @@ async def job_open_ymoviez():
|
|||
jam = now.strftime("%H:%M")
|
||||
try:
|
||||
# version = check_output(["git log -1 --date=format:v%y.%m%d.%H%M --pretty=format:%cd"], shell=True).decode()
|
||||
reply_markup = InlineKeyboardMarkup(
|
||||
[[InlineKeyboardButton(text="❤️", callback_data="nightmd")]]
|
||||
)
|
||||
reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="❤️", callback_data="nightmd")]])
|
||||
await app.set_chat_permissions(
|
||||
-1001255283935,
|
||||
ChatPermissions(
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ SOFTWARE.
|
|||
from re import findall
|
||||
from pyrogram import filters
|
||||
from misskaty import app
|
||||
from misskaty.vars import COMMAND_HANDLER
|
||||
from misskaty.core.decorator.errors import capture_err
|
||||
from misskaty.core.decorator.permissions import adminsOnly
|
||||
from misskaty.core.keyboard import ikb
|
||||
|
|
@ -64,11 +63,9 @@ async def save_notee(_, message):
|
|||
_type = "text" if message.reply_to_message.text else "sticker"
|
||||
note = {
|
||||
"type": _type,
|
||||
"data": message.reply_to_message.text.markdown
|
||||
if _type == "text"
|
||||
else message.reply_to_message.sticker.file_id,
|
||||
"data": message.reply_to_message.text.markdown if _type == "text" else message.reply_to_message.sticker.file_id,
|
||||
}
|
||||
prefix = message.text.split()[0][0]
|
||||
message.text.split()[0][0]
|
||||
chat_id = message.chat.id
|
||||
await save_note(chat_id, name, note)
|
||||
await message.reply(f"__**Saved note {name}.**__")
|
||||
|
|
@ -77,7 +74,7 @@ async def save_notee(_, message):
|
|||
@app.on_message(filters.command("notes") & ~filters.private)
|
||||
@capture_err
|
||||
async def get_notes(_, message):
|
||||
prefix = message.text.split()[0][0]
|
||||
message.text.split()[0][0]
|
||||
chat_id = message.chat.id
|
||||
|
||||
_notes = await get_note_names(chat_id)
|
||||
|
|
@ -104,8 +101,7 @@ async def get_one_note(_, message):
|
|||
data = _note["data"]
|
||||
keyb = None
|
||||
if findall(r"\[.+\,.+\]", data):
|
||||
keyboard = extract_text_and_keyb(ikb, data)
|
||||
if keyboard:
|
||||
if keyboard := extract_text_and_keyb(ikb, data):
|
||||
data, keyb = keyboard
|
||||
await message.reply_text(
|
||||
data,
|
||||
|
|
@ -125,7 +121,7 @@ async def del_note(_, message):
|
|||
if not name:
|
||||
return await message.reply("**Usage**\n__/delete [NOTE_NAME]__")
|
||||
|
||||
prefix = message.text.split()[0][0]
|
||||
message.text.split()[0][0]
|
||||
chat_id = message.chat.id
|
||||
|
||||
deleted = await delete_note(chat_id, name)
|
||||
|
|
|
|||
|
|
@ -22,9 +22,7 @@ __HELP__ = "/ocr [reply to photo] - Read Text From Image"
|
|||
async def ocr(_, message):
|
||||
reply = message.reply_to_message
|
||||
if not reply or not reply.photo and not reply.sticker:
|
||||
return await message.reply_text(
|
||||
f"Reply photo with /{message.command[0]} command"
|
||||
)
|
||||
return await message.reply_text(f"Reply photo with /{message.command[0]} command")
|
||||
msg = await message.reply("Reading image...")
|
||||
try:
|
||||
file_path = await reply.download()
|
||||
|
|
|
|||
|
|
@ -64,18 +64,14 @@ async def create(_, message):
|
|||
reply = message.reply_to_message
|
||||
target = str(message.command[0]).split("@", maxsplit=1)[0]
|
||||
if not reply and len(message.command) < 2:
|
||||
return await message.reply_text(
|
||||
f"**Reply To A Message With /{target} or with command**"
|
||||
)
|
||||
return await message.reply_text(f"**Reply To A Message With /{target} or with command**")
|
||||
|
||||
msg = await message.reply_text("`Pasting to Rentry...`")
|
||||
data = ""
|
||||
limit = 1024 * 1024
|
||||
if reply and reply.document:
|
||||
if reply.document.file_size > limit:
|
||||
return await msg.edit(
|
||||
f"**You can only paste files smaller than {humanbytes(limit)}.**"
|
||||
)
|
||||
return await msg.edit(f"**You can only paste files smaller than {humanbytes(limit)}.**")
|
||||
if not pattern.search(reply.document.mime_type):
|
||||
return await msg.edit("**Only text files can be pasted.**")
|
||||
file = await reply.download()
|
||||
|
|
@ -98,9 +94,7 @@ async def create(_, message):
|
|||
if message.from_user.username:
|
||||
uname = f"@{message.from_user.username}"
|
||||
else:
|
||||
uname = (
|
||||
f"[{message.from_user.first_name}](tg://user?id={message.from_user.id})"
|
||||
)
|
||||
uname = f"[{message.from_user.first_name}](tg://user?id={message.from_user.id})"
|
||||
else:
|
||||
uname = message.sender_chat.title
|
||||
|
||||
|
|
@ -113,13 +107,7 @@ async def create(_, message):
|
|||
if not url:
|
||||
return await msg.edit("Text Too Short Or File Problems")
|
||||
button = [[InlineKeyboardButton("Open Link", url=url)]]
|
||||
button.append(
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"Share Link", url=f"https://telegram.me/share/url?url={url}"
|
||||
)
|
||||
]
|
||||
)
|
||||
button.append([InlineKeyboardButton("Share Link", url=f"https://telegram.me/share/url?url={url}")])
|
||||
|
||||
pasted = f"**Successfully pasted your data to Rentry<a href='{url}'>.</a>\n\nPaste by {uname}**"
|
||||
await msg.edit(pasted, reply_markup=InlineKeyboardMarkup(button))
|
||||
|
|
@ -130,18 +118,14 @@ async def create(_, message):
|
|||
reply = message.reply_to_message
|
||||
target = str(message.command[0]).split("@", maxsplit=1)[0]
|
||||
if not reply and len(message.command) < 2:
|
||||
return await message.reply_text(
|
||||
f"**Reply To A Message With /{target} or with command**"
|
||||
)
|
||||
return await message.reply_text(f"**Reply To A Message With /{target} or with command**")
|
||||
|
||||
msg = await message.reply_text("`Pasting to TempPaste...`")
|
||||
data = ""
|
||||
limit = 1024 * 1024
|
||||
if reply and reply.document:
|
||||
if reply.document.file_size > limit:
|
||||
return await msg.edit(
|
||||
f"**You can only paste files smaller than {humanbytes(limit)}.**"
|
||||
)
|
||||
return await msg.edit(f"**You can only paste files smaller than {humanbytes(limit)}.**")
|
||||
if not pattern.search(reply.document.mime_type):
|
||||
return await msg.edit("**Only text files can be pasted.**")
|
||||
file = await reply.download()
|
||||
|
|
@ -164,9 +148,7 @@ async def create(_, message):
|
|||
if message.from_user.username:
|
||||
uname = f"@{message.from_user.username}"
|
||||
else:
|
||||
uname = (
|
||||
f"[{message.from_user.first_name}](tg://user?id={message.from_user.id})"
|
||||
)
|
||||
uname = f"[{message.from_user.first_name}](tg://user?id={message.from_user.id})"
|
||||
else:
|
||||
uname = message.sender_chat.title
|
||||
|
||||
|
|
@ -190,13 +172,7 @@ async def create(_, message):
|
|||
if not url:
|
||||
return await msg.edit("Text Too Short Or File Problems")
|
||||
button = [[InlineKeyboardButton("Open Link", url=url)]]
|
||||
button.append(
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"Share Link", url=f"https://telegram.me/share/url?url={url}"
|
||||
)
|
||||
]
|
||||
)
|
||||
button.append([InlineKeyboardButton("Share Link", url=f"https://telegram.me/share/url?url={url}")])
|
||||
|
||||
pasted = f"**Successfully pasted your data to Tempaste<a href='{url}'>.</a>\n\nPaste by {uname}**"
|
||||
await msg.edit(pasted, reply_markup=InlineKeyboardMarkup(button))
|
||||
|
|
|
|||
|
|
@ -23,9 +23,7 @@ async def ping(_, message):
|
|||
end_t = time.time()
|
||||
time_taken_s = round(end_t - start_t, 3)
|
||||
try:
|
||||
await rm.edit(
|
||||
f"<b>🐈 MissKatyBot online.</b>\n\n<b>Ping:</b> <code>{time_taken_s} detik</code>\n<b>Uptime:</b> <code>{currentTime}</code>"
|
||||
)
|
||||
await rm.edit(f"<b>🐈 MissKatyBot online.</b>\n\n<b>Ping:</b> <code>{time_taken_s} detik</code>\n<b>Uptime:</b> <code>{currentTime}</code>")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
|
@ -51,9 +49,7 @@ async def ping_handler(_, message):
|
|||
check=True,
|
||||
capture_output=True,
|
||||
)
|
||||
resp_time = findall(r"time=.+m?s", shell.stdout, MULTILINE)[0].replace(
|
||||
"time=", ""
|
||||
)
|
||||
resp_time = findall(r"time=.+m?s", shell.stdout, MULTILINE)[0].replace("time=", "")
|
||||
|
||||
text += f" **{dc.upper()}:** {resp_time} ✅\n"
|
||||
except Exception:
|
||||
|
|
|
|||
|
|
@ -38,11 +38,7 @@ async def get_message_sender_name(m: Message):
|
|||
if m.forward_sender_name:
|
||||
return m.forward_sender_name
|
||||
elif m.forward_from:
|
||||
return (
|
||||
f"{m.forward_from.first_name} {m.forward_from.last_name}"
|
||||
if m.forward_from.last_name
|
||||
else m.forward_from.first_name
|
||||
)
|
||||
return f"{m.forward_from.first_name} {m.forward_from.last_name}" if m.forward_from.last_name else m.forward_from.first_name
|
||||
|
||||
elif m.forward_from_chat:
|
||||
return m.forward_from_chat.title
|
||||
|
|
@ -61,42 +57,22 @@ async def get_message_sender_name(m: Message):
|
|||
|
||||
async def get_custom_emoji(m: Message):
|
||||
if m.forward_date:
|
||||
return (
|
||||
""
|
||||
if m.forward_sender_name
|
||||
or not m.forward_from
|
||||
and m.forward_from_chat
|
||||
or not m.forward_from
|
||||
else m.forward_from.emoji_status.custom_emoji_id
|
||||
)
|
||||
return "" if m.forward_sender_name or not m.forward_from and m.forward_from_chat or not m.forward_from else m.forward_from.emoji_status.custom_emoji_id
|
||||
|
||||
return m.from_user.emoji_status.custom_emoji_id if m.from_user else ""
|
||||
|
||||
|
||||
async def get_message_sender_username(m: Message):
|
||||
if m.forward_date:
|
||||
if (
|
||||
not m.forward_sender_name
|
||||
and not m.forward_from
|
||||
and m.forward_from_chat
|
||||
and m.forward_from_chat.username
|
||||
):
|
||||
if not m.forward_sender_name and not m.forward_from and m.forward_from_chat and m.forward_from_chat.username:
|
||||
return m.forward_from_chat.username
|
||||
elif (
|
||||
not m.forward_sender_name
|
||||
and not m.forward_from
|
||||
and m.forward_from_chat
|
||||
or m.forward_sender_name
|
||||
or not m.forward_from
|
||||
):
|
||||
elif not m.forward_sender_name and not m.forward_from and m.forward_from_chat or m.forward_sender_name or not m.forward_from:
|
||||
return ""
|
||||
else:
|
||||
return m.forward_from.username or ""
|
||||
elif m.from_user and m.from_user.username:
|
||||
return m.from_user.username
|
||||
elif (
|
||||
m.from_user or m.sender_chat and not m.sender_chat.username or not m.sender_chat
|
||||
):
|
||||
elif m.from_user or m.sender_chat and not m.sender_chat.username or not m.sender_chat:
|
||||
return ""
|
||||
else:
|
||||
return m.sender_chat.username
|
||||
|
|
@ -104,25 +80,14 @@ async def get_message_sender_username(m: Message):
|
|||
|
||||
async def get_message_sender_photo(m: Message):
|
||||
if m.forward_date:
|
||||
if (
|
||||
not m.forward_sender_name
|
||||
and not m.forward_from
|
||||
and m.forward_from_chat
|
||||
and m.forward_from_chat.photo
|
||||
):
|
||||
if not m.forward_sender_name and not m.forward_from and m.forward_from_chat and m.forward_from_chat.photo:
|
||||
return {
|
||||
"small_file_id": m.forward_from_chat.photo.small_file_id,
|
||||
"small_photo_unique_id": m.forward_from_chat.photo.small_photo_unique_id,
|
||||
"big_file_id": m.forward_from_chat.photo.big_file_id,
|
||||
"big_photo_unique_id": m.forward_from_chat.photo.big_photo_unique_id,
|
||||
}
|
||||
elif (
|
||||
not m.forward_sender_name
|
||||
and not m.forward_from
|
||||
and m.forward_from_chat
|
||||
or m.forward_sender_name
|
||||
or not m.forward_from
|
||||
):
|
||||
elif not m.forward_sender_name and not m.forward_from and m.forward_from_chat or m.forward_sender_name or not m.forward_from:
|
||||
return ""
|
||||
else:
|
||||
return (
|
||||
|
|
@ -200,16 +165,10 @@ async def pyrogram_to_quotly(messages):
|
|||
the_message_dict_to_append["avatar"] = True
|
||||
the_message_dict_to_append["from"] = {}
|
||||
the_message_dict_to_append["from"]["id"] = await get_message_sender_id(message)
|
||||
the_message_dict_to_append["from"]["name"] = await get_message_sender_name(
|
||||
message
|
||||
)
|
||||
the_message_dict_to_append["from"][
|
||||
"username"
|
||||
] = await get_message_sender_username(message)
|
||||
the_message_dict_to_append["from"]["name"] = await get_message_sender_name(message)
|
||||
the_message_dict_to_append["from"]["username"] = await get_message_sender_username(message)
|
||||
the_message_dict_to_append["from"]["type"] = message.chat.type.name.lower()
|
||||
the_message_dict_to_append["from"]["photo"] = await get_message_sender_photo(
|
||||
message
|
||||
)
|
||||
the_message_dict_to_append["from"]["photo"] = await get_message_sender_photo(message)
|
||||
if message.reply_to_message:
|
||||
the_message_dict_to_append["replyMessage"] = {
|
||||
"name": await get_message_sender_name(message.reply_to_message),
|
||||
|
|
@ -265,9 +224,7 @@ async def msg_quotly_cmd(c: Client, m: Message):
|
|||
except Exception:
|
||||
return await m.reply_text("🤷🏻♂️")
|
||||
try:
|
||||
messages_one = await c.get_messages(
|
||||
chat_id=m.chat.id, message_ids=m.reply_to_message.id, replies=-1
|
||||
)
|
||||
messages_one = await c.get_messages(chat_id=m.chat.id, message_ids=m.reply_to_message.id, replies=-1)
|
||||
messages = [messages_one]
|
||||
except Exception:
|
||||
return await m.reply_text("🤷🏻♂️")
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
# This plugin to scrape from melongmovie, and lk21
|
||||
from bs4 import BeautifulSoup
|
||||
import aiohttp
|
||||
import re
|
||||
import traceback
|
||||
from misskaty import app, BOT_USERNAME
|
||||
|
|
@ -41,9 +40,7 @@ async def nodrakor(_, message):
|
|||
|
||||
msg = await message.reply("Sedang proses scrap, mohon tunggu..")
|
||||
try:
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
html = await http.get(f"https://109.234.34.246/?s={judul}", headers=headers)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
res = soup.find_all(class_="content-thumbnail text-center")
|
||||
|
|
@ -55,9 +52,7 @@ async def nodrakor(_, message):
|
|||
if not data:
|
||||
return await msg.edit("Oops, data film tidak ditemukan.")
|
||||
res = "".join(f"<b>{i['judul']}</b>\n{i['link']}\n\n" for i in data)
|
||||
await msg.edit(
|
||||
f"<b>Hasil Pencarian di Nodrakor:</b>\n{res}\nScraped by @{BOT_USERNAME}"
|
||||
)
|
||||
await msg.edit(f"<b>Hasil Pencarian di Nodrakor:</b>\n{res}\nScraped by @{BOT_USERNAME}")
|
||||
except Exception as e:
|
||||
await msg.edit(f"ERROR: {str(e)}")
|
||||
|
||||
|
|
@ -72,13 +67,9 @@ async def ngefilm21(_, message):
|
|||
|
||||
msg = await message.reply("Sedang proses scrap, mohon tunggu..")
|
||||
try:
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
|
||||
html = await http.get(
|
||||
f"http://185.237.253.209/search?q={title}", headers=headers
|
||||
)
|
||||
html = await http.get(f"http://185.237.253.209/search?q={title}", headers=headers)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
res = soup.find_all("h2")
|
||||
data = []
|
||||
|
|
@ -105,19 +96,12 @@ async def movikucc(_, message):
|
|||
judul = message.text.split(" ", maxsplit=1)[1]
|
||||
msg = await message.reply("Sedang proses scrap, mohon tunggu..")
|
||||
try:
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
html = await http.get(f"https://107.152.39.187/?s={judul}", headers=headers)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
data = soup.find_all(class_="bx")
|
||||
res = "".join(
|
||||
f"<b>Judul: {i.find_all('a')[0]['title']}</b>\nLink: {i.find_all('a')[0]['href']}\n\n"
|
||||
for i in data
|
||||
)
|
||||
await msg.edit(
|
||||
f"<b>Hasil Scrap di Movieku.cc:</b>\n{res} ⚠️ Gunakan command /movieku_scrap <b>[link]</b> untuk mengambil link download (hanya untuk movie)."
|
||||
)
|
||||
res = "".join(f"<b>Judul: {i.find_all('a')[0]['title']}</b>\nLink: {i.find_all('a')[0]['href']}\n\n" for i in data)
|
||||
await msg.edit(f"<b>Hasil Scrap di Movieku.cc:</b>\n{res} ⚠️ Gunakan command /movieku_scrap <b>[link]</b> untuk mengambil link download (hanya untuk movie).")
|
||||
except Exception as e:
|
||||
await msg.edit(f"ERROR: {str(e)}")
|
||||
|
||||
|
|
@ -131,13 +115,9 @@ async def savefilm21(_, message):
|
|||
judul = ""
|
||||
msg = await message.reply("Sedang proses scrap, mohon tunggu..")
|
||||
try:
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
|
||||
html = await http.get(
|
||||
f"http://185.99.135.215/?s={judul}", headers=headers, follow_redirects=False
|
||||
)
|
||||
html = await http.get(f"http://185.99.135.215/?s={judul}", headers=headers, follow_redirects=False)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
res = soup.find_all(class_="entry-title")
|
||||
data = []
|
||||
|
|
@ -148,12 +128,8 @@ async def savefilm21(_, message):
|
|||
data.append({"judul": judul, "link": link})
|
||||
if not data:
|
||||
return await msg.edit("Oops, data film tidak ditemukan")
|
||||
res = "".join(
|
||||
f"<b>Judul: {i['judul']}</b>\nLink: {i['link']}\n\n" for i in data
|
||||
)
|
||||
await msg.edit(
|
||||
f"Hasil Scrap <code>{judul}</code> dari Savefilm21:\n{res}\n\n⚠️ Gunakan /savefilm21_scrap <b>[link]</b> untuk mengambil link downloadnya."
|
||||
)
|
||||
res = "".join(f"<b>Judul: {i['judul']}</b>\nLink: {i['link']}\n\n" for i in data)
|
||||
await msg.edit(f"Hasil Scrap <code>{judul}</code> dari Savefilm21:\n{res}\n\n⚠️ Gunakan /savefilm21_scrap <b>[link]</b> untuk mengambil link downloadnya.")
|
||||
except Exception as e:
|
||||
await msg.edit(f"ERROR: {str(e)}")
|
||||
|
||||
|
|
@ -168,9 +144,7 @@ async def melongmovie(_, message):
|
|||
|
||||
msg = await message.reply("Sedang proses scrap, mohon tunggu..")
|
||||
try:
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
|
||||
html = await http.get(f"http://167.99.31.48/?s={judul}", headers=headers)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
|
|
@ -186,10 +160,7 @@ async def melongmovie(_, message):
|
|||
data.append({"judul": title, "link": url, "kualitas": kualitas})
|
||||
if not data:
|
||||
return await msg.edit("Oops, data film tidak ditemukan di melongmovie")
|
||||
res = "".join(
|
||||
f"<b>Judul: {i['judul']}</b>\n<b>Kualitas:</b> {i['kualitas']}\n<b>Link</b>: {i['link']}\n\n"
|
||||
for i in data
|
||||
)
|
||||
res = "".join(f"<b>Judul: {i['judul']}</b>\n<b>Kualitas:</b> {i['kualitas']}\n<b>Link</b>: {i['link']}\n\n" for i in data)
|
||||
# return await message.reply(json.dumps(data, indent=2, ensure_ascii=False))
|
||||
return await msg.edit(res)
|
||||
except Exception as e:
|
||||
|
|
@ -202,10 +173,7 @@ async def terbit21_scrap(_, message):
|
|||
if len(message.command) == 1:
|
||||
r = await http.get("https://yasirapi.eu.org/terbit21")
|
||||
res = r.json()
|
||||
data = "".join(
|
||||
f"**Judul: {i['judul']}**\n`{i['kategori']}`\n{i['link']}\n**Download:** [Klik Disini]({i['dl']})\n\n"
|
||||
for i in res["result"]
|
||||
)
|
||||
data = "".join(f"**Judul: {i['judul']}**\n`{i['kategori']}`\n{i['link']}\n**Download:** [Klik Disini]({i['dl']})\n\n" for i in res["result"])
|
||||
try:
|
||||
return await message.reply(
|
||||
f"**Daftar rilis movie terbaru di web Terbit21**:\n{data}",
|
||||
|
|
@ -213,17 +181,12 @@ async def terbit21_scrap(_, message):
|
|||
)
|
||||
except MessageTooLong:
|
||||
msg = await rentry(data)
|
||||
return await message.reply(
|
||||
f"Karena hasil scrape terlalu panjang, maka hasil scrape di post ke rentry.\n\n{msg}"
|
||||
)
|
||||
return await message.reply(f"Karena hasil scrape terlalu panjang, maka hasil scrape di post ke rentry.\n\n{msg}")
|
||||
judul = message.text.split(" ", maxsplit=1)[1]
|
||||
msg = await message.reply(f"Mencari film di Terbit21 dg keyword {judul}..")
|
||||
r = await http.get(f"https://yasirapi.eu.org/terbit21?q={judul}")
|
||||
res = r.json()
|
||||
data = "".join(
|
||||
f"**Judul: {i['judul']}**\n`{i['kategori']}`\n{i['link']}\n**Download:** [Klik Disini]({i['dl']})\n\n"
|
||||
for i in res["result"]
|
||||
)
|
||||
data = "".join(f"**Judul: {i['judul']}**\n`{i['kategori']}`\n{i['link']}\n**Download:** [Klik Disini]({i['dl']})\n\n" for i in res["result"])
|
||||
if not res["result"]:
|
||||
return await msg.edit("Yahh, ga ada hasil ditemukan")
|
||||
try:
|
||||
|
|
@ -233,9 +196,7 @@ async def terbit21_scrap(_, message):
|
|||
)
|
||||
except MessageTooLong:
|
||||
pesan = await rentry(data)
|
||||
await msg.edit(
|
||||
f"Karena hasil scrape terlalu panjang, maka hasil scrape di post ke rentry.\n\n{pesan}"
|
||||
)
|
||||
await msg.edit(f"Karena hasil scrape terlalu panjang, maka hasil scrape di post ke rentry.\n\n{pesan}")
|
||||
|
||||
|
||||
@app.on_message(filters.command(["lk21"], COMMAND_HANDLER))
|
||||
|
|
@ -247,10 +208,7 @@ async def lk21_scrap(_, message):
|
|||
res = r.json()
|
||||
if res.get("detail", None):
|
||||
return await msg.edit(f"ERROR: {res['detail']}")
|
||||
data = "".join(
|
||||
f"**Judul: {i['judul']}**\n`{i['kategori']}`\n{i['link']}\n**Download:** [Klik Disini]({i['dl']})\n\n"
|
||||
for i in res["result"]
|
||||
)
|
||||
data = "".join(f"**Judul: {i['judul']}**\n`{i['kategori']}`\n{i['link']}\n**Download:** [Klik Disini]({i['dl']})\n\n" for i in res["result"])
|
||||
try:
|
||||
return await msg.edit(
|
||||
f"**Daftar rilis movie terbaru di web LK21**:\n{data}",
|
||||
|
|
@ -258,19 +216,14 @@ async def lk21_scrap(_, message):
|
|||
)
|
||||
except MessageTooLong:
|
||||
msg = await rentry(data)
|
||||
await msg.edit(
|
||||
f"Karena hasil scrape terlalu panjang, maka hasil scrape di post ke rentry.\n\n{msg}"
|
||||
)
|
||||
await msg.edit(f"Karena hasil scrape terlalu panjang, maka hasil scrape di post ke rentry.\n\n{msg}")
|
||||
judul = message.text.split(" ", maxsplit=1)[1]
|
||||
msg = await message.reply(f"Mencari film di lk21 dg keyword {judul}..")
|
||||
r = await http.get(f"https://yasirapi.eu.org/lk21?q={judul}")
|
||||
res = r.json()
|
||||
if res.get("detail", None):
|
||||
return await msg.edit(f"ERROR: {res['detail']}")
|
||||
data = "".join(
|
||||
f"**Judul: {i['judul']}**\n`{i['kategori']}`\n{i['link']}\n**Download:** [Klik Disini]({i['dl']})\n\n"
|
||||
for i in res["result"]
|
||||
)
|
||||
data = "".join(f"**Judul: {i['judul']}**\n`{i['kategori']}`\n{i['link']}\n**Download:** [Klik Disini]({i['dl']})\n\n" for i in res["result"])
|
||||
if not res["result"]:
|
||||
return await msg.edit("Yahh, ga ada hasil ditemukan")
|
||||
try:
|
||||
|
|
@ -280,9 +233,7 @@ async def lk21_scrap(_, message):
|
|||
)
|
||||
except MessageTooLong:
|
||||
pesan = await rentry(data)
|
||||
return await msg.edit(
|
||||
f"Karena hasil scrape terlalu panjang, maka hasil scrape di post ke rentry.\n\n{pesan}"
|
||||
)
|
||||
return await msg.edit(f"Karena hasil scrape terlalu panjang, maka hasil scrape di post ke rentry.\n\n{pesan}")
|
||||
|
||||
|
||||
@app.on_message(filters.command(["gomov"], COMMAND_HANDLER))
|
||||
|
|
@ -295,9 +246,7 @@ async def gomov_scrap(_, message):
|
|||
|
||||
msg = await message.reply("Scraping GoMov Website..")
|
||||
try:
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
|
||||
html = await http.get(f"https://185.173.38.216/?s={judul}", headers=headers)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
|
|
@ -310,9 +259,7 @@ async def gomov_scrap(_, message):
|
|||
if not DATA:
|
||||
return await msg.edit("Oops, data film tidak ditemukan di GoMov")
|
||||
res = "".join(f"<b>Judul: {i['judul']}</b>\n{i['link']}\n\n" for i in DATA)
|
||||
await msg.edit(
|
||||
f"<b>Hasil Pencarian di website GoMov:</b>\n{res}\nScraped by @{BOT_USERNAME}"
|
||||
)
|
||||
await msg.edit(f"<b>Hasil Pencarian di website GoMov:</b>\n{res}\nScraped by @{BOT_USERNAME}")
|
||||
except Exception:
|
||||
exc = traceback.format_exc()
|
||||
await msg.edit(f"ERROR: <code>{exc}</code>")
|
||||
|
|
@ -323,9 +270,7 @@ async def gomov_scrap(_, message):
|
|||
async def savefilm21_scrap(_, message):
|
||||
try:
|
||||
link = message.text.split(" ", maxsplit=1)[1]
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
|
||||
html = await http.get(link, headers=headers, follow_redirects=False)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
|
|
@ -333,9 +278,7 @@ async def savefilm21_scrap(_, message):
|
|||
res = "".join(f"{i.text}\n{i['href']}\n\n" for i in res)
|
||||
await message.reply(f"<b>Hasil Scrap dari {link}</b>:\n\n{res}")
|
||||
except IndexError:
|
||||
return await message.reply(
|
||||
"Gunakan command /savefilm21_scrap <b>[link]</b> untuk scrap link download"
|
||||
)
|
||||
return await message.reply("Gunakan command /savefilm21_scrap <b>[link]</b> untuk scrap link download")
|
||||
except Exception as e:
|
||||
await message.reply(f"ERROR: {str(e)}")
|
||||
|
||||
|
|
@ -345,18 +288,14 @@ async def savefilm21_scrap(_, message):
|
|||
async def nodrakor_scrap(_, message):
|
||||
try:
|
||||
link = message.text.split(" ", maxsplit=1)[1]
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
|
||||
html = await http.get(link, headers=headers, follow_redirects=False)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
hasil = soup.find_all(class_="gmr-download-wrap clearfix")[0]
|
||||
await message.reply(f"<b>Hasil Scrap dari {link}</b>:\n{hasil}")
|
||||
except IndexError:
|
||||
return await message.reply(
|
||||
"Gunakan command /nodrakor_scrap <b>[link]</b> untuk scrap link download"
|
||||
)
|
||||
return await message.reply("Gunakan command /nodrakor_scrap <b>[link]</b> untuk scrap link download")
|
||||
except Exception as e:
|
||||
await message.reply(f"ERROR: {str(e)}")
|
||||
|
||||
|
|
@ -367,9 +306,7 @@ async def nodrakor_scrap(_, message):
|
|||
async def muviku_scrap(_, message):
|
||||
try:
|
||||
link = message.text.split(" ", maxsplit=1)[1]
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
|
||||
html = await http.get(link, headers=headers)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
|
|
@ -386,24 +323,17 @@ async def muviku_scrap(_, message):
|
|||
res = "".join(f"<b>Host: {i['kualitas']}</b>\n{i['link']}\n\n" for i in data)
|
||||
await message.reply(res)
|
||||
except IndexError:
|
||||
return await message.reply(
|
||||
"Gunakan command /movieku_scrap <b>[link]</b> untuk scrap link download"
|
||||
)
|
||||
return await message.reply("Gunakan command /movieku_scrap <b>[link]</b> untuk scrap link download")
|
||||
except Exception as e:
|
||||
await message.reply(f"ERROR: {str(e)}")
|
||||
|
||||
|
||||
@app.on_message(
|
||||
filters.command(["melong"], COMMAND_HANDLER)
|
||||
& filters.user([617426792, 1985689491, 1172699512, 2024984460])
|
||||
)
|
||||
@app.on_message(filters.command(["melong"], COMMAND_HANDLER) & filters.user([617426792, 1985689491, 1172699512, 2024984460]))
|
||||
@capture_err
|
||||
async def melong_scrap(_, message):
|
||||
try:
|
||||
link = message.text.split(" ", maxsplit=1)[1]
|
||||
headers = {
|
||||
"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 = {"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"}
|
||||
|
||||
html = await http.get(link, headers=headers)
|
||||
soup = BeautifulSoup(html.text, "lxml")
|
||||
|
|
@ -413,6 +343,4 @@ async def melong_scrap(_, message):
|
|||
rep = f"{hardsub}\n{softsub}"
|
||||
await message.reply(rep)
|
||||
except IndexError:
|
||||
await message.reply(
|
||||
"Gunakan command /melong <b>[link]</b> untuk scrap link download"
|
||||
)
|
||||
await message.reply("Gunakan command /melong <b>[link]</b> untuk scrap link download")
|
||||
|
|
|
|||
|
|
@ -33,9 +33,7 @@ async def sed(c: app, m: Message):
|
|||
return
|
||||
|
||||
try:
|
||||
res = regex.sub(
|
||||
pattern, replace_with, text, count=count, flags=rflags, timeout=1
|
||||
)
|
||||
res = regex.sub(pattern, replace_with, text, count=count, flags=rflags, timeout=1)
|
||||
except TimeoutError:
|
||||
return await m.reply_text("Oops, your regex pattern has run for too long.")
|
||||
except regex.error as e:
|
||||
|
|
|
|||
|
|
@ -46,18 +46,12 @@ def get_subname(url, format):
|
|||
async def ceksub(_, m):
|
||||
cmd = m.text.split(" ", 1)
|
||||
if len(cmd) == 1:
|
||||
return await m.reply(
|
||||
f"Gunakan command /{m.command[0]} [link] untuk mengecek subtitle dan audio didalam video."
|
||||
)
|
||||
return await m.reply(f"Gunakan command /{m.command[0]} [link] untuk mengecek subtitle dan audio didalam video.")
|
||||
link = cmd[1]
|
||||
start_time = perf_counter()
|
||||
pesan = await m.reply("Sedang memproses perintah..", quote=True)
|
||||
try:
|
||||
res = (
|
||||
await shell_exec(
|
||||
f"ffprobe -loglevel 0 -print_format json -show_format -show_streams {link}"
|
||||
)
|
||||
)[0]
|
||||
res = (await shell_exec(f"ffprobe -loglevel 0 -print_format json -show_format -show_streams {link}"))[0]
|
||||
details = json.loads(res)
|
||||
buttons = []
|
||||
for stream in details["streams"]:
|
||||
|
|
@ -101,15 +95,11 @@ ALLOWED_USER = [978550890, 617426792, 2024984460, 1533008300, 1985689491]
|
|||
async def convertsrt(_, m):
|
||||
reply = m.reply_to_message
|
||||
if not reply and reply.document:
|
||||
return await m.reply(
|
||||
f"Gunakan command /{m.command[0]} dengan mereply ke file ass untuk convert subtitle ke srt."
|
||||
)
|
||||
return await m.reply(f"Gunakan command /{m.command[0]} dengan mereply ke file ass untuk convert subtitle ke srt.")
|
||||
msg = await m.reply("Sedang memproses perintah...")
|
||||
dl = await reply.download()
|
||||
(await shell_exec(f"mediaextract -i {dl} {os.path.basename(dl)}.srt"))[0]
|
||||
await m.reply_document(
|
||||
f"{os.path.basename(dl)}.srt", caption=f"{os.path.basename(dl)}.srt"
|
||||
)
|
||||
await m.reply_document(f"{os.path.basename(dl)}.srt", caption=f"{os.path.basename(dl)}.srt")
|
||||
await msg.delete()
|
||||
try:
|
||||
os.remove(dl)
|
||||
|
|
@ -143,9 +133,7 @@ async def stream_extract(bot, update):
|
|||
format == "ass"
|
||||
start_time = perf_counter()
|
||||
namafile = get_subname(link, format)
|
||||
extract = (await shell_exec(f"mediaextract -i {link} -map 0:{map} {namafile}"))[
|
||||
0
|
||||
]
|
||||
extract = (await shell_exec(f"mediaextract -i {link} -map 0:{map} {namafile}"))[0]
|
||||
end_time = perf_counter()
|
||||
timelog = "{:.2f}".format(end_time - start_time) + " second"
|
||||
await update.message.reply_document(
|
||||
|
|
|
|||
|
|
@ -39,22 +39,12 @@ async def add_keep(_, message: Message):
|
|||
|
||||
# @user.on_deleted_messages(filters.chat([-1001455886928, -1001255283935]))
|
||||
async def del_msg(client, message):
|
||||
async for a in user.get_chat_event_log(
|
||||
message[0].chat.id, limit=1, filters=ChatEventFilter(deleted_messages=True)
|
||||
):
|
||||
async for a in user.get_chat_event_log(message[0].chat.id, limit=1, filters=ChatEventFilter(deleted_messages=True)):
|
||||
try:
|
||||
ustat = (
|
||||
await user.get_chat_member(
|
||||
message[0].chat.id, a.deleted_message.from_user.id
|
||||
)
|
||||
).status
|
||||
ustat = (await user.get_chat_member(message[0].chat.id, a.deleted_message.from_user.id)).status
|
||||
except:
|
||||
ustat = enums.ChatMemberStatus.MEMBER
|
||||
if (
|
||||
ustat
|
||||
in [enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER]
|
||||
or a.deleted_message.from_user.is_bot
|
||||
):
|
||||
if ustat in [enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER] or a.deleted_message.from_user.is_bot:
|
||||
return
|
||||
if a.user.id == a.deleted_message.from_user.id:
|
||||
if a.deleted_message.text:
|
||||
|
|
@ -72,9 +62,7 @@ async def del_msg(client, message):
|
|||
# @user.on_edited_message(filters.text & filters.chat(-1001455886928))
|
||||
async def edit_msg(client, message):
|
||||
try:
|
||||
ustat = (
|
||||
await user.get_chat_member(message.chat.id, message.from_user.id)
|
||||
).status
|
||||
ustat = (await user.get_chat_member(message.chat.id, message.from_user.id)).status
|
||||
except:
|
||||
ustat = enums.ChatMemberStatus.MEMBER
|
||||
if message.from_user.is_bot or ustat in [
|
||||
|
|
@ -82,12 +70,8 @@ async def edit_msg(client, message):
|
|||
enums.ChatMemberStatus.OWNER,
|
||||
]:
|
||||
return
|
||||
async for a in user.get_chat_event_log(
|
||||
message.chat.id, limit=1, filters=ChatEventFilter(edited_messages=True)
|
||||
):
|
||||
if a.old_message.text.startswith(
|
||||
("/mirror", "/leech", "/unzipmirror", "/unzipleech")
|
||||
):
|
||||
async for a in user.get_chat_event_log(message.chat.id, limit=1, filters=ChatEventFilter(edited_messages=True)):
|
||||
if a.old_message.text.startswith(("/mirror", "/leech", "/unzipmirror", "/unzipleech")):
|
||||
await app.send_message(
|
||||
message.chat.id,
|
||||
f"#EDITED_MESSAGE\n\n<a href='tg://user?id={a.user.id}'>{a.user.first_name}</a> mengedit pesannya 🧐.\n<b>Pesan:</b> {a.old_message.text}",
|
||||
|
|
@ -139,10 +123,7 @@ async def join_date(app, message: Message):
|
|||
with open("joined_date.txt", "w", encoding="utf8") as f:
|
||||
f.write("Join Date First Name\n")
|
||||
for member in members:
|
||||
f.write(
|
||||
str(datetime.fromtimestamp(member[1]).strftime("%y-%m-%d %H:%M"))
|
||||
+ f" {member[0]}\n"
|
||||
)
|
||||
f.write(str(datetime.fromtimestamp(member[1]).strftime("%y-%m-%d %H:%M")) + f" {member[0]}\n")
|
||||
|
||||
await user.send_document(message.chat.id, "joined_date.txt")
|
||||
os.remove("joined_date.txt")
|
||||
|
|
@ -169,9 +150,7 @@ async def recent_act(client, message):
|
|||
limit=0,
|
||||
)
|
||||
)
|
||||
with open(
|
||||
f"recent_actions_{message.chat.id}.txt", "w", encoding="utf8"
|
||||
) as log_file:
|
||||
with open(f"recent_actions_{message.chat.id}.txt", "w", encoding="utf8") as log_file:
|
||||
log_file.write(str(full_log))
|
||||
await message.reply_document(f"recent_actions_{message.chat.id}.txt")
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ from pyrogram import filters
|
|||
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||||
from misskaty.vars import COMMAND_HANDLER
|
||||
from datetime import datetime
|
||||
from logging import getLogger
|
||||
from hachoir.metadata import extractMetadata
|
||||
from hachoir.parser import createParser
|
||||
from misskaty.helper.ytdl_helper import random_char, DownLoadFile
|
||||
|
|
@ -21,15 +20,11 @@ user_time = {}
|
|||
@capture_err
|
||||
async def ytdown(_, message):
|
||||
if len(message.command) == 1:
|
||||
return await message.reply(
|
||||
f"Gunakan command /{message.command[0]} YT_LINK untuk download video dengan YT-DLP."
|
||||
)
|
||||
return await message.reply(f"Gunakan command /{message.command[0]} YT_LINK untuk download video dengan YT-DLP.")
|
||||
userLastDownloadTime = user_time.get(message.chat.id)
|
||||
try:
|
||||
if userLastDownloadTime > datetime.now():
|
||||
wait_time = round(
|
||||
(userLastDownloadTime - datetime.now()).total_seconds() / 60, 2
|
||||
)
|
||||
wait_time = round((userLastDownloadTime - datetime.now()).total_seconds() / 60, 2)
|
||||
await message.reply_text(f"Wait {wait_time} Minutes before next request..")
|
||||
return
|
||||
except:
|
||||
|
|
@ -53,9 +48,7 @@ async def ytdown(_, message):
|
|||
save_ytdl_json_path = f"YT_Down/{str(message.from_user.id)}{randem}.json"
|
||||
with open(save_ytdl_json_path, "w", encoding="utf8") as outfile:
|
||||
json.dump(response_json, outfile, ensure_ascii=False)
|
||||
duration = None
|
||||
if "duration" in response_json:
|
||||
duration = response_json["duration"]
|
||||
duration = response_json["duration"] if "duration" in response_json else None
|
||||
if "formats" in response_json:
|
||||
for formats in response_json["formats"]:
|
||||
format_id = formats.get("format_id")
|
||||
|
|
@ -129,27 +122,19 @@ async def ytdown(_, message):
|
|||
format_id = response_json["format_id"]
|
||||
format_ext = response_json["ext"]
|
||||
cb_string_file = f"ytdl|file|{format_id}|{format_ext}|{randem}"
|
||||
cb_string_video = f'ytdl|{"video"}|{format_id}|{format_ext}|{randem}'
|
||||
cb_string_video = f"ytdl|video|{format_id}|{format_ext}|{randem}"
|
||||
inline_keyboard.append(
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"SVideo", callback_data=(cb_string_video).encode("UTF-8")
|
||||
),
|
||||
InlineKeyboardButton(
|
||||
"DFile", callback_data=(cb_string_file).encode("UTF-8")
|
||||
),
|
||||
InlineKeyboardButton("SVideo", callback_data=(cb_string_video).encode("UTF-8")),
|
||||
InlineKeyboardButton("DFile", callback_data=(cb_string_file).encode("UTF-8")),
|
||||
]
|
||||
)
|
||||
cb_string_file = f'{"file"}={format_id}={format_ext}'
|
||||
cb_string_video = f'{"video"}={format_id}={format_ext}'
|
||||
cb_string_file = f"file={format_id}={format_ext}"
|
||||
cb_string_video = f"video={format_id}={format_ext}"
|
||||
inline_keyboard.append(
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"video", callback_data=(cb_string_video).encode("UTF-8")
|
||||
),
|
||||
InlineKeyboardButton(
|
||||
"file", callback_data=(cb_string_file).encode("UTF-8")
|
||||
),
|
||||
InlineKeyboardButton("video", callback_data=(cb_string_video).encode("UTF-8")),
|
||||
InlineKeyboardButton("file", callback_data=(cb_string_file).encode("UTF-8")),
|
||||
]
|
||||
)
|
||||
reply_markup = InlineKeyboardMarkup(inline_keyboard)
|
||||
|
|
@ -175,23 +160,19 @@ async def ytdown(_, message):
|
|||
)
|
||||
|
||||
else:
|
||||
cb_string_file = f'{"file"}={"LFO"}={"NONE"}'
|
||||
cb_string_video = f'{"video"}={"OFL"}={"ENON"}'
|
||||
cb_string_file = "file=LFO=NONE"
|
||||
cb_string_video = "video=OFL=ENON"
|
||||
inline_keyboard.append(
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"SVideo", callback_data=(cb_string_video).encode("UTF-8")
|
||||
),
|
||||
InlineKeyboardButton(
|
||||
"DFile", callback_data=(cb_string_file).encode("UTF-8")
|
||||
),
|
||||
InlineKeyboardButton("SVideo", callback_data=(cb_string_video).encode("UTF-8")),
|
||||
InlineKeyboardButton("DFile", callback_data=(cb_string_file).encode("UTF-8")),
|
||||
]
|
||||
)
|
||||
reply_markup = InlineKeyboardMarkup(inline_keyboard)
|
||||
await message.reply_photo(
|
||||
photo="https://telegra.ph/file/ce37f8203e1903feed544.png",
|
||||
quote=True,
|
||||
caption=f"""Select the desired format: <a href='{""}'>file size might be approximate</a>""",
|
||||
caption="Select the desired format: <a href=''>file size might be approximate</a>",
|
||||
reply_markup=reply_markup,
|
||||
reply_to_message_id=message.id,
|
||||
)
|
||||
|
|
@ -214,15 +195,11 @@ async def youtube_dl_call_back(bot, update):
|
|||
await update.message.delete()
|
||||
return False
|
||||
|
||||
custom_file_name = (
|
||||
f"{str(response_json.get('title'))}_{youtube_dl_format}.{youtube_dl_ext}"
|
||||
)
|
||||
custom_file_name = f"{str(response_json.get('title'))}_{youtube_dl_format}.{youtube_dl_ext}"
|
||||
custom_file_name = "%(title,fulltitle,alt_title)s %(height& |)s%(height|)s%(height&p|)s%(fps|)s%(fps&fps|)s%(tbr& |)s%(tbr|)d.%(ext)s"
|
||||
youtube_dl_url = update.message.reply_to_message.text.split(" ", 1)[1]
|
||||
await update.message.edit_caption("Trying to download media...")
|
||||
tmp_directory_for_each_user = os.path.join(
|
||||
f"downloads/{str(update.from_user.id)}{random_char(5)}"
|
||||
)
|
||||
tmp_directory_for_each_user = os.path.join(f"downloads/{str(update.from_user.id)}{random_char(5)}")
|
||||
if not os.path.isdir(tmp_directory_for_each_user):
|
||||
os.makedirs(tmp_directory_for_each_user)
|
||||
download_directory = os.path.join(tmp_directory_for_each_user, custom_file_name)
|
||||
|
|
@ -243,9 +220,7 @@ async def youtube_dl_call_back(bot, update):
|
|||
download_directory_dirname = os.path.dirname(download_directory)
|
||||
download_directory_contents = os.listdir(download_directory_dirname)
|
||||
for download_directory_c in download_directory_contents:
|
||||
current_file_name = os.path.join(
|
||||
download_directory_dirname, download_directory_c
|
||||
)
|
||||
current_file_name = os.path.join(download_directory_dirname, download_directory_c)
|
||||
file_size = os.stat(current_file_name).st_size
|
||||
|
||||
if file_size == 0:
|
||||
|
|
@ -254,11 +229,7 @@ async def youtube_dl_call_back(bot, update):
|
|||
return
|
||||
|
||||
if file_size > 2097152000:
|
||||
await update.message.edit_caption(
|
||||
caption="I cannot upload files greater than 1.95GB due to Telegram API limitations. This file has size {}.".format(
|
||||
get_readable_file_size(file_size)
|
||||
)
|
||||
)
|
||||
await update.message.edit_caption(caption=f"I cannot upload files greater than 1.95GB due to Telegram API limitations. This file has size {get_readable_file_size(file_size)}.")
|
||||
asyncio.create_task(clendir(thumb_image_path))
|
||||
asyncio.create_task(clendir(tmp_directory_for_each_user))
|
||||
return
|
||||
|
|
@ -353,11 +324,7 @@ async def youtube_dl_call_back(bot, update):
|
|||
LOGGER.info("Did this happen? :\\")
|
||||
end_two = datetime.now()
|
||||
time_taken_for_upload = (end_two - end_one).seconds
|
||||
await update.message.edit_caption(
|
||||
caption="Downloaded in {} seconds.\nUploaded in {} seconds.".format(
|
||||
time_taken_for_download, time_taken_for_upload
|
||||
)
|
||||
)
|
||||
await update.message.edit_caption(caption=f"Downloaded in {time_taken_for_download} seconds.\nUploaded in {time_taken_for_upload} seconds.")
|
||||
asyncio.create_task(clendir(thumb_image_path))
|
||||
asyncio.create_task(clendir(tmp_directory_for_each_user))
|
||||
await asyncio.sleep(5)
|
||||
|
|
|
|||
|
|
@ -52,13 +52,9 @@ FORWARD_FROM_CHAT_ID = list(
|
|||
}
|
||||
)
|
||||
# Forward To Chat ID
|
||||
FORWARD_TO_CHAT_ID = list(
|
||||
{int(x) for x in environ.get("FORWARD_TO_CHAT_ID", "-1001210537567").split()}
|
||||
)
|
||||
FORWARD_TO_CHAT_ID = list({int(x) for x in environ.get("FORWARD_TO_CHAT_ID", "-1001210537567").split()})
|
||||
FORWARD_FILTERS = list(set(environ.get("FORWARD_FILTERS", "video document").split()))
|
||||
BLOCK_FILES_WITHOUT_EXTENSIONS = bool(
|
||||
environ.get("BLOCK_FILES_WITHOUT_EXTENSIONS", True)
|
||||
)
|
||||
BLOCK_FILES_WITHOUT_EXTENSIONS = bool(environ.get("BLOCK_FILES_WITHOUT_EXTENSIONS", True))
|
||||
BLOCKED_EXTENSIONS = list(
|
||||
set(
|
||||
environ.get(
|
||||
|
|
|
|||
15
utils.py
15
utils.py
|
|
@ -39,14 +39,13 @@ async def auto_clean():
|
|||
if not await is_cleanmode_on(chat_id):
|
||||
continue
|
||||
for x in cleanmode[chat_id]:
|
||||
if datetime.now() > x["timer_after"]:
|
||||
try:
|
||||
await app.delete_messages(chat_id, x["msg_id"])
|
||||
except FloodWait as e:
|
||||
await asyncio.sleep(e.value)
|
||||
except:
|
||||
continue
|
||||
else:
|
||||
if datetime.now() <= x["timer_after"]:
|
||||
continue
|
||||
try:
|
||||
await app.delete_messages(chat_id, x["msg_id"])
|
||||
except FloodWait as e:
|
||||
await asyncio.sleep(e.value)
|
||||
except:
|
||||
continue
|
||||
except:
|
||||
continue
|
||||
|
|
|
|||
Loading…
Reference in a new issue