Sourcery refactored master branch (#17)

* 'Refactored by Sourcery'

* reformating: code

Co-authored-by: Sourcery AI <>
Co-authored-by: yasirarism <yasiramunandar@gmail.com>
This commit is contained in:
sourcery-ai[bot] 2023-01-11 08:41:48 +07:00 committed by GitHub
parent 26c4733cb5
commit 6e381c7403
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
53 changed files with 449 additions and 1531 deletions

View file

@ -47,9 +47,7 @@ async def is_afk(user_id: int) -> bool:
async def add_afk(user_id: int, mode): async def add_afk(user_id: int, mode):
await usersdb.update_one( await usersdb.update_one({"user_id": user_id}, {"$set": {"reason": mode}}, upsert=True)
{"user_id": user_id}, {"$set": {"reason": mode}}, upsert=True
)
async def remove_afk(user_id: int): async def remove_afk(user_id: int):
@ -60,9 +58,4 @@ async def remove_afk(user_id: int):
async def get_afk_users() -> list: async def get_afk_users() -> list:
users = usersdb.find({"user_id": {"$gt": 0}}) users = usersdb.find({"user_id": {"$gt": 0}})
if not users: return list(await users.to_list(length=1000000000)) if users else []
return []
users_list = []
for user in await users.to_list(length=1000000000):
users_list.append(user)
return users_list

View file

@ -31,10 +31,7 @@ async def get_filter(chat_id: int, name: str) -> Union[bool, dict]:
async def get_filters_names(chat_id: int) -> List[str]: async def get_filters_names(chat_id: int) -> List[str]:
_filters = [] return list(await _get_filters(chat_id))
for _filter in await _get_filters(chat_id):
_filters.append(_filter)
return _filters
async def save_filter(chat_id: int, name: str, _filter: dict): async def save_filter(chat_id: int, name: str, _filter: dict):

View file

@ -9,9 +9,7 @@ async def is_imdbset(user_id: int) -> bool:
async def add_imdbset(user_id: int, lang): async def add_imdbset(user_id: int, lang):
await imbd_db.update_one( await imbd_db.update_one({"user_id": user_id}, {"$set": {"lang": lang}}, upsert=True)
{"user_id": user_id}, {"$set": {"lang": lang}}, upsert=True
)
async def remove_imdbset(user_id: int): async def remove_imdbset(user_id: int):

View file

@ -43,9 +43,7 @@ async def update_karma(chat_id: int, name: str, karma: dict):
name = name.lower().strip() name = name.lower().strip()
karmas = await get_karmas(chat_id) karmas = await get_karmas(chat_id)
karmas[name] = karma karmas[name] = karma
await karmadb.update_one( await karmadb.update_one({"chat_id": chat_id}, {"$set": {"karma": karmas}}, upsert=True)
{"chat_id": chat_id}, {"$set": {"karma": karmas}}, upsert=True
)
async def is_karma_on(chat_id: int) -> bool: async def is_karma_on(chat_id: int) -> bool:

View file

@ -31,10 +31,7 @@ async def get_note(chat_id: int, name: str) -> Union[bool, dict]:
async def get_note_names(chat_id: int) -> List[str]: async def get_note_names(chat_id: int) -> List[str]:
_notes = [] return list(await _get_notes(chat_id))
for note in await _get_notes(chat_id):
_notes.append(note)
return _notes
async def save_note(chat_id: int, name: str, note: dict): async def save_note(chat_id: int, name: str, note: dict):
@ -42,6 +39,4 @@ async def save_note(chat_id: int, name: str, note: dict):
_notes = await _get_notes(chat_id) _notes = await _get_notes(chat_id)
_notes[name] = note _notes[name] = note
await notesdb.update_one( await notesdb.update_one({"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True)
{"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True
)

View file

@ -80,18 +80,14 @@ class Database:
is_disabled=False, is_disabled=False,
reason="", reason="",
) )
await self.grp.update_one( await self.grp.update_one({"id": int(id)}, {"$set": {"chat_status": chat_status}})
{"id": int(id)}, {"$set": {"chat_status": chat_status}}
)
async def disable_chat(self, chat, reason="No Reason"): async def disable_chat(self, chat, reason="No Reason"):
chat_status = dict( chat_status = dict(
is_disabled=True, is_disabled=True,
reason=reason, reason=reason,
) )
await self.grp.update_one( await self.grp.update_one({"id": int(chat)}, {"$set": {"chat_status": chat_status}})
{"id": int(chat)}, {"$set": {"chat_status": chat_status}}
)
async def total_chat_count(self): async def total_chat_count(self):
return await self.grp.count_documents({}) return await self.grp.count_documents({})

View file

@ -32,9 +32,7 @@ async def add_warn(chat_id: int, name: str, warn: dict):
warns = await get_warns(chat_id) warns = await get_warns(chat_id)
warns[name] = warn warns[name] = warn
await warnsdb.update_one( await warnsdb.update_one({"chat_id": chat_id}, {"$set": {"warns": warns}}, upsert=True)
{"chat_id": chat_id}, {"$set": {"warns": warns}}, upsert=True
)
async def remove_warns(chat_id: int, name: str) -> bool: async def remove_warns(chat_id: int, name: str) -> bool:

View file

@ -51,12 +51,7 @@ async def list_admins(chat_id: int):
admins_in_chat[chat_id] = { admins_in_chat[chat_id] = {
"last_updated_at": time(), "last_updated_at": time(),
"data": [ "data": [member.user.id async for member in app.get_chat_members(chat_id, filter=enums.ChatMembersFilter.ADMINISTRATORS)],
member.user.id
async for member in app.get_chat_members(
chat_id, filter=enums.ChatMembersFilter.ADMINISTRATORS
)
],
} }
return admins_in_chat[chat_id]["data"] return admins_in_chat[chat_id]["data"]

View file

@ -12,12 +12,7 @@ def keyboard(buttons_list, row_width: int = 2):
if theres, a url, it will make url button, else callback button if theres, a url, it will make url button, else callback button
""" """
buttons = InlineKeyboard(row_width=row_width) buttons = InlineKeyboard(row_width=row_width)
data = [ data = [Ikb(text=str(i[0]), url=str(i[1])) if is_url(i[1]) else Ikb(text=str(i[0]), callback_data=str(i[1])) for i in buttons_list]
Ikb(text=str(i[0]), url=str(i[1]))
if is_url(i[1])
else Ikb(text=str(i[0]), callback_data=str(i[1]))
for i in buttons_list
]
buttons.add(*data) buttons.add(*data)
return buttons return buttons

View file

@ -33,9 +33,7 @@ async def ssgen_link(video, output_directory, ttl):
"image2", "image2",
out_put_file_name, out_put_file_name,
] ]
process = await asyncio.create_subprocess_exec( process = await asyncio.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate() stdout, stderr = await process.communicate()
stderr.decode().strip() stderr.decode().strip()
@ -44,11 +42,7 @@ async def ssgen_link(video, output_directory, ttl):
async def genss_link(msg, video_link, output_directory, min_duration, no_of_photos): async def genss_link(msg, video_link, output_directory, min_duration, no_of_photos):
metadata = ( metadata = (await shell_exec(f"ffprobe -i {video_link} -show_entries format=duration -v quiet -of csv='p=0'"))[0]
await shell_exec(
f"ffprobe -i {video_link} -show_entries format=duration -v quiet -of csv='p=0'"
)
)[0]
duration = round(float(metadata)) duration = round(float(metadata))
if duration > min_duration: if duration > min_duration:
images = [] images = []
@ -56,20 +50,12 @@ async def genss_link(msg, video_link, output_directory, min_duration, no_of_phot
current_ttl = ttl_step current_ttl = ttl_step
for looper in range(no_of_photos): for looper in range(no_of_photos):
ss_img = await ssgen_link(video_link, output_directory, current_ttl) ss_img = await ssgen_link(video_link, output_directory, current_ttl)
images.append( images.append(InputMediaPhoto(media=ss_img, caption=f"Screenshot at {hhmmss(current_ttl)}"))
InputMediaPhoto(
media=ss_img, caption=f"Screenshot at {hhmmss(current_ttl)}"
)
)
try: try:
await msg.edit( await msg.edit(f"📸 <b>Take Screenshoot:</b>\n<code>{looper+1} of {no_of_photos} screenshot generated..</code>")
f"📸 <b>Take Screenshoot:</b>\n<code>{looper+1} of {no_of_photos} screenshot generated..</code>"
)
except FloodWait as e: except FloodWait as e:
await asyncio.sleep(e.value) await asyncio.sleep(e.value)
await msg.edit( await msg.edit(f"📸 <b>Take Screenshoot:</b>\n<code>{looper+1} of {no_of_photos} screenshot generated..</code>")
f"📸 <b>Take Screenshoot:</b>\n<code>{looper+1} of {no_of_photos} screenshot generated..</code>"
)
current_ttl = current_ttl + ttl_step current_ttl = current_ttl + ttl_step
await asyncio.sleep(2) await asyncio.sleep(2)
return images return images

View file

@ -53,20 +53,14 @@ async def resize_file_to_sticker_size(file_path: str) -> str:
im.save(file_path) im.save(file_path)
async def upload_document( async def upload_document(client: Client, file_path: str, chat_id: int) -> raw.base.InputDocument:
client: Client, file_path: str, chat_id: int
) -> raw.base.InputDocument:
media = await client.send( media = await client.send(
raw.functions.messages.UploadMedia( raw.functions.messages.UploadMedia(
peer=await client.resolve_peer(chat_id), peer=await client.resolve_peer(chat_id),
media=raw.types.InputMediaUploadedDocument( media=raw.types.InputMediaUploadedDocument(
mime_type=client.guess_mime_type(file_path) or "application/zip", mime_type=client.guess_mime_type(file_path) or "application/zip",
file=await client.save_file(file_path), file=await client.save_file(file_path),
attributes=[ attributes=[raw.types.DocumentAttributeFilename(file_name=os.path.basename(file_path))],
raw.types.DocumentAttributeFilename(
file_name=os.path.basename(file_path)
)
],
), ),
) )
) )

View file

@ -21,9 +21,7 @@ def post_to_telegraph(a_title: str, content: str) -> str:
async def run_subprocess(cmd): async def run_subprocess(cmd):
process = await asyncio.create_subprocess_exec( process = await asyncio.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
)
return await process.communicate() return await process.communicate()
@ -50,9 +48,7 @@ async def get_media_info(file_link):
async def runcmd(cmd: str) -> Tuple[str, str, int, int]: async def runcmd(cmd: str) -> Tuple[str, str, int, int]:
"""run command in terminal""" """run command in terminal"""
args = shlex.split(cmd) args = shlex.split(cmd)
process = await asyncio.create_subprocess_exec( process = await asyncio.create_subprocess_exec(*args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
*args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate() stdout, stderr = await process.communicate()
return ( return (
stdout.decode("utf-8", "replace").strip(), stdout.decode("utf-8", "replace").strip(),

View file

@ -63,15 +63,9 @@ def paginate_modules(page_n, module_dict, prefix, chat=None):
if len(pairs) > COLUMN_SIZE: if len(pairs) > COLUMN_SIZE:
pairs = pairs[modulo_page * COLUMN_SIZE : COLUMN_SIZE * (modulo_page + 1)] + [ pairs = pairs[modulo_page * COLUMN_SIZE : COLUMN_SIZE * (modulo_page + 1)] + [
( (
EqInlineKeyboardButton( EqInlineKeyboardButton("", callback_data=f"{prefix}_prev({modulo_page})"),
"", 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(
"Back", callback_data=f"{prefix}_home({modulo_page})"
),
EqInlineKeyboardButton(
"", callback_data=f"{prefix}_next({modulo_page})"
),
) )
] ]

View file

@ -22,9 +22,7 @@ from typing import List
from pyrogram import Client, errors, raw from pyrogram import Client, errors, raw
async def get_sticker_set_by_name( async def get_sticker_set_by_name(client: Client, name: str) -> raw.base.messages.StickerSet:
client: Client, name: str
) -> raw.base.messages.StickerSet:
try: try:
return await client.invoke( return await client.invoke(
raw.functions.messages.GetStickerSet( raw.functions.messages.GetStickerSet(
@ -65,15 +63,11 @@ async def add_sticker_to_set(
) -> raw.base.messages.StickerSet: ) -> raw.base.messages.StickerSet:
return await client.invoke( return await client.invoke(
raw.functions.stickers.AddStickerToSet( raw.functions.stickers.AddStickerToSet(
stickerset=raw.types.InputStickerSetShortName( stickerset=raw.types.InputStickerSetShortName(short_name=stickerset.set.short_name),
short_name=stickerset.set.short_name
),
sticker=sticker, sticker=sticker,
) )
) )
async def create_sticker( async def create_sticker(sticker: raw.base.InputDocument, emoji: str) -> raw.base.InputStickerSetItem:
sticker: raw.base.InputDocument, emoji: str
) -> raw.base.InputStickerSetItem:
return raw.types.InputStickerSetItem(document=sticker, emoji=emoji) return raw.types.InputStickerSetItem(document=sticker, emoji=emoji)

View file

@ -57,10 +57,7 @@ TOTAL PLUGINS: {len(ALL_MODULES)}
def get_random_string(length: int = 5): def get_random_string(length: int = 5):
text_str = "".join( text_str = "".join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(length))
random.SystemRandom().choice(string.ascii_letters + string.digits)
for _ in range(length)
)
return text_str.upper() return text_str.upper()

View file

@ -20,32 +20,18 @@ def __list_all_modules():
# This generates a list of modules in this # This generates a list of modules in this
# folder for the * in __main__ to work. # folder for the * in __main__ to work.
mod_paths = glob.glob(f"{dirname(__file__)}/*.py") mod_paths = glob.glob(f"{dirname(__file__)}/*.py")
all_modules = [ 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")]
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: if MOD_LOAD or MOD_NOLOAD:
to_load = MOD_LOAD to_load = MOD_LOAD
if to_load: if to_load:
if not all( if not all(any(mod == module_name for module_name in all_modules) for mod in to_load):
any(mod == module_name for module_name in all_modules)
for mod in to_load
):
sys.exit() sys.exit()
else: else:
to_load = all_modules to_load = all_modules
return ( return [item for item in to_load if item not in MOD_NOLOAD] if MOD_NOLOAD else to_load
[item for item in to_load if item not in MOD_NOLOAD]
if MOD_NOLOAD
else to_load
)
return all_modules return all_modules

View file

@ -63,12 +63,7 @@ async def admin_cache_func(_, cmu):
try: try:
admins_in_chat[cmu.chat.id] = { admins_in_chat[cmu.chat.id] = {
"last_updated_at": time(), "last_updated_at": time(),
"data": [ "data": [member.user.id async for member in app.get_chat_members(cmu.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS)],
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}]") LOGGER.info(f"Updated admin cache for {cmu.chat.id} [{cmu.chat.title}]")
except: except:
@ -158,9 +153,7 @@ async def kickFunc(client, message):
# Ban/DBan/TBan User # Ban/DBan/TBan User
@app.on_message( @app.on_message(filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & ~filters.private)
filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & ~filters.private
)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def banFunc(client, message): async def banFunc(client, message):
user_id, reason = await extract_user_and_reason(message, sender_chat=True) user_id, reason = await extract_user_and_reason(message, sender_chat=True)
@ -172,23 +165,14 @@ async def banFunc(client, message):
if user_id in SUDO: if user_id in SUDO:
return await message.reply_text("You Wanna Ban The Elevated One?, RECONSIDER!") return await message.reply_text("You Wanna Ban The Elevated One?, RECONSIDER!")
if user_id in (await list_admins(message.chat.id)): if user_id in (await list_admins(message.chat.id)):
return await message.reply_text( return await message.reply_text("I can't ban an admin, You know the rules, so do i.")
"I can't ban an admin, You know the rules, so do i."
)
try: try:
mention = (await app.get_users(user_id)).mention mention = (await app.get_users(user_id)).mention
except IndexError: except IndexError:
mention = ( mention = message.reply_to_message.sender_chat.title if message.reply_to_message else "Anon"
message.reply_to_message.sender_chat.title
if message.reply_to_message
else "Anon"
)
msg = ( msg = f"**Banned User:** {mention}\n" f"**Banned By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
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": if message.command[0][0] == "d":
await message.reply_to_message.delete() await message.reply_to_message.delete()
if message.command[0] == "tban": if message.command[0] == "tban":
@ -236,33 +220,25 @@ async def unban_func(_, message):
elif len(message.command) == 1 and reply: elif len(message.command) == 1 and reply:
user = message.reply_to_message.from_user.id user = message.reply_to_message.from_user.id
else: else:
return await message.reply_text( return await message.reply_text("Provide a username or reply to a user's message to unban.")
"Provide a username or reply to a user's message to unban."
)
await message.chat.unban_member(user) await message.chat.unban_member(user)
umention = (await app.get_users(user)).mention umention = (await app.get_users(user)).mention
await message.reply_text(f"Unbanned! {umention}") await message.reply_text(f"Unbanned! {umention}")
# Ban users listed in a message # Ban users listed in a message
@app.on_message( @app.on_message(filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & ~filters.private)
filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & ~filters.private
)
async def list_ban_(c, message): async def list_ban_(c, message):
userid, msglink_reason = await extract_user_and_reason(message) userid, msglink_reason = await extract_user_and_reason(message)
if not userid or not msglink_reason: if not userid or not msglink_reason:
return await message.reply_text( return await message.reply_text("Provide a userid/username along with message link and reason to list-ban")
"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 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") return await message.reply_text("You must provide a reason to list-ban")
# seperate messge link from reason # seperate messge link from reason
lreason = msglink_reason.split() lreason = msglink_reason.split()
messagelink, reason = lreason[0], " ".join(lreason[1:]) messagelink, reason = lreason[0], " ".join(lreason[1:])
if not re.search( if not re.search(r"(https?://)?t(elegram)?\.me/\w+/\d+", messagelink): # validate link
r"(https?://)?t(elegram)?\.me/\w+/\d+", messagelink
): # validate link
return await message.reply_text("Invalid message link provided") return await message.reply_text("Invalid message link provided")
if userid == c.me.id: if userid == c.me.id:
@ -271,9 +247,7 @@ async def list_ban_(c, message):
return await message.reply_text("You Wanna Ban The Elevated One?, RECONSIDER!") return await message.reply_text("You Wanna Ban The Elevated One?, RECONSIDER!")
splitted = messagelink.split("/") splitted = messagelink.split("/")
uname, mid = splitted[-2], int(splitted[-1]) uname, mid = splitted[-2], int(splitted[-1])
m = await message.reply_text( m = await message.reply_text("`Banning User from multiple groups. This may take some time`")
"`Banning User from multiple groups. This may take some time`"
)
try: try:
msgtext = (await app.get_messages(uname, mid)).text msgtext = (await app.get_messages(uname, mid)).text
gusernames = re.findall(r"@\w+", msgtext) gusernames = re.findall(r"@\w+", msgtext)
@ -302,17 +276,11 @@ async def list_ban_(c, message):
# Unban users listed in a message # Unban users listed in a message
@app.on_message( @app.on_message(filters.user(SUDO) & filters.command("listunban", COMMAND_HANDLER) & ~filters.private)
filters.user(SUDO)
& filters.command("listunban", COMMAND_HANDLER)
& ~filters.private
)
async def list_unban_(c, message): async def list_unban_(c, message):
userid, msglink = await extract_user_and_reason(message) userid, msglink = await extract_user_and_reason(message)
if not userid or not msglink: if not userid or not msglink:
return await message.reply_text( return await message.reply_text("Provide a userid/username along with message link to list-unban")
"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 if not re.search(r"(https?://)?t(elegram)?\.me/\w+/\d+", msglink): # validate link
return await message.reply_text("Invalid message link provided") return await message.reply_text("Invalid message link provided")
@ -362,9 +330,7 @@ async def deleteFunc(_, message):
# Promote Members # Promote Members
@app.on_message( @app.on_message(filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & ~filters.private)
filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & ~filters.private
)
@adminsOnly("can_promote_members") @adminsOnly("can_promote_members")
async def promoteFunc(client, message): async def promoteFunc(client, message):
try: try:
@ -474,15 +440,10 @@ async def mute(client, message):
if user_id in SUDO: if user_id in SUDO:
return await message.reply_text("You wanna mute the elevated one?, RECONSIDER!") return await message.reply_text("You wanna mute the elevated one?, RECONSIDER!")
if user_id in (await list_admins(message.chat.id)): if user_id in (await list_admins(message.chat.id)):
return await message.reply_text( return await message.reply_text("I can't mute an admin, You know the rules, so do i.")
"I can't mute an admin, You know the rules, so do i."
)
mention = (await app.get_users(user_id)).mention mention = (await app.get_users(user_id)).mention
keyboard = ikb({"🚨 Unmute 🚨": f"unmute_{user_id}"}) keyboard = ikb({"🚨 Unmute 🚨": f"unmute_{user_id}"})
msg = ( msg = f"**Muted User:** {mention}\n" f"**Muted By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
f"**Muted User:** {mention}\n"
f"**Muted By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
)
if message.command[0] == "tmute": if message.command[0] == "tmute":
split = reason.split(None, 1) split = reason.split(None, 1)
time_value = split[0] time_value = split[0]
@ -558,9 +519,7 @@ async def warn_user(client, message):
if user_id in SUDO: if user_id in SUDO:
return await message.reply_text("You Wanna Warn The Elevated One?, RECONSIDER!") return await message.reply_text("You Wanna Warn The Elevated One?, RECONSIDER!")
if user_id in (await list_admins(chat_id)): if user_id in (await list_admins(chat_id)):
return await message.reply_text( return await message.reply_text("I can't warn an admin, You know the rules, so do i.")
"I can't warn an admin, You know the rules, so do i."
)
user, warns = await asyncio.gather( user, warns = await asyncio.gather(
app.get_users(user_id), app.get_users(user_id),
get_warn(chat_id, await int_to_alpha(user_id)), get_warn(chat_id, await int_to_alpha(user_id)),
@ -593,8 +552,7 @@ async def remove_warning(_, cq):
permission = "can_restrict_members" permission = "can_restrict_members"
if permission not in permissions: if permission not in permissions:
return await cq.answer( return await cq.answer(
"You don't have enough permissions to perform this action.\n" "You don't have enough permissions to perform this action.\n" + f"Permission needed: {permission}",
+ f"Permission needed: {permission}",
show_alert=True, show_alert=True,
) )
user_id = cq.data.split("_")[1] user_id = cq.data.split("_")[1]
@ -619,8 +577,7 @@ async def unmute_user(_, cq):
permission = "can_restrict_members" permission = "can_restrict_members"
if permission not in permissions: if permission not in permissions:
return await cq.answer( return await cq.answer(
"You don't have enough permissions to perform this action.\n" "You don't have enough permissions to perform this action.\n" + f"Permission needed: {permission}",
+ f"Permission needed: {permission}",
show_alert=True, show_alert=True,
) )
user_id = cq.data.split("_")[1] user_id = cq.data.split("_")[1]
@ -639,8 +596,7 @@ async def unban_user(_, cq):
permission = "can_restrict_members" permission = "can_restrict_members"
if permission not in permissions: if permission not in permissions:
return await cq.answer( return await cq.answer(
"You don't have enough permissions to perform this action.\n" "You don't have enough permissions to perform this action.\n" + f"Permission needed: {permission}",
+ f"Permission needed: {permission}",
show_alert=True, show_alert=True,
) )
user_id = cq.data.split("_")[1] user_id = cq.data.split("_")[1]
@ -657,9 +613,7 @@ async def unban_user(_, cq):
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def remove_warnings(_, message): async def remove_warnings(_, message):
if not message.reply_to_message: if not message.reply_to_message:
return await message.reply_text( return await message.reply_text("Reply to a message to remove a user's warnings.")
"Reply to a message to remove a user's warnings."
)
user_id = message.reply_to_message.from_user.id user_id = message.reply_to_message.from_user.id
mention = message.reply_to_message.from_user.mention mention = message.reply_to_message.from_user.mention
chat_id = message.chat.id chat_id = message.chat.id
@ -690,13 +644,7 @@ async def check_warns(_, message):
# Report User in Group # Report User in Group
@app.on_message( @app.on_message((filters.command("report", COMMAND_HANDLER) | filters.command(["admins", "admin"], prefixes="@")) & ~filters.private)
(
filters.command("report", COMMAND_HANDLER)
| filters.command(["admins", "admin"], prefixes="@")
)
& ~filters.private
)
@capture_err @capture_err
async def report_user(_, message): async def report_user(_, message):
if not message.reply_to_message: if not message.reply_to_message:
@ -711,28 +659,13 @@ async def report_user(_, message):
linked_chat = (await app.get_chat(message.chat.id)).linked_chat linked_chat = (await app.get_chat(message.chat.id)).linked_chat
if linked_chat is None: if linked_chat is None:
if reply_id in list_of_admins or reply_id == message.chat.id: if reply_id in list_of_admins or reply_id == message.chat.id:
return await message.reply_text( return await message.reply_text("Do you know that the user you are replying is an admin ?")
"Do you know that the user you are replying is an admin ?"
)
elif ( elif reply_id in list_of_admins or reply_id == message.chat.id or reply_id == linked_chat.id:
reply_id in list_of_admins return await message.reply_text("Do you know that the user you are replying is an admin ?")
or reply_id == message.chat.id user_mention = reply.from_user.mention if reply.from_user else reply.sender_chat.title
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!" text = f"Reported {user_mention} to admins!"
admin_data = [ admin_data = [m async for m in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS)]
m
async for m in app.get_chat_members(
message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS
)
]
for admin in admin_data: for admin in admin_data:
if admin.user.is_bot or admin.user.is_deleted: if admin.user.is_bot or admin.user.is_deleted:
# return bots or deleted admins # return bots or deleted admins

View file

@ -143,9 +143,7 @@ async def active_afk(_, message):
"reason": None, "reason": None,
} }
else: else:
await app.download_media( await app.download_media(message.reply_to_message, file_name=f"{user_id}.jpg")
message.reply_to_message, file_name=f"{user_id}.jpg"
)
details = { details = {
"type": "photo", "type": "photo",
"time": time.time(), "time": time.time(),
@ -162,9 +160,7 @@ async def active_afk(_, message):
"reason": _reason, "reason": _reason,
} }
else: else:
await app.download_media( await app.download_media(message.reply_to_message, file_name=f"{user_id}.jpg")
message.reply_to_message, file_name=f"{user_id}.jpg"
)
details = { details = {
"type": "photo", "type": "photo",
"time": time.time(), "time": time.time(),
@ -180,9 +176,7 @@ async def active_afk(_, message):
} }
await add_afk(user_id, details) await add_afk(user_id, details)
send = await message.reply_text( send = await message.reply_text(f"{message.from_user.mention} [<code>{message.from_user.id}</code>] is now AFK!.")
f"{message.from_user.mention} [<code>{message.from_user.id}</code>] is now AFK!."
)
await put_cleanmode(message.chat.id, send.id) await put_cleanmode(message.chat.id, send.id)

View file

@ -20,12 +20,8 @@ async def approve_join_chat(c, m):
markup = InlineKeyboardMarkup( markup = InlineKeyboardMarkup(
[ [
[ [
InlineKeyboardButton( InlineKeyboardButton(text="Sudah", callback_data=f"approve_{m.chat.id}"),
text="Sudah", callback_data=f"approve_{m.chat.id}" InlineKeyboardButton(text="Belum", callback_data=f"declined_{m.chat.id}"),
),
InlineKeyboardButton(
text="Belum", callback_data=f"declined_{m.chat.id}"
),
] ]
] ]
) )
@ -43,14 +39,10 @@ async def approve_join_chat(c, m):
async def approve_chat(c, q): async def approve_chat(c, q):
i, chat = q.data.split("_") i, chat = q.data.split("_")
try: try:
await q.message.edit( await q.message.edit("Yeayy, selamat kamu bisa bergabung di Channel YMovieZ Reborn...")
"Yeayy, selamat kamu bisa bergabung di Channel YMovieZ Reborn..."
)
await c.approve_chat_join_request(chat, q.from_user.id) await c.approve_chat_join_request(chat, q.from_user.id)
except UserAlreadyParticipant: except UserAlreadyParticipant:
await q.message.edit( await q.message.edit("Kamu sudah di acc join grup, jadi ga perlu menekan button.")
"Kamu sudah di acc join grup, jadi ga perlu menekan button."
)
except Exception as err: except Exception as err:
await q.message.edit(err) await q.message.edit(err)
@ -59,13 +51,9 @@ async def approve_chat(c, q):
async def decline_chat(c, q): async def decline_chat(c, q):
i, chat = q.data.split("_") i, chat = q.data.split("_")
try: try:
await q.message.edit( await q.message.edit("Yahh, kamu ditolak join channel. Biasakan rajin membaca yahhh..")
"Yahh, kamu ditolak join channel. Biasakan rajin membaca yahhh.."
)
await c.decline_chat_join_request(chat, q.from_user.id) await c.decline_chat_join_request(chat, q.from_user.id)
except UserAlreadyParticipant: except UserAlreadyParticipant:
await q.message.edit( await q.message.edit("Kamu sudah di acc join grup, jadi ga perlu menekan button.")
"Kamu sudah di acc join grup, jadi ga perlu menekan button."
)
except Exception as err: except Exception as err:
await q.message.edit(err) await q.message.edit(err)

View file

@ -20,9 +20,7 @@ LOGGER = getLogger(__name__)
async def FilterMessage(message: Message): async def FilterMessage(message: Message):
if (message.forward_from or message.forward_from_chat) and ( if (message.forward_from or message.forward_from_chat) and ("forwarded" not in FORWARD_FILTERS):
"forwarded" not in FORWARD_FILTERS
):
return 400 return 400
if (len(FORWARD_FILTERS) == 9) or ( if (len(FORWARD_FILTERS) == 9) or (
(message.video and ("video" in FORWARD_FILTERS)) (message.video and ("video" in FORWARD_FILTERS))
@ -46,10 +44,7 @@ async def CheckBlockedExt(event: Message):
if (media is not None) and (media.file_name is not None): if (media is not None) and (media.file_name is not None):
_file = media.file_name.rsplit(".", 1) _file = media.file_name.rsplit(".", 1)
if len(_file) == 2: if len(_file) == 2:
return ( return _file[-1].lower() in BLOCKED_EXTENSIONS or _file[-1].upper() in BLOCKED_EXTENSIONS
_file[-1].lower() in BLOCKED_EXTENSIONS
or _file[-1].upper() in BLOCKED_EXTENSIONS
)
else: else:
return False return False
@ -83,9 +78,7 @@ async def ForwardMessage(client: user, msg: Message):
LOGGER.warning(f"#FloodWait: Stopped Forwarder for {e.x}s!") LOGGER.warning(f"#FloodWait: Stopped Forwarder for {e.x}s!")
await ForwardMessage(client, msg) await ForwardMessage(client, msg)
except Exception as err: except Exception as err:
LOGGER.warning( LOGGER.warning(f"#ERROR: {err}\n\nUnable to Forward Message to {str(FORWARD_TO_CHAT_ID[i])}, reason: <code>{err}</code>")
f"#ERROR: {err}\n\nUnable to Forward Message to {str(FORWARD_TO_CHAT_ID[i])}, reason: <code>{err}</code>"
)
except Exception as err: except Exception as err:
LOGGER.warning(f"#ERROR: {err}") LOGGER.warning(f"#ERROR: {err}")

View file

@ -8,9 +8,7 @@ from utils import temp
async def banned_users(_, client, message: Message): async def banned_users(_, client, message: Message):
return ( return (message.from_user is not None or not message.sender_chat) and message.from_user.id in temp.BANNED_USERS
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) 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) @app.on_message(filters.private & banned_user & filters.incoming)
async def ban_reply(bot, message): async def ban_reply(bot, message):
ban = await db.get_ban_status(message.from_user.id) ban = await db.get_ban_status(message.from_user.id)
await message.reply( await message.reply(f'Sorry Dude, You are Banned to use Me. \nBan Reason: {ban["ban_reason"]}')
f'Sorry Dude, You are Banned to use Me. \nBan Reason: {ban["ban_reason"]}'
)
@app.on_message(filters.group & disabled_group & filters.incoming) @app.on_message(filters.group & disabled_group & filters.incoming)

View file

@ -37,10 +37,6 @@ async def broadcast(bot, message):
done += 1 done += 1
await asyncio.sleep(2) await asyncio.sleep(2)
if not done % 20: if not done % 20:
await sts.edit( await sts.edit(f"Broadcast in progress:\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}")
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)) time_taken = datetime.timedelta(seconds=int(time.time() - start_time))
await sts.edit( 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}")
f"Broadcast Completed:\nCompleted in {time_taken} seconds.\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}"
)

View file

@ -45,10 +45,7 @@ async def pling_bypass(url):
res = await http.get(link) res = await http.get(link)
json_dic_files = res.json().pop("files") json_dic_files = res.json().pop("files")
msg = f"\n**Source Link** :\n`{url}`\n**Direct Link :**\n" msg = f"\n**Source Link** :\n`{url}`\n**Direct Link :**\n"
msg += "\n".join( msg += "\n".join(f'**→ [{i["name"]}]({unquote(i["url"])}) ({get_readable_file_size(int(i["size"]))})**' for i in json_dic_files)
f'**→ [{i["name"]}]({unquote(i["url"])}) ({get_readable_file_size(int(i["size"]))})**'
for i in json_dic_files
)
return msg return msg
except Exception as e: except Exception as e:
return e return e
@ -81,9 +78,7 @@ def wetransfer_bypass(url: str) -> str:
r = s.get("https://wetransfer.com/") r = s.get("https://wetransfer.com/")
m = re.search('name="csrf-token" content="([^"]+)"', r.text) m = re.search('name="csrf-token" content="([^"]+)"', r.text)
s.headers.update({"x-csrf-token": m[1], "x-requested-with": "XMLHttpRequest"}) s.headers.update({"x-csrf-token": m[1], "x-requested-with": "XMLHttpRequest"})
r = s.post( r = s.post(f"https://wetransfer.com/api/v4/transfers/{transfer_id}/download", json=j)
f"https://wetransfer.com/api/v4/transfers/{transfer_id}/download", json=j
)
j = r.json() j = r.json()
dl_url = j["direct_link"] dl_url = j["direct_link"]
@ -94,9 +89,7 @@ def wetransfer_bypass(url: str) -> str:
@capture_err @capture_err
async def bypass(_, message): async def bypass(_, message):
if len(message.command) == 1: if len(message.command) == 1:
return await message.reply( return await message.reply(f"Gunakan perintah /{message.command[0]} untuk bypass url")
f"Gunakan perintah /{message.command[0]} untuk bypass url"
)
url = message.command[1] url = message.command[1]
urllib.parse.urlparse(url).netloc urllib.parse.urlparse(url).netloc
msg = await message.reply("Bypassing URL..", quote=True) msg = await message.reply("Bypassing URL..", quote=True)
@ -120,8 +113,6 @@ async def bypass(_, message):
reply_markup=markup, reply_markup=markup,
disable_web_page_preview=True, disable_web_page_preview=True,
) )
elif "wetransfer.com" or "we.tl" in message.command[1]: else:
data = wetransfer_bypass(url) data = wetransfer_bypass(url)
await msg.edit(f"{data}\n\n{mention}") await msg.edit(f"{data}\n\n{mention}")
else:
await msg.edit("Unsupported URL. Read help menu..")

View file

@ -9,9 +9,7 @@ from misskaty.vars import COMMAND_HANDLER, OPENAI_API
@app.on_message(filters.command("ask", COMMAND_HANDLER)) @app.on_message(filters.command("ask", COMMAND_HANDLER))
async def chatbot(c, m): async def chatbot(c, m):
if len(m.command) == 1: if len(m.command) == 1:
return await m.reply( return await m.reply(f"Gunakan perintah <code>/{m.command[0]} [pertanyaan]</code> untuk menanyakan pertanyaan menggunakan AI.")
f"Gunakan perintah <code>/{m.command[0]} [pertanyaan]</code> untuk menanyakan pertanyaan menggunakan AI."
)
pertanyaan = m.text.split(" ", maxsplit=1)[1] pertanyaan = m.text.split(" ", maxsplit=1)[1]
headers = { headers = {
"Content-Type": "application/json", "Content-Type": "application/json",
@ -26,11 +24,7 @@ async def chatbot(c, m):
} }
msg = await m.reply("Wait a moment looking for your answer..") msg = await m.reply("Wait a moment looking for your answer..")
try: try:
response = ( response = (await http.post("https://api.openai.com/v1/completions", headers=headers, json=json_data)).json()
await http.post(
"https://api.openai.com/v1/completions", headers=headers, json=json_data
)
).json()
await msg.edit(response["choices"][0]["text"]) await msg.edit(response["choices"][0]["text"])
except MessageNotModified: except MessageNotModified:
pass pass

View file

@ -67,9 +67,7 @@ async def glot(lang, langcode, code):
"content-type": "application/json", "content-type": "application/json",
"Authorization": "Token b8a2b75a-a078-4089-869c-e53d448b1ebb", "Authorization": "Token b8a2b75a-a078-4089-869c-e53d448b1ebb",
} }
r = await session.post( r = await session.post(f"https://glot.io/api/run/{lang}/latest", headers=headers, json=data)
f"https://glot.io/api/run/{lang}/latest", headers=headers, json=data
)
return await r.json() return await r.json()
@ -77,9 +75,7 @@ async def glot(lang, langcode, code):
async def list_lang(client, message): async def list_lang(client, message):
daftarlang = await listcode() daftarlang = await listcode()
list_ = "".join(f"~> {i['name']}\n" for i in daftarlang) list_ = "".join(f"~> {i['name']}\n" for i in daftarlang)
return await message.reply( return await message.reply(f"<b>List of Supported Programming Languages:</b>\n{list_}")
f"<b>List of Supported Programming Languages:</b>\n{list_}"
)
@app.on_message(filters.command(["assembly"], "!")) @app.on_message(filters.command(["assembly"], "!"))

View file

@ -195,9 +195,7 @@ async def chat_watcher_func(_, message):
reasonafk = reasondb["reason"] reasonafk = reasondb["reason"]
seenago = get_readable_time2((int(time.time() - timeafk))) seenago = get_readable_time2((int(time.time() - timeafk)))
if afktype == "text": if afktype == "text":
msg += ( msg += f"**{first_name[:25]}** is AFK since {seenago} ago.\n\n"
f"**{first_name[:25]}** is AFK since {seenago} ago.\n\n"
)
if afktype == "text_reason": if afktype == "text_reason":
msg += f"**{first_name[:25]}** is AFK since {seenago} ago.\n\n**Reason:** {reasonafk}\n\n" msg += f"**{first_name[:25]}** is AFK since {seenago} ago.\n\n**Reason:** {reasonafk}\n\n"
if afktype == "animation": if afktype == "animation":

View file

@ -52,9 +52,7 @@ async def donate(_, message):
) )
@app.on_message( @app.on_message(filters.command(["balas"], COMMAND_HANDLER) & filters.user(SUDO) & filters.reply)
filters.command(["balas"], COMMAND_HANDLER) & filters.user(SUDO) & filters.reply
)
async def balas(c, m): async def balas(c, m):
pesan = m.text.split(" ", 1) pesan = m.text.split(" ", 1)
await m.delete() await m.delete()
@ -68,9 +66,7 @@ async def neofetch(c, m):
@app.on_message(filters.command(["shell", "sh"], COMMAND_HANDLER) & filters.user(SUDO)) @app.on_message(filters.command(["shell", "sh"], COMMAND_HANDLER) & filters.user(SUDO))
@app.on_edited_message( @app.on_edited_message(filters.command(["shell", "sh"], COMMAND_HANDLER) & filters.user(SUDO))
filters.command(["shell", "sh"], COMMAND_HANDLER) & filters.user(SUDO)
)
async def shell(_, m): async def shell(_, m):
cmd = m.text.split(" ", 1) cmd = m.text.split(" ", 1)
if len(cmd) == 1: if len(cmd) == 1:
@ -83,15 +79,7 @@ async def shell(_, m):
await m.reply_document( await m.reply_document(
document=doc, document=doc,
file_name=doc.name, file_name=doc.name,
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="❌ Close", callback_data=f"close#{m.from_user.id}")]]),
[
[
InlineKeyboardButton(
text="❌ Close", callback_data=f"close#{m.from_user.id}"
)
]
]
),
) )
try: try:
os.remove("shell_output.txt") os.remove("shell_output.txt")
@ -101,15 +89,7 @@ async def shell(_, m):
await m.reply( await m.reply(
shell, shell,
parse_mode=enums.ParseMode.HTML, parse_mode=enums.ParseMode.HTML,
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="❌ Close", callback_data=f"close#{m.from_user.id}")]]),
[
[
InlineKeyboardButton(
text="❌ Close", callback_data=f"close#{m.from_user.id}"
)
]
]
),
) )
else: else:
await m.reply("No Reply") await m.reply("No Reply")
@ -159,15 +139,7 @@ async def evaluation_cmd_t(_, m):
document="MissKatyEval.txt", document="MissKatyEval.txt",
caption=f"<code>{cmd[: 4096 // 4 - 1]}</code>", caption=f"<code>{cmd[: 4096 // 4 - 1]}</code>",
disable_notification=True, disable_notification=True,
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="❌ Close", callback_data=f"close#{m.from_user.id}")]]),
[
[
InlineKeyboardButton(
text="❌ Close", callback_data=f"close#{m.from_user.id}"
)
]
]
),
) )
os.remove("MissKatyEval.txt") os.remove("MissKatyEval.txt")
await status_message.delete() await status_message.delete()
@ -175,32 +147,17 @@ async def evaluation_cmd_t(_, m):
await status_message.edit( await status_message.edit(
final_output, final_output,
parse_mode=enums.ParseMode.MARKDOWN, parse_mode=enums.ParseMode.MARKDOWN,
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="❌ Close", callback_data=f"close#{m.from_user.id}")]]),
[
[
InlineKeyboardButton(
text="❌ Close", callback_data=f"close#{m.from_user.id}"
)
]
]
),
) )
async def aexec(code, c, m): async def aexec(code, c, m):
exec( exec("async def __aexec(c, m): " + "\n p = print" + "\n replied = m.reply_to_message" + "".join(f"\n {l_}" for l_ in code.split("\n")))
"async def __aexec(c, m): "
+ "\n p = print"
+ "\n replied = m.reply_to_message"
+ "".join(f"\n {l_}" for l_ in code.split("\n"))
)
return await locals()["__aexec"](c, m) return await locals()["__aexec"](c, m)
async def shell_exec(code, treat=True): async def shell_exec(code, treat=True):
process = await asyncio.create_subprocess_shell( process = await asyncio.create_subprocess_shell(code, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT)
code, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT
)
stdout = (await process.communicate())[0] stdout = (await process.communicate())[0]
if treat: if treat:

View file

@ -50,15 +50,7 @@ async def upload(bot, message):
text = callapi.json() 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"]}' 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( btn = InlineKeyboardMarkup([[InlineKeyboardButton("📥 Download 📥", url=f"{text['data']['file']['url']['full']}")]])
[
[
InlineKeyboardButton(
"📥 Download 📥", url=f"{text['data']['file']['url']['full']}"
)
]
]
)
await m.edit(output, reply_markup=btn) await m.edit(output, reply_markup=btn)
except Exception as e: except Exception as e:
await bot.send_message(message.chat.id, text=f"Something Went Wrong!\n\n{e}") await bot.send_message(message.chat.id, text=f"Something Went Wrong!\n\n{e}")
@ -79,9 +71,7 @@ async def download(client, message):
) )
end_t = datetime.now() end_t = datetime.now()
ms = (end_t - start_t).seconds ms = (end_t - start_t).seconds
await pesan.edit( await pesan.edit(f"Downloaded to <code>{the_real_download_location}</code> in <u>{ms}</u> seconds.")
f"Downloaded to <code>{the_real_download_location}</code> in <u>{ms}</u> seconds."
)
elif len(message.command) > 1: elif len(message.command) > 1:
start_t = datetime.now() start_t = datetime.now()
the_url_parts = " ".join(message.command[1:]) the_url_parts = " ".join(message.command[1:])
@ -117,14 +107,10 @@ async def download(client, message):
current_message += f"File Name: <code>{custom_file_name}</code>\n" current_message += f"File Name: <code>{custom_file_name}</code>\n"
current_message += f"Speed: {speed}\n" current_message += f"Speed: {speed}\n"
current_message += f"{progress_str}\n" current_message += f"{progress_str}\n"
current_message += ( current_message += f"{humanbytes(downloaded)} of {humanbytes(total_length)}\n"
f"{humanbytes(downloaded)} of {humanbytes(total_length)}\n"
)
current_message += f"ETA: {estimated_total_time}" current_message += f"ETA: {estimated_total_time}"
if round(diff % 10.00) == 0 and current_message != display_message: if round(diff % 10.00) == 0 and current_message != display_message:
await pesan.edit( await pesan.edit(disable_web_page_preview=True, text=current_message)
disable_web_page_preview=True, text=current_message
)
display_message = current_message display_message = current_message
await asyncio.sleep(10) await asyncio.sleep(10)
except Exception as e: except Exception as e:
@ -132,22 +118,16 @@ async def download(client, message):
if os.path.exists(download_file_path): if os.path.exists(download_file_path):
end_t = datetime.now() end_t = datetime.now()
ms = (end_t - start_t).seconds ms = (end_t - start_t).seconds
await pesan.edit( await pesan.edit(f"Downloaded to <code>{download_file_path}</code> in {ms} seconds")
f"Downloaded to <code>{download_file_path}</code> in {ms} seconds"
)
else: else:
await pesan.edit( await pesan.edit("Reply to a Telegram Media, to download it to my local server.")
"Reply to a Telegram Media, to download it to my local server."
)
@app.on_message(filters.command(["tiktokdl"], COMMAND_HANDLER)) @app.on_message(filters.command(["tiktokdl"], COMMAND_HANDLER))
@capture_err @capture_err
async def tiktokdl(client, message): async def tiktokdl(client, message):
if len(message.command) == 1: if len(message.command) == 1:
return await message.reply( return await message.reply(f"Use command /{message.command[0]} [link] to download tiktok video.")
f"Use command /{message.command[0]} [link] to download tiktok video."
)
link = message.command[1] link = message.command[1]
msg = await message.reply("Trying download...") msg = await message.reply("Trying download...")
try: try:
@ -166,9 +146,7 @@ async def tiktokdl(client, message):
@capture_err @capture_err
async def fbdl(client, message): async def fbdl(client, message):
if len(message.command) == 1: if len(message.command) == 1:
return await message.reply( return await message.reply(f"Use command /{message.command[0]} [link] to download Facebook video.")
f"Use command /{message.command[0]} [link] to download Facebook video."
)
link = message.command[1] link = message.command[1]
msg = await message.reply("Trying download...") msg = await message.reply("Trying download...")
try: try:
@ -190,7 +168,5 @@ async def fbdl(client, message):
except: except:
pass pass
except Exception as e: except Exception as e:
await message.reply( await message.reply(f"Failed to download Facebook video..\n\n<b>Reason:</b> {e}")
f"Failed to download Facebook video..\n\n<b>Reason:</b> {e}"
)
await msg.delete() await msg.delete()

View file

@ -19,28 +19,17 @@ async def start(_, message):
await message.reply_text(text=f"Wa'alaikumsalam {message.from_user.mention} 😇") await message.reply_text(text=f"Wa'alaikumsalam {message.from_user.mention} 😇")
@app.on_message( @app.on_message(filters.regex(r"#request|#req", re.I) & (filters.text | filters.photo) & filters.chat(-1001255283935) & ~filters.channel)
filters.regex(r"#request|#req", re.I)
& (filters.text | filters.photo)
& filters.chat(-1001255283935)
& ~filters.channel
)
@capture_err @capture_err
async def request_user(client, message): async def request_user(client, message):
if message.sender_chat: if message.sender_chat:
return await message.reply( return await message.reply(f"{message.from_user.mention} mohon gunakan akun asli saat request.")
f"{message.from_user.mention} mohon gunakan akun asli saat request."
)
is_in_gap, sleep_time = await check_time_gap(message.from_user.id) is_in_gap, sleep_time = await check_time_gap(message.from_user.id)
if is_in_gap: if is_in_gap:
return await message.reply("Sabar dikit napa.. 🙄") return await message.reply("Sabar dikit napa.. 🙄")
markup = InlineKeyboardMarkup( 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( InlineKeyboardButton(
text="🚫 Tolak", text="🚫 Tolak",
@ -72,9 +61,7 @@ async def request_user(client, message):
else: else:
REQUEST_DB[user_id] = 1 REQUEST_DB[user_id] = 1
if REQUEST_DB[user_id] > 3: if REQUEST_DB[user_id] > 3:
return await message.reply( return await message.reply(f"Mohon maaf {message.from_user.mention}, maksimal request hanya 3x perhari. Kalo mau tambah 5k per request 😝😝.")
f"Mohon maaf {message.from_user.mention}, maksimal request hanya 3x perhari. Kalo mau tambah 5k per request 😝😝."
)
if message.text: if message.text:
forward = await client.send_message( forward = await client.send_message(
-1001575525902, -1001575525902,
@ -155,36 +142,18 @@ async def _callbackreq(c, q):
if q.message.caption: if q.message.caption:
await q.message.edit_text( await q.message.edit_text(
f"<b>COMPLETED</b>\n\n<s>{q.message.caption}</s>", f"<b>COMPLETED</b>\n\n<s>{q.message.caption}</s>",
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="✅ Request Completed", callback_data="reqcompl")]]),
[
[
InlineKeyboardButton(
text="✅ Request Completed", callback_data="reqcompl"
)
]
]
),
) )
else: else:
await q.message.edit_text( await q.message.edit_text(
f"<b>COMPLETED</b>\n\n<s>{q.message.text}</s>", f"<b>COMPLETED</b>\n\n<s>{q.message.text}</s>",
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="✅ Request Completed", callback_data="reqcompl")]]),
[
[
InlineKeyboardButton(
text="✅ Request Completed", callback_data="reqcompl"
)
]
]
),
) )
await q.answer("Request berhasil diselesaikan ✅") await q.answer("Request berhasil diselesaikan ✅")
else: else:
await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True) await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True)
except UserNotParticipant: except UserNotParticipant:
return await q.answer( return await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10)
"Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10
)
except PeerIdInvalid: except PeerIdInvalid:
return await q.answer( return await q.answer(
"Silahkan kirim pesan digrup supaya bot bisa merespon.", "Silahkan kirim pesan digrup supaya bot bisa merespon.",
@ -240,9 +209,7 @@ async def _callbackreqada(c, q):
else: else:
await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True) await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True)
except UserNotParticipant: except UserNotParticipant:
return await q.answer( return await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10)
"Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10
)
except PeerIdInvalid: except PeerIdInvalid:
return await q.answer( return await q.answer(
"Silahkan kirim pesan digrup supaya bot bisa merespon.", "Silahkan kirim pesan digrup supaya bot bisa merespon.",
@ -269,36 +236,18 @@ async def _callbackreject(c, q):
if q.message.caption: if q.message.caption:
await q.message.edit_text( await q.message.edit_text(
f"<b>REJECTED</b>\n\n<s>{q.message.caption}</s>", f"<b>REJECTED</b>\n\n<s>{q.message.caption}</s>",
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="🚫 Request Rejected", callback_data="reqreject")]]),
[
[
InlineKeyboardButton(
text="🚫 Request Rejected", callback_data="reqreject"
)
]
]
),
) )
else: else:
await q.message.edit_text( await q.message.edit_text(
f"<b>REJECTED</b>\n\n<s>{q.message.text}</s>", f"<b>REJECTED</b>\n\n<s>{q.message.text}</s>",
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="🚫 Request Rejected", callback_data="reqreject")]]),
[
[
InlineKeyboardButton(
text="🚫 Request Rejected", callback_data="reqreject"
)
]
]
),
) )
await q.answer("Request berhasil ditolak 🚫") await q.answer("Request berhasil ditolak 🚫")
else: else:
await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True) await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True)
except UserNotParticipant: except UserNotParticipant:
await q.answer( await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10)
"Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10
)
except PeerIdInvalid: except PeerIdInvalid:
return await q.answer( return await q.answer(
"Silahkan kirim pesan digrup supaya bot bisa merespon.", "Silahkan kirim pesan digrup supaya bot bisa merespon.",
@ -350,9 +299,7 @@ async def _callbackunav(c, q):
] ]
), ),
) )
await q.answer( await q.answer("Request tidak tersedia, mungkin belum rilis atau memang tidak tersedia versi digital.")
"Request tidak tersedia, mungkin belum rilis atau memang tidak tersedia versi digital."
)
else: else:
await q.answer( await q.answer(
"Apa motivasi kamu menekan tombol ini?", "Apa motivasi kamu menekan tombol ini?",
@ -360,9 +307,7 @@ async def _callbackunav(c, q):
cache_time=1000, cache_time=1000,
) )
except UserNotParticipant: except UserNotParticipant:
await q.answer( await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10)
"Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10
)
except PeerIdInvalid: except PeerIdInvalid:
return await q.answer( return await q.answer(
"Silahkan kirim pesan digrup supaya bot bisa merespon.", "Silahkan kirim pesan digrup supaya bot bisa merespon.",
@ -400,9 +345,7 @@ async def _callbackaft_unav(c, q):
@app.on_callback_query(filters.regex(r"^reqavailable$")) @app.on_callback_query(filters.regex(r"^reqavailable$"))
async def _callbackaft_dahada(c, q): async def _callbackaft_dahada(c, q):
await q.answer( await q.answer("Request ini sudah ada, silahkan cari 🔍 di channelnya yaa 😉..", show_alert=True)
"Request ini sudah ada, silahkan cari 🔍 di channelnya yaa 😉..", show_alert=True
)
scheduler = AsyncIOScheduler(timezone="Asia/Jakarta") scheduler = AsyncIOScheduler(timezone="Asia/Jakarta")

View file

@ -50,13 +50,9 @@ You can use markdown or html to save text too.
@adminsOnly("can_change_info") @adminsOnly("can_change_info")
async def save_filters(_, message): async def save_filters(_, message):
if len(message.command) == 1 or not message.reply_to_message: if len(message.command) == 1 or not message.reply_to_message:
return await message.reply_text( return await message.reply_text("**Usage:**\nReply to a text or sticker with /filter [FILTER_NAME] to save it.")
"**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: if not message.reply_to_message.text and not message.reply_to_message.sticker:
return await message.reply_text( return await message.reply_text("__**You can only save text or stickers in filters for now.**__")
"__**You can only save text or stickers in filters for now.**__"
)
name = message.text.split(None, 1)[1].strip() name = message.text.split(None, 1)[1].strip()
if not name: if not name:
return await message.reply_text("**Usage:**\n__/filter [FILTER_NAME]__") return await message.reply_text("**Usage:**\n__/filter [FILTER_NAME]__")
@ -64,9 +60,7 @@ async def save_filters(_, message):
_type = "text" if message.reply_to_message.text else "sticker" _type = "text" if message.reply_to_message.text else "sticker"
_filter = { _filter = {
"type": _type, "type": _type,
"data": message.reply_to_message.text.markdown "data": message.reply_to_message.text.markdown if _type == "text" else message.reply_to_message.sticker.file_id,
if _type == "text"
else message.reply_to_message.sticker.file_id,
} }
await save_filter(chat_id, name, _filter) await save_filter(chat_id, name, _filter)
await message.reply(f"__**Saved filter {name}.**__") await message.reply(f"__**Saved filter {name}.**__")

View file

@ -36,17 +36,10 @@ __HELP__ = """"
async def genss(client, message): async def genss(client, message):
replied = message.reply_to_message replied = message.reply_to_message
if replied is not None: if replied is not None:
media = None vid = [replied.video, replied.document]
if replied is not None: media = next((v for v in vid if v is not None), None)
vid = [replied.video, replied.document]
for v in vid:
if v is not None:
media = v
break
if media is None: if media is None:
return await message.reply( return await message.reply("Reply to a Telegram Video or document as video to generate screenshoot!")
"Reply to a Telegram Video or document as video to generate screenshoot!"
)
process = await message.reply_text("`Processing, please wait..`") process = await message.reply_text("`Processing, please wait..`")
c_time = time.time() c_time = time.time()
the_real_download_location = await client.download_media( the_real_download_location = await client.download_media(
@ -68,16 +61,12 @@ async def genss(client, message):
chat_id=message.chat.id, chat_id=message.chat.id,
message_id=process.id, message_id=process.id,
) )
await client.send_chat_action( await client.send_chat_action(chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO)
chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO
)
try: try:
await gather( await gather(
*[ *[
message.reply_document( message.reply_document(images, reply_to_message_id=message.id),
images, reply_to_message_id=message.id
),
message.reply_photo(images, reply_to_message_id=message.id), message.reply_photo(images, reply_to_message_id=message.id),
] ]
) )
@ -85,9 +74,7 @@ async def genss(client, message):
await sleep(e.value) await sleep(e.value)
await gather( await gather(
*[ *[
message.reply_document( message.reply_document(images, reply_to_message_id=message.id),
images, reply_to_message_id=message.id
),
message.reply_photo(images, reply_to_message_id=message.id), message.reply_photo(images, reply_to_message_id=message.id),
] ]
) )
@ -119,13 +106,9 @@ async def genss_link(client, message):
try: try:
link = message.text.split(" ")[1] link = message.text.split(" ")[1]
if link.startswith("https://file.yasirweb.my.id"): if link.startswith("https://file.yasirweb.my.id"):
link = link.replace( link = link.replace("https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev")
"https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev"
)
if link.startswith("https://link.yasirweb.my.id"): if link.startswith("https://link.yasirweb.my.id"):
link = link.replace( link = link.replace("https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com")
"https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com"
)
process = await message.reply_text("`Processing, please wait..`") process = await message.reply_text("`Processing, please wait..`")
tmp_directory_for_each_user = f"./MissKaty_Genss/{str(message.from_user.id)}" tmp_directory_for_each_user = f"./MissKaty_Genss/{str(message.from_user.id)}"
if not os.path.isdir(tmp_directory_for_each_user): if not os.path.isdir(tmp_directory_for_each_user):
@ -137,9 +120,7 @@ async def genss_link(client, message):
chat_id=message.chat.id, chat_id=message.chat.id,
message_id=process.id, message_id=process.id,
) )
await client.send_chat_action( await client.send_chat_action(chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO)
chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO
)
try: try:
await message.reply_media_group(images, reply_to_message_id=message.id) await message.reply_media_group(images, reply_to_message_id=message.id)
except FloodWait as e: except FloodWait as e:

View file

@ -47,9 +47,7 @@ def draw_multiple_line_text(image, text, font, text_start_height):
lines = textwrap.wrap(text, width=50) lines = textwrap.wrap(text, width=50)
for line in lines: for line in lines:
line_width, line_height = font.getsize(line) line_width, line_height = font.getsize(line)
draw.text( draw.text(((image_width - line_width) / 2, y_text), line, font=font, fill="black")
((image_width - line_width) / 2, y_text), line, font=font, fill="black"
)
y_text += line_height y_text += line_height
@ -59,12 +57,8 @@ def welcomepic(pic, user, chat, count, id):
background = background.resize((1024, 500), Image.ANTIALIAS) background = background.resize((1024, 500), Image.ANTIALIAS)
pfp = Image.open(pic).convert("RGBA") pfp = Image.open(pic).convert("RGBA")
pfp = circle(pfp) pfp = circle(pfp)
pfp = pfp.resize( pfp = pfp.resize((265, 265)) # Resizes the Profilepicture so it fits perfectly in the circle
(265, 265) font = ImageFont.truetype("Calistoga-Regular.ttf", 37) # <- Text Font of the Member Count. Change the text size for your preference
) # 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 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, member_text, font, 395)
draw_multiple_line_text(background, chat, font, 47) draw_multiple_line_text(background, chat, font, 47)
@ -75,23 +69,15 @@ def welcomepic(pic, user, chat, count, id):
size=20, size=20,
align="right", align="right",
) )
background.paste( background.paste(pfp, (379, 123), pfp) # Pastes the Profilepicture on the Background Image
pfp, (379, 123), pfp background.save(f"downloads/welcome#{id}.png") # Saves the finished Image in the folder with the filename
) # 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" return f"downloads/welcome#{id}.png"
@app.on_chat_member_updated(filters.group & filters.chat(-1001128045651)) @app.on_chat_member_updated(filters.group & filters.chat(-1001128045651))
@capture_err @capture_err
async def member_has_joined(c: app, member: ChatMemberUpdated): async def member_has_joined(c: app, member: ChatMemberUpdated):
if ( if not member.new_chat_member or member.new_chat_member.status in {"banned", "left", "restricted"} or member.old_chat_member:
not member.new_chat_member
or member.new_chat_member.status in {"banned", "left", "restricted"}
or member.old_chat_member
):
return return
user = member.new_chat_member.user if member.new_chat_member else member.from_user user = member.new_chat_member.user if member.new_chat_member else member.from_user
if user.id in SUDO: if user.id in SUDO:
@ -110,21 +96,15 @@ async def member_has_joined(c: app, member: ChatMemberUpdated):
pass pass
mention = f"<a href='tg://user?id={user.id}'>{user.first_name}</a>" mention = f"<a href='tg://user?id={user.id}'>{user.first_name}</a>"
joined_date = datetime.fromtimestamp(time.time()).strftime("%Y.%m.%d %H:%M:%S") joined_date = datetime.fromtimestamp(time.time()).strftime("%Y.%m.%d %H:%M:%S")
first_name = ( first_name = f"{user.first_name} {user.last_name}" if user.last_name else user.first_name
f"{user.first_name} {user.last_name}" if user.last_name else user.first_name
)
id = user.id id = user.id
dc = user.dc_id or "Member tanpa PP" dc = user.dc_id or "Member tanpa PP"
count = await app.get_chat_members_count(member.chat.id) count = await app.get_chat_members_count(member.chat.id)
try: try:
pic = await app.download_media( pic = await app.download_media(user.photo.big_file_id, file_name=f"pp{user.id}.png")
user.photo.big_file_id, file_name=f"pp{user.id}.png"
)
except AttributeError: except AttributeError:
pic = "img/profilepic.png" pic = "img/profilepic.png"
welcomeimg = await welcomepic( welcomeimg = await welcomepic(pic, user.first_name, member.chat.title, count, user.id)
pic, user.first_name, member.chat.title, count, user.id
)
temp.MELCOW[f"welcome-{member.chat.id}"] = await c.send_photo( temp.MELCOW[f"welcome-{member.chat.id}"] = await c.send_photo(
member.chat.id, member.chat.id,
photo=welcomeimg, photo=welcomeimg,
@ -133,30 +113,18 @@ async def member_has_joined(c: app, member: ChatMemberUpdated):
userspammer = "" userspammer = ""
# Spamwatch Detection # Spamwatch Detection
try: try:
headers = { headers = {"Authorization": "Bearer XvfzE4AUNXkzCy0DnIVpFDlxZi79lt6EnwKgBj8Quuzms0OSdHvf1k6zSeyzZ_lz"}
"Authorization": "Bearer XvfzE4AUNXkzCy0DnIVpFDlxZi79lt6EnwKgBj8Quuzms0OSdHvf1k6zSeyzZ_lz" apispamwatch = (await http.get(f"https://api.spamwat.ch/banlist/{user.id}", headers=headers)).json()
}
apispamwatch = (
await http.get(
f"https://api.spamwat.ch/banlist/{user.id}", headers=headers
)
).json()
if not apispamwatch.get("error"): if not apispamwatch.get("error"):
await app.ban_chat_member( await app.ban_chat_member(member.chat.id, user.id, datetime.now() + timedelta(seconds=30))
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" 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: except Exception as err:
LOGGER.error(f"ERROR in Spamwatch Detection. {err}") LOGGER.error(f"ERROR in Spamwatch Detection. {err}")
# Combot API Detection # Combot API Detection
try: try:
apicombot = ( apicombot = (await http.get(f"https://api.cas.chat/check?user_id={user.id}")).json()
await http.get(f"https://api.cas.chat/check?user_id={user.id}")
).json()
if apicombot.get("ok") == "true": if apicombot.get("ok") == "true":
await app.ban_chat_member( await app.ban_chat_member(member.chat.id, user.id, datetime.now() + timedelta(seconds=30))
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>" 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: except Exception as err:
LOGGER.error(f"ERROR in Combot API Detection. {err}") LOGGER.error(f"ERROR in Combot API Detection. {err}")
@ -185,9 +153,7 @@ async def save_group(bot, message):
await db.add_chat(message.chat.id, message.chat.title) await db.add_chat(message.chat.id, message.chat.title)
if message.chat.id in temp.BANNED_CHATS: if message.chat.id in temp.BANNED_CHATS:
# Inspired from a boat of a banana tree # Inspired from a boat of a banana tree
buttons = [ buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]]
[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]
]
reply_markup = InlineKeyboardMarkup(buttons) reply_markup = InlineKeyboardMarkup(buttons)
k = await message.reply( 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>", 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>",
@ -202,9 +168,7 @@ async def save_group(bot, message):
return return
buttons = [ buttons = [
[ [
InlineKeyboardButton( InlineKeyboardButton(" Help", url=f"https://t.me/{temp.U_NAME}?start=help"),
" Help", url=f"https://t.me/{temp.U_NAME}?start=help"
),
InlineKeyboardButton("📢 Updates", url="https://t.me/YasirPediaChannel"), InlineKeyboardButton("📢 Updates", url="https://t.me/YasirPediaChannel"),
] ]
] ]
@ -217,14 +181,10 @@ async def save_group(bot, message):
for u in message.new_chat_members: for u in message.new_chat_members:
count = await app.get_chat_members_count(message.chat.id) count = await app.get_chat_members_count(message.chat.id)
try: try:
pic = await app.download_media( pic = await app.download_media(u.photo.big_file_id, file_name=f"pp{u.id}.png")
u.photo.big_file_id, file_name=f"pp{u.id}.png"
)
except AttributeError: except AttributeError:
pic = "img/profilepic.png" pic = "img/profilepic.png"
welcomeimg = await welcomepic( welcomeimg = await welcomepic(pic, u.first_name, message.chat.title, count, u.id)
pic, u.first_name, message.chat.title, count, u.id
)
if (temp.MELCOW).get(f"welcome-{message.chat.id}") is not None: if (temp.MELCOW).get(f"welcome-{message.chat.id}") is not None:
try: try:
await (temp.MELCOW[f"welcome-{message.chat.id}"]).delete() await (temp.MELCOW[f"welcome-{message.chat.id}"]).delete()
@ -255,9 +215,7 @@ async def leave_a_chat(bot, message):
except: except:
chat = chat chat = chat
try: try:
buttons = [ buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]]
[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]
]
reply_markup = InlineKeyboardMarkup(buttons) reply_markup = InlineKeyboardMarkup(buttons)
await bot.send_message( await bot.send_message(
chat_id=chat, chat_id=chat,
@ -289,16 +247,12 @@ async def disable_chat(bot, message):
if not cha_t: if not cha_t:
return await message.reply("Chat Not Found In DB") return await message.reply("Chat Not Found In DB")
if cha_t["is_disabled"]: if cha_t["is_disabled"]:
return await message.reply( return await message.reply(f"This chat is already disabled:\nReason-<code> {cha_t['reason']} </code>")
f"This chat is already disabled:\nReason-<code> {cha_t['reason']} </code>"
)
await db.disable_chat(chat_, reason) await db.disable_chat(chat_, reason)
temp.BANNED_CHATS.append(chat_) temp.BANNED_CHATS.append(chat_)
await message.reply("Chat Succesfully Disabled") await message.reply("Chat Succesfully Disabled")
try: try:
buttons = [ buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]]
[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]
]
reply_markup = InlineKeyboardMarkup(buttons) reply_markup = InlineKeyboardMarkup(buttons)
await bot.send_message( await bot.send_message(
chat_id=chat_, chat_id=chat_,
@ -343,9 +297,7 @@ async def gen_invite(bot, message):
try: try:
link = await bot.create_chat_invite_link(chat) link = await bot.create_chat_invite_link(chat)
except ChatAdminRequired: except ChatAdminRequired:
return await message.reply( return await message.reply("Invite Link Generation Failed, Iam Not Having Sufficient Rights")
"Invite Link Generation Failed, Iam Not Having Sufficient Rights"
)
except Exception as e: except Exception as e:
return await message.reply(f"Error {e}") return await message.reply(f"Error {e}")
await message.reply(f"Here is your Invite Link {link.invite_link}") await message.reply(f"Here is your Invite Link {link.invite_link}")
@ -358,15 +310,11 @@ async def adminlist(_, message):
return await message.reply("Perintah ini hanya untuk grup") return await message.reply("Perintah ini hanya untuk grup")
try: try:
administrators = [] administrators = []
async for m in app.get_chat_members( async for m in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS):
message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS
):
administrators.append(f"{m.user.first_name}") administrators.append(f"{m.user.first_name}")
res = "".join(f"~ {i}\n" for i in administrators) res = "".join(f"~ {i}\n" for i in administrators)
return await message.reply( return await message.reply(f"Daftar Admin di <b>{message.chat.title}</b> ({message.chat.id}):\n~ {res}")
f"Daftar Admin di <b>{message.chat.title}</b> ({message.chat.id}):\n~ {res}"
)
except Exception as e: except Exception as e:
await message.reply(f"ERROR: {str(e)}") await message.reply(f"ERROR: {str(e)}")
@ -384,9 +332,7 @@ async def kickme(_, message):
await message.reply_text(txt) await message.reply_text(txt)
await message.chat.unban_member(message.from_user.id) await message.chat.unban_member(message.from_user.id)
except RPCError as ef: except RPCError as ef:
await message.reply_text( await message.reply_text(f"Sepertinya ada error, silahkan report ke owner saya. \nERROR: {str(ef)}")
f"Sepertinya ada error, silahkan report ke owner saya. \nERROR: {str(ef)}"
)
except Exception as err: except Exception as err:
await message.reply(f"ERROR: {err}") await message.reply(f"ERROR: {err}")

View file

@ -73,13 +73,9 @@ async def imdbsetlang(client, query):
) )
is_imdb, lang = await is_imdbset(query.from_user.id) is_imdb, lang = await is_imdbset(query.from_user.id)
if is_imdb: if is_imdb:
buttons.row( buttons.row(InlineButton("🗑 Remove UserSetting", f"setimdb#rm#{query.from_user.id}"))
InlineButton("🗑 Remove UserSetting", f"setimdb#rm#{query.from_user.id}")
)
buttons.row(InlineButton("❌ Close", f"close#{query.from_user.id}")) buttons.row(InlineButton("❌ Close", f"close#{query.from_user.id}"))
await query.message.edit_caption( await query.message.edit_caption("<i>Please select available language below..</i>", reply_markup=buttons)
"<i>Please select available language below..</i>", reply_markup=buttons
)
@app.on_callback_query(filters.regex("^setimdb")) @app.on_callback_query(filters.regex("^setimdb"))
@ -89,19 +85,13 @@ async def imdbsetlang(client, query):
return await query.answer("⚠️ Access Denied!", True) return await query.answer("⚠️ Access Denied!", True)
if lang == "eng": if lang == "eng":
await add_imdbset(query.from_user.id, lang) await add_imdbset(query.from_user.id, lang)
await query.message.edit_caption( await query.message.edit_caption("Language interface for IMDB has been changed to English.")
"Language interface for IMDB has been changed to English."
)
elif lang == "ind": elif lang == "ind":
await add_imdbset(query.from_user.id, lang) await add_imdbset(query.from_user.id, lang)
await query.message.edit_caption( await query.message.edit_caption("Bahasa tampilan IMDB sudah diubah ke Indonesia.")
"Bahasa tampilan IMDB sudah diubah ke Indonesia."
)
else: else:
await remove_imdbset(query.from_user.id) await remove_imdbset(query.from_user.id)
await query.message.edit_caption( await query.message.edit_caption("UserSetting for IMDB has been deleted from database.")
"UserSetting for IMDB has been deleted from database."
)
async def imdb_search_id(kueri, message): async def imdb_search_id(kueri, message):
@ -117,9 +107,7 @@ async def imdb_search_id(kueri, message):
r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}") r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}")
res = json.loads(r.text).get("result") res = json.loads(r.text).get("result")
if not res: if not res:
return await k.edit_caption( return await k.edit_caption(f"⛔️ Tidak ditemukan hasil untuk kueri: <code>{kueri}</code>")
f"⛔️ Tidak ditemukan hasil untuk kueri: <code>{kueri}</code>"
)
msg += f"🎬 Ditemukan ({len(res)}) hasil untuk kueri: <code>{kueri}</code>\n\n" msg += f"🎬 Ditemukan ({len(res)}) hasil untuk kueri: <code>{kueri}</code>\n\n"
for num, movie in enumerate(res, start=1): for num, movie in enumerate(res, start=1):
title = movie.get("l") title = movie.get("l")
@ -133,22 +121,22 @@ async def imdb_search_id(kueri, message):
callback_data=f"imdbres_id#{message.from_user.id}#{movieID}", callback_data=f"imdbres_id#{message.from_user.id}#{movieID}",
) )
) )
BTN.append( BTN.extend(
InlineKeyboardButton( (
text="🚩 Language", callback_data=f"imdbset#{message.from_user.id}" InlineKeyboardButton(
) text="🚩 Language",
) callback_data=f"imdbset#{message.from_user.id}",
BTN.append( ),
InlineKeyboardButton( InlineKeyboardButton(
text="❌ Close", callback_data=f"close#{message.from_user.id}" text="❌ Close",
callback_data=f"close#{message.from_user.id}",
),
) )
) )
buttons.add(*BTN) buttons.add(*BTN)
await k.edit_caption(msg, reply_markup=buttons) await k.edit_caption(msg, reply_markup=buttons)
except Exception as err: except Exception as err:
await k.edit_caption( await k.edit_caption(f"Ooppss, gagal mendapatkan daftar judul di IMDb.\n\n<b>ERROR:</b> <code>{err}</code>")
f"Ooppss, gagal mendapatkan daftar judul di IMDb.\n\n<b>ERROR:</b> <code>{err}</code>"
)
async def imdb_search_en(kueri, message): async def imdb_search_en(kueri, message):
@ -164,9 +152,7 @@ async def imdb_search_en(kueri, message):
r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}") r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}")
res = json.loads(r.text).get("result") res = json.loads(r.text).get("result")
if not res: if not res:
return await k.edit_caption( return await k.edit_caption(f"⛔️ Result not found for keywords: <code>{kueri}</code>")
f"⛔️ Result not found for keywords: <code>{kueri}</code>"
)
msg += f"🎬 Found ({len(res)}) result for keywords: <code>{kueri}</code>\n\n" msg += f"🎬 Found ({len(res)}) result for keywords: <code>{kueri}</code>\n\n"
for num, movie in enumerate(res, start=1): for num, movie in enumerate(res, start=1):
title = movie.get("l") title = movie.get("l")
@ -180,22 +166,22 @@ async def imdb_search_en(kueri, message):
callback_data=f"imdbres_en#{message.from_user.id}#{movieID}", callback_data=f"imdbres_en#{message.from_user.id}#{movieID}",
) )
) )
BTN.append( BTN.extend(
InlineKeyboardButton( (
text="🚩 Language", callback_data=f"imdbset#{message.from_user.id}" InlineKeyboardButton(
) text="🚩 Language",
) callback_data=f"imdbset#{message.from_user.id}",
BTN.append( ),
InlineKeyboardButton( InlineKeyboardButton(
text="❌ Close", callback_data=f"close#{message.from_user.id}" text="❌ Close",
callback_data=f"close#{message.from_user.id}",
),
) )
) )
buttons.add(*BTN) buttons.add(*BTN)
await k.edit_caption(msg, reply_markup=buttons) await k.edit_caption(msg, reply_markup=buttons)
except Exception as err: except Exception as err:
await k.edit_caption( await k.edit_caption(f"Failed when requesting movies title.\n\n<b>ERROR:</b> <code>{err}</code>")
f"Failed when requesting movies title.\n\n<b>ERROR:</b> <code>{err}</code>"
)
@app.on_callback_query(filters.regex("^imdcari_id")) @app.on_callback_query(filters.regex("^imdcari_id"))
@ -216,9 +202,7 @@ async def imdbcari_id(client, query):
r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}") r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}")
res = json.loads(r.text).get("result") res = json.loads(r.text).get("result")
if not res: if not res:
return await query.message.edit_caption( return await query.message.edit_caption(f"⛔️ Tidak ditemukan hasil untuk kueri: <code>{kueri}</code>")
f"⛔️ Tidak ditemukan hasil untuk kueri: <code>{kueri}</code>"
)
msg += f"🎬 Ditemukan ({len(res)}) hasil dari: <code>{kueri}</code> ~ {query.from_user.mention}\n\n" msg += f"🎬 Ditemukan ({len(res)}) hasil dari: <code>{kueri}</code> ~ {query.from_user.mention}\n\n"
for num, movie in enumerate(res, start=1): for num, movie in enumerate(res, start=1):
title = movie.get("l") title = movie.get("l")
@ -226,19 +210,17 @@ async def imdbcari_id(client, query):
type = movie.get("q").replace("feature", "movie").capitalize() type = movie.get("q").replace("feature", "movie").capitalize()
movieID = re.findall(r"tt(\d+)", movie.get("id"))[0] movieID = re.findall(r"tt(\d+)", movie.get("id"))[0]
msg += f"{num}. {title} {year} - {type}\n" msg += f"{num}. {title} {year} - {type}\n"
BTN.append( BTN.append(InlineKeyboardButton(text=num, callback_data=f"imdbres_id#{uid}#{movieID}"))
InlineKeyboardButton( BTN.extend(
text=num, callback_data=f"imdbres_id#{uid}#{movieID}" (
) InlineKeyboardButton(text="🚩 Language", callback_data=f"imdbset#{uid}"),
InlineKeyboardButton(text="❌ Close", callback_data=f"close#{uid}"),
) )
BTN.append(InlineKeyboardButton(text="🚩 Language", callback_data=f"imdbset#{uid}")) )
BTN.append(InlineKeyboardButton(text="❌ Close", callback_data=f"close#{uid}"))
buttons.add(*BTN) buttons.add(*BTN)
await query.message.edit_caption(msg, reply_markup=buttons) await query.message.edit_caption(msg, reply_markup=buttons)
except Exception as err: except Exception as err:
await query.message.edit_caption( await query.message.edit_caption(f"Ooppss, gagal mendapatkan daftar judul di IMDb.\n\n<b>ERROR:</b> <code>{err}</code>")
f"Ooppss, gagal mendapatkan daftar judul di IMDb.\n\n<b>ERROR:</b> <code>{err}</code>"
)
@app.on_callback_query(filters.regex("^imdbcari_en")) @app.on_callback_query(filters.regex("^imdbcari_en"))
@ -246,12 +228,12 @@ async def imdbcari_en(client, query):
BTN = [] BTN = []
i, msg, uid = query.data.split("#") i, msg, uid = query.data.split("#")
if query.from_user.id != int(uid): if query.from_user.id != int(uid):
return await query.answer(f"⚠️ Access Denied!", True) return await query.answer("⚠️ Access Denied!", True)
try: try:
kueri = LIST_CARI.get(msg) kueri = LIST_CARI.get(msg)
del LIST_CARI[msg] del LIST_CARI[msg]
except KeyError: except KeyError:
return await query.message.edit_caption(f"⚠️ Callback Query Expired!") return await query.message.edit_caption("⚠️ Callback Query Expired!")
await query.message.edit_caption("<i>🔎 Looking in the IMDB Database..</i>") await query.message.edit_caption("<i>🔎 Looking in the IMDB Database..</i>")
msg = "" msg = ""
buttons = InlineKeyboard(row_width=4) buttons = InlineKeyboard(row_width=4)
@ -259,9 +241,7 @@ async def imdbcari_en(client, query):
r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}") r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}")
res = json.loads(r.text).get("result") res = json.loads(r.text).get("result")
if not res: if not res:
return await query.message.edit_caption( return await query.message.edit_caption(f"⛔️ Result not found for keywords: <code>{kueri}</code>")
f"⛔️ Result not found for keywords: <code>{kueri}</code>"
)
msg += f"🎬 Found ({len(res)}) result for keywords: <code>{kueri}</code> ~ {query.from_user.mention}\n\n" msg += f"🎬 Found ({len(res)}) result for keywords: <code>{kueri}</code> ~ {query.from_user.mention}\n\n"
for num, movie in enumerate(res, start=1): for num, movie in enumerate(res, start=1):
title = movie.get("l") title = movie.get("l")
@ -269,27 +249,17 @@ async def imdbcari_en(client, query):
type = movie.get("q").replace("feature", "movie").capitalize() type = movie.get("q").replace("feature", "movie").capitalize()
movieID = re.findall(r"tt(\d+)", movie.get("id"))[0] movieID = re.findall(r"tt(\d+)", movie.get("id"))[0]
msg += f"{num}. {title} {year} - {type}\n" msg += f"{num}. {title} {year} - {type}\n"
BTN.append( BTN.append(InlineKeyboardButton(text=num, callback_data=f"imdbres_en#{uid}#{movieID}"))
InlineKeyboardButton( BTN.extend(
text=num, callback_data=f"imdbres_en#{uid}#{movieID}" (
) InlineKeyboardButton(text="🚩 Language", callback_data=f"imdbset#{uid}"),
) InlineKeyboardButton(text="❌ Close", callback_data=f"close#{uid}"),
BTN.append(
InlineKeyboardButton(
text="🚩 Language", callback_data=f"imdbset#{uid}"
)
)
BTN.append(
InlineKeyboardButton(
text="❌ Close", callback_data=f"close#{uid}"
) )
) )
buttons.add(*BTN) buttons.add(*BTN)
await query.message.edit_caption(msg, reply_markup=buttons) await query.message.edit_caption(msg, reply_markup=buttons)
except Exception as err: except Exception as err:
await query.message.edit_caption( await query.message.edit_caption(f"Failed when requesting movies title @ IMDb\n\n<b>ERROR:</b> <code>{err}</code>")
f"Failed when requesting movies title @ IMDb\n\n<b>ERROR:</b> <code>{err}</code>"
)
@app.on_callback_query(filters.regex("^imdbres_id")) @app.on_callback_query(filters.regex("^imdbres_id"))
@ -302,23 +272,15 @@ async def imdb_id_callback(bot, query):
url = f"https://www.imdb.com/title/tt{movie}/" url = f"https://www.imdb.com/title/tt{movie}/"
resp = await http.get( resp = await http.get(
url, url,
headers={ 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"},
"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"
},
) )
sop = BeautifulSoup(resp, "lxml") sop = BeautifulSoup(resp, "lxml")
r_json = json.loads( r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0])
sop.find("script", attrs={"type": "application/ld+json"}).contents[0]
)
res_str = "" res_str = ""
type = f"<code>{r_json['@type']}</code>" if r_json.get("@type") else "" type = f"<code>{r_json['@type']}</code>" if r_json.get("@type") else ""
if r_json.get("name"): if r_json.get("name"):
try: try:
tahun = ( tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find(class_="sc-8c396aa2-2 itZqyK").text
sop.select('ul[data-testid="hero-title-block__metadata"]')[0]
.find(class_="sc-8c396aa2-2 itZqyK")
.text
)
except: except:
tahun = "-" tahun = "-"
res_str += f"<b>📹 Judul:</b> <a href='{url}'>{r_json['name']} [{tahun}]</a> (<code>{type}</code>)\n" res_str += f"<b>📹 Judul:</b> <a href='{url}'>{r_json['name']} [{tahun}]</a> (<code>{type}</code>)\n"
@ -327,64 +289,30 @@ async def imdb_id_callback(bot, query):
else: else:
res_str += "\n" res_str += "\n"
if sop.select('li[data-testid="title-techspec_runtime"]'): if sop.select('li[data-testid="title-techspec_runtime"]'):
durasi = ( durasi = sop.select('li[data-testid="title-techspec_runtime"]')[0].find(class_="ipc-metadata-list-item__content-container").text
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" res_str += f"<b>Durasi:</b> <code>{GoogleTranslator('auto', 'id').translate(durasi)}</code>\n"
if r_json.get("contentRating"): if r_json.get("contentRating"):
res_str += f"<b>Kategori:</b> <code>{r_json['contentRating']}</code> \n" res_str += f"<b>Kategori:</b> <code>{r_json['contentRating']}</code> \n"
if r_json.get("aggregateRating"): if r_json.get("aggregateRating"):
res_str += f"<b>Peringkat:</b> <code>{r_json['aggregateRating']['ratingValue']}⭐️ dari {r_json['aggregateRating']['ratingCount']} pengguna</code> \n" 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"]'): if sop.select('li[data-testid="title-details-releasedate"]'):
rilis = ( 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
sop.select('li[data-testid="title-details-releasedate"]')[0] 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"]
.find( res_str += f"<b>Rilis:</b> <a href='https://www.imdb.com{rilis_url}'>{rilis}</a>\n"
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"): if r_json.get("genre"):
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"])
for i in r_json["genre"]:
if i in GENRES_EMOJI:
genre += (
f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, "
)
else:
genre += f"#{i.replace('-', '_').replace(' ', '_')}, "
genre = genre[:-2] genre = genre[:-2]
res_str += f"<b>Genre :</b> {genre}\n" res_str += f"<b>Genre :</b> {genre}\n"
if sop.select('li[data-testid="title-details-origin"]'): if sop.select('li[data-testid="title-details-origin"]'):
country = "".join( country = "".join(
f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, " f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
for country in sop.select('li[data-testid="title-details-origin"]')[ 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")
0
].findAll(
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
)
) )
country = country[:-2] country = country[:-2]
res_str += f"<b>Negara:</b> {country}\n" res_str += f"<b>Negara:</b> {country}\n"
if sop.select('li[data-testid="title-details-languages"]'): if sop.select('li[data-testid="title-details-languages"]'):
language = "".join( language = "".join(
f"#{lang.text.replace(' ', '_').replace('-', '_')}, " 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] language = language[:-2]
res_str += f"<b>Bahasa:</b> {language}\n" res_str += f"<b>Bahasa:</b> {language}\n"
@ -415,9 +343,7 @@ async def imdb_id_callback(bot, query):
actors = actors[:-2] actors = actors[:-2]
res_str += f"<b>Pemeran:</b> {actors}\n\n" res_str += f"<b>Pemeran:</b> {actors}\n\n"
if r_json.get("description"): if r_json.get("description"):
summary = GoogleTranslator("auto", "id").translate( summary = GoogleTranslator("auto", "id").translate(r_json.get("description"))
r_json.get("description")
)
res_str += f"<b>📜 Plot: </b> <code>{summary}</code>\n\n" res_str += f"<b>📜 Plot: </b> <code>{summary}</code>\n\n"
if r_json.get("keywords"): if r_json.get("keywords"):
keywords = r_json["keywords"].split(",") keywords = r_json["keywords"].split(",")
@ -428,11 +354,7 @@ async def imdb_id_callback(bot, query):
key_ = key_[:-2] key_ = key_[:-2]
res_str += f"<b>🔥 Kata Kunci:</b> {key_} \n" res_str += f"<b>🔥 Kata Kunci:</b> {key_} \n"
if sop.select('li[data-testid="award_information"]'): if sop.select('li[data-testid="award_information"]'):
awards = ( awards = sop.select('li[data-testid="award_information"]')[0].find(class_="ipc-metadata-list-item__list-content-item").text
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" res_str += f"<b>🏆 Penghargaan:</b> <code>{GoogleTranslator('auto', 'id').translate(awards)}</code>\n\n"
else: else:
res_str += "\n" res_str += "\n"
@ -442,33 +364,19 @@ async def imdb_id_callback(bot, query):
markup = InlineKeyboardMarkup( markup = InlineKeyboardMarkup(
[ [
[ [
InlineKeyboardButton( InlineKeyboardButton("🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"),
"🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"
),
InlineKeyboardButton("▶️ Trailer", url=trailer_url), InlineKeyboardButton("▶️ Trailer", url=trailer_url),
] ]
] ]
) )
else: else:
markup = InlineKeyboardMarkup( 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']}"
)
]
]
)
if thumb := r_json.get("image"): if thumb := r_json.get("image"):
try: try:
await query.message.edit_media( await query.message.edit_media(InputMediaPhoto(thumb, caption=res_str), reply_markup=markup)
InputMediaPhoto(thumb, caption=res_str), reply_markup=markup
)
except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty): except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty):
poster = thumb.replace(".jpg", "._V1_UX360.jpg") poster = thumb.replace(".jpg", "._V1_UX360.jpg")
await query.message.edit_media( await query.message.edit_media(InputMediaPhoto(poster, caption=res_str), reply_markup=markup)
InputMediaPhoto(poster, caption=res_str), reply_markup=markup
)
except Exception: except Exception:
await query.message.edit_caption(res_str, reply_markup=markup) await query.message.edit_caption(res_str, reply_markup=markup)
else: else:
@ -489,23 +397,15 @@ async def imdb_en_callback(bot, query):
url = f"https://www.imdb.com/title/tt{movie}/" url = f"https://www.imdb.com/title/tt{movie}/"
resp = await http.get( resp = await http.get(
url, url,
headers={ 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"},
"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"
},
) )
sop = BeautifulSoup(resp, "lxml") sop = BeautifulSoup(resp, "lxml")
r_json = json.loads( r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0])
sop.find("script", attrs={"type": "application/ld+json"}).contents[0]
)
res_str = "" res_str = ""
type = f"<code>{r_json['@type']}</code>" if r_json.get("@type") else "" type = f"<code>{r_json['@type']}</code>" if r_json.get("@type") else ""
if r_json.get("name"): if r_json.get("name"):
try: try:
tahun = ( tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find(class_="sc-8c396aa2-2 itZqyK").text
sop.select('ul[data-testid="hero-title-block__metadata"]')[0]
.find(class_="sc-8c396aa2-2 itZqyK")
.text
)
except: except:
tahun = "-" tahun = "-"
res_str += f"<b>📹 Title:</b> <a href='{url}'>{r_json['name']} [{tahun}]</a> (<code>{type}</code>)\n" res_str += f"<b>📹 Title:</b> <a href='{url}'>{r_json['name']} [{tahun}]</a> (<code>{type}</code>)\n"
@ -514,62 +414,30 @@ async def imdb_en_callback(bot, query):
else: else:
res_str += "\n" res_str += "\n"
if sop.select('li[data-testid="title-techspec_runtime"]'): if sop.select('li[data-testid="title-techspec_runtime"]'):
durasi = ( durasi = sop.select('li[data-testid="title-techspec_runtime"]')[0].find(class_="ipc-metadata-list-item__content-container").text
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" res_str += f"<b>Duration:</b> <code>{durasi}</code>\n"
if r_json.get("contentRating"): if r_json.get("contentRating"):
res_str += f"<b>Category:</b> <code>{r_json['contentRating']}</code> \n" res_str += f"<b>Category:</b> <code>{r_json['contentRating']}</code> \n"
if r_json.get("aggregateRating"): if r_json.get("aggregateRating"):
res_str += f"<b>Rating:</b> <code>{r_json['aggregateRating']['ratingValue']}⭐️ from {r_json['aggregateRating']['ratingCount']} user</code> \n" 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"]'): if sop.select('li[data-testid="title-details-releasedate"]'):
rilis = ( 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
sop.select('li[data-testid="title-details-releasedate"]')[0] 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"]
.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" res_str += f"<b>Release Data:</b> <a href='https://www.imdb.com{rilis_url}'>{rilis}</a>\n"
if r_json.get("genre"): if r_json.get("genre"):
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"])
for i in r_json["genre"]:
if i in GENRES_EMOJI:
genre += (
f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, "
)
else:
genre += f"#{i.replace('-', '_').replace(' ', '_')}, "
genre = genre[:-2] genre = genre[:-2]
res_str += f"<b>Genre:</b> {genre}\n" res_str += f"<b>Genre:</b> {genre}\n"
if sop.select('li[data-testid="title-details-origin"]'): if sop.select('li[data-testid="title-details-origin"]'):
country = "".join( country = "".join(
f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, " f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
for country in sop.select('li[data-testid="title-details-origin"]')[ 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")
0
].findAll(
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
)
) )
country = country[:-2] country = country[:-2]
res_str += f"<b>Country:</b> {country}\n" res_str += f"<b>Country:</b> {country}\n"
if sop.select('li[data-testid="title-details-languages"]'): if sop.select('li[data-testid="title-details-languages"]'):
language = "".join( language = "".join(
f"#{lang.text.replace(' ', '_').replace('-', '_')}, " 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] language = language[:-2]
res_str += f"<b>Language:</b> {language}\n" res_str += f"<b>Language:</b> {language}\n"
@ -610,11 +478,7 @@ async def imdb_en_callback(bot, query):
key_ = key_[:-2] key_ = key_[:-2]
res_str += f"<b>🔥 Keywords:</b> {key_} \n" res_str += f"<b>🔥 Keywords:</b> {key_} \n"
if sop.select('li[data-testid="award_information"]'): if sop.select('li[data-testid="award_information"]'):
awards = ( awards = sop.select('li[data-testid="award_information"]')[0].find(class_="ipc-metadata-list-item__list-content-item").text
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" res_str += f"<b>🏆 Awards:</b> <code>{awards}</code>\n\n"
else: else:
res_str += "\n" res_str += "\n"
@ -624,33 +488,19 @@ async def imdb_en_callback(bot, query):
markup = InlineKeyboardMarkup( markup = InlineKeyboardMarkup(
[ [
[ [
InlineKeyboardButton( InlineKeyboardButton("🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"),
"🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"
),
InlineKeyboardButton("▶️ Trailer", url=trailer_url), InlineKeyboardButton("▶️ Trailer", url=trailer_url),
] ]
] ]
) )
else: else:
markup = InlineKeyboardMarkup( 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']}"
)
]
]
)
if thumb := r_json.get("image"): if thumb := r_json.get("image"):
try: try:
await query.message.edit_media( await query.message.edit_media(InputMediaPhoto(thumb, caption=res_str), reply_markup=markup)
InputMediaPhoto(thumb, caption=res_str), reply_markup=markup
)
except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty): except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty):
poster = thumb.replace(".jpg", "._V1_UX360.jpg") poster = thumb.replace(".jpg", "._V1_UX360.jpg")
await query.message.edit_media( await query.message.edit_media(InputMediaPhoto(poster, caption=res_str), reply_markup=markup)
InputMediaPhoto(poster, caption=res_str), reply_markup=markup
)
except Exception: except Exception:
await query.message.edit_caption(res_str, reply_markup=markup) await query.message.edit_caption(res_str, reply_markup=markup)
else: else:

View file

@ -19,9 +19,7 @@ __HELP__ = """"
""" """
@app.on_message( @app.on_message(filters.incoming & ~filters.private & filters.command(["inkick"], COMMAND_HANDLER))
filters.incoming & ~filters.private & filters.command(["inkick"], COMMAND_HANDLER)
)
async def inkick(_, message): async def inkick(_, message):
if message.sender_chat: if message.sender_chat:
return await message.reply("This feature not available for channel.") return await message.reply("This feature not available for channel.")
@ -29,61 +27,44 @@ async def inkick(_, message):
if user.status.value in ("administrator", "owner"): if user.status.value in ("administrator", "owner"):
if len(message.command) > 1: if len(message.command) > 1:
input_str = message.command input_str = message.command
sent_message = await message.reply_text( sent_message = await message.reply_text("🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**")
"🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**"
)
count = 0 count = 0
async for member in app.get_chat_members(message.chat.id): async for member in app.get_chat_members(message.chat.id):
if member.user.is_bot: if member.user.is_bot:
continue continue
if ( if member.user.status.value in input_str and member.status.value not in ("administrator", "owner"):
member.user.status.value in input_str
and member.status.value not in ("administrator", "owner")
):
try: try:
await message.chat.ban_member(member.user.id) await message.chat.ban_member(member.user.id)
count += 1 count += 1
await sleep(1) await sleep(1)
await message.chat.unban_member(member.user.id) await message.chat.unban_member(member.user.id)
except (ChatAdminRequired, UserAdminInvalid): except (ChatAdminRequired, UserAdminInvalid):
await sent_message.edit( await sent_message.edit("❗**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__")
"❗**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) await app.leave_chat(message.chat.id)
break break
except FloodWait as e: except FloodWait as e:
await sleep(e.value) await sleep(e.value)
try: try:
await sent_message.edit( await sent_message.edit(f"✔️ **Berhasil menendang {count} pengguna berdasarkan argumen.**")
f"✔️ **Berhasil menendang {count} pengguna berdasarkan argumen.**"
)
except ChatWriteForbidden: except ChatWriteForbidden:
await app.leave_chat(message.chat.id) await app.leave_chat(message.chat.id)
else: else:
await message.reply_text( await message.reply_text("❗ **Arguments Required**\n__See /help in personal message for more information.__")
"❗ **Arguments Required**\n__See /help in personal message for more information.__"
)
else: else:
sent_message = await message.reply_text( sent_message = await message.reply_text("❗ **You have to be the group creator to do that.**")
"❗ **You have to be the group creator to do that.**"
)
await sleep(5) await sleep(5)
await sent_message.delete() await sent_message.delete()
# Kick User Without Username # Kick User Without Username
@app.on_message( @app.on_message(filters.incoming & ~filters.private & filters.command(["uname"], COMMAND_HANDLER))
filters.incoming & ~filters.private & filters.command(["uname"], COMMAND_HANDLER)
)
async def uname(_, message): async def uname(_, message):
if message.sender_chat: if message.sender_chat:
return await message.reply("This feature not available for channel.") return await message.reply("This feature not available for channel.")
user = await app.get_chat_member(message.chat.id, message.from_user.id) user = await app.get_chat_member(message.chat.id, message.from_user.id)
if user.status.value in ("administrator", "owner"): if user.status.value in ("administrator", "owner"):
sent_message = await message.reply_text( sent_message = await message.reply_text("🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**")
"🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**"
)
count = 0 count = 0
async for member in app.get_chat_members(message.chat.id): async for member in app.get_chat_members(message.chat.id):
if not member.user.username and member.status.value not in ( if not member.user.username and member.status.value not in (
@ -96,39 +77,29 @@ async def uname(_, message):
await sleep(1) await sleep(1)
await message.chat.unban_member(member.user.id) await message.chat.unban_member(member.user.id)
except (ChatAdminRequired, UserAdminInvalid): except (ChatAdminRequired, UserAdminInvalid):
await sent_message.edit( await sent_message.edit("❗**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__")
"❗**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) await app.leave_chat(message.chat.id)
break break
except FloodWait as e: except FloodWait as e:
await sleep(e.value) await sleep(e.value)
try: try:
await sent_message.edit( await sent_message.edit(f"✔️ **Berhasil menendang {count} pengguna berdasarkan argumen.**")
f"✔️ **Berhasil menendang {count} pengguna berdasarkan argumen.**"
)
except ChatWriteForbidden: except ChatWriteForbidden:
await app.leave_chat(message.chat.id) await app.leave_chat(message.chat.id)
else: else:
sent_message = await message.reply_text( sent_message = await message.reply_text("❗ **You have to be the group creator to do that.**")
"❗ **You have to be the group creator to do that.**"
)
await sleep(5) await sleep(5)
await sent_message.delete() await sent_message.delete()
@app.on_message( @app.on_message(filters.incoming & ~filters.private & filters.command(["dkick"], COMMAND_HANDLER))
filters.incoming & ~filters.private & filters.command(["dkick"], COMMAND_HANDLER)
)
async def dkick(client, message): async def dkick(client, message):
if message.sender_chat: if message.sender_chat:
return await message.reply("This feature not available for channel.") return await message.reply("This feature not available for channel.")
user = await app.get_chat_member(message.chat.id, message.from_user.id) user = await app.get_chat_member(message.chat.id, message.from_user.id)
if user.status.value in ("administrator", "owner"): if user.status.value in ("administrator", "owner"):
sent_message = await message.reply_text( sent_message = await message.reply_text("🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**")
"🚮**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**"
)
count = 0 count = 0
async for member in app.get_chat_members(message.chat.id): async for member in app.get_chat_members(message.chat.id):
if member.user.is_deleted and member.status.value not in ( if member.user.is_deleted and member.status.value not in (
@ -141,9 +112,7 @@ async def dkick(client, message):
await sleep(1) await sleep(1)
await message.chat.unban_member(member.user.id) await message.chat.unban_member(member.user.id)
except (ChatAdminRequired, UserAdminInvalid): except (ChatAdminRequired, UserAdminInvalid):
await sent_message.edit( await sent_message.edit("❗**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__")
"❗**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) await app.leave_chat(message.chat.id)
break break
except FloodWait as e: except FloodWait as e:
@ -153,16 +122,12 @@ async def dkick(client, message):
except ChatWriteForbidden: except ChatWriteForbidden:
await app.leave_chat(message.chat.id) await app.leave_chat(message.chat.id)
else: else:
sent_message = await message.reply_text( sent_message = await message.reply_text("❗ **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**")
"❗ **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**"
)
await sleep(5) await sleep(5)
await sent_message.delete() await sent_message.delete()
@app.on_message( @app.on_message(filters.incoming & ~filters.private & filters.command(["instatus"], COMMAND_HANDLER))
filters.incoming & ~filters.private & filters.command(["instatus"], COMMAND_HANDLER)
)
async def instatus(client, message): async def instatus(client, message):
start_time = time.perf_counter() start_time = time.perf_counter()
user = await app.get_chat_member(message.chat.id, message.from_user.id) user = await app.get_chat_member(message.chat.id, message.from_user.id)
@ -171,9 +136,7 @@ async def instatus(client, message):
enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.ADMINISTRATOR,
enums.ChatMemberStatus.OWNER, enums.ChatMemberStatus.OWNER,
): ):
sent_message = await message.reply_text( sent_message = await message.reply_text("**Sedang mengumpulkan informasi pengguna...**")
"**Sedang mengumpulkan informasi pengguna...**"
)
recently = 0 recently = 0
within_week = 0 within_week = 0
within_month = 0 within_month = 0
@ -185,13 +148,9 @@ async def instatus(client, message):
banned = 0 banned = 0
uncached = 0 uncached = 0
bot = 0 bot = 0
async for ban in app.get_chat_members( async for ban in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.BANNED):
message.chat.id, filter=enums.ChatMembersFilter.BANNED
):
banned += 1 banned += 1
async for restr in app.get_chat_members( async for restr in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.RESTRICTED):
message.chat.id, filter=enums.ChatMembersFilter.RESTRICTED
):
restricted += 1 restricted += 1
async for member in app.get_chat_members(message.chat.id): async for member in app.get_chat_members(message.chat.id):
user = member.user user = member.user
@ -234,8 +193,6 @@ async def instatus(client, message):
) )
) )
else: else:
sent_message = await message.reply_text( sent_message = await message.reply_text("❗ **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**")
"❗ **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**"
)
await sleep(5) await sleep(5)
await sent_message.delete() await sent_message.delete()

View file

@ -43,16 +43,11 @@ PRVT_MSGS = {}
async def inline_menu(_, inline_query: InlineQuery): async def inline_menu(_, inline_query: InlineQuery):
if inline_query.query.strip().lower().strip() == "": if inline_query.query.strip().lower().strip() == "":
buttons = InlineKeyboard(row_width=2) buttons = InlineKeyboard(row_width=2)
buttons.add( buttons.add(*[(InlineKeyboardButton(text=i, switch_inline_query_current_chat=i)) for i in keywords_list])
*[
(InlineKeyboardButton(text=i, switch_inline_query_current_chat=i))
for i in keywords_list
]
)
btn = InlineKeyboard(row_width=2) btn = InlineKeyboard(row_width=2)
bot_state = "Dead" if not await app.get_me() else "Alive" bot_state = "Alive" if await app.get_me() else "Dead"
ubot_state = "Dead" if not await user.get_me() else "Alive" ubot_state = "Alive" if await user.get_me() else "Dead"
btn.add( btn.add(
InlineKeyboardButton("Stats", callback_data="stats_callback"), InlineKeyboardButton("Stats", callback_data="stats_callback"),
InlineKeyboardButton("Go Inline!", switch_inline_query_current_chat=""), InlineKeyboardButton("Go Inline!", switch_inline_query_current_chat=""),
@ -72,27 +67,21 @@ async def inline_menu(_, inline_query: InlineQuery):
InlineQueryResultArticle( InlineQueryResultArticle(
title="Inline Commands", title="Inline Commands",
description="Help Related To Inline Usage.", description="Help Related To Inline Usage.",
input_message_content=InputTextMessageContent( input_message_content=InputTextMessageContent("Click A Button To Get Started."),
"Click A Button To Get Started."
),
thumb_url="https://hamker.me/cy00x5x.png", thumb_url="https://hamker.me/cy00x5x.png",
reply_markup=buttons, reply_markup=buttons,
), ),
InlineQueryResultArticle( InlineQueryResultArticle(
title="Github Repo", title="Github Repo",
description="Github Repo of This Bot.", description="Github Repo of This Bot.",
input_message_content=InputTextMessageContent( input_message_content=InputTextMessageContent(f"<b>Github Repo @{BOT_USERNAME}</b>\n\nhttps://github.com/yasirarism/MissKatyPyro"),
f"<b>Github Repo @{BOT_USERNAME}</b>\n\nhttps://github.com/yasirarism/MissKatyPyro"
),
thumb_url="https://hamker.me/gjc9fo3.png", thumb_url="https://hamker.me/gjc9fo3.png",
), ),
InlineQueryResultArticle( InlineQueryResultArticle(
title="Alive", title="Alive",
description="Check Bot's Stats", description="Check Bot's Stats",
thumb_url="https://yt3.ggpht.com/ytc/AMLnZu-zbtIsllERaGYY8Aecww3uWUASPMjLUUEt7ecu=s900-c-k-c0x00ffffff-no-rj", thumb_url="https://yt3.ggpht.com/ytc/AMLnZu-zbtIsllERaGYY8Aecww3uWUASPMjLUUEt7ecu=s900-c-k-c0x00ffffff-no-rj",
input_message_content=InputTextMessageContent( input_message_content=InputTextMessageContent(msg, disable_web_page_preview=True),
msg, disable_web_page_preview=True
),
reply_markup=btn, reply_markup=btn,
), ),
] ]
@ -105,13 +94,8 @@ async def inline_menu(_, inline_query: InlineQuery):
switch_pm_parameter="inline", switch_pm_parameter="inline",
) )
judul = inline_query.query.split(None, 1)[1].strip() judul = inline_query.query.split(None, 1)[1].strip()
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"}
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " search_results = await http.get(f"https://www.google.com/search?q={judul}&num=20", headers=headers)
"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") soup = BeautifulSoup(search_results.text, "lxml")
data = [] data = []
for result in soup.select(".tF2Cxc"): for result in soup.select(".tF2Cxc"):
@ -134,9 +118,7 @@ async def inline_menu(_, inline_query: InlineQuery):
url=link, url=link,
description=snippet, description=snippet,
thumb_url="https://te.legra.ph/file/ed8ea62ae636793000bb4.jpg", thumb_url="https://te.legra.ph/file/ed8ea62ae636793000bb4.jpg",
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="Open Website", url=link)]]),
[[InlineKeyboardButton(text="Open Website", url=link)]]
),
) )
) )
await inline_query.answer( await inline_query.answer(
@ -160,9 +142,7 @@ async def inline_menu(_, inline_query: InlineQuery):
except Exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
inline_query.stop_propagation() inline_query.stop_propagation()
return return
namanya = ( namanya = f"{diaa.first_name} {diaa.last_name}" if diaa.last_name else diaa.first_name
f"{diaa.first_name} {diaa.last_name}" if diaa.last_name else diaa.first_name
)
msg = f"<b>🏷 Name:</b> {namanya}\n<b>🆔 ID:</b> <code>{diaa.id}</code>\n" msg = f"<b>🏷 Name:</b> {namanya}\n<b>🆔 ID:</b> <code>{diaa.id}</code>\n"
if diaa.username: if diaa.username:
msg += f"<b>🌐 Username:</b> <code>@{diaa.username}</code>\n" msg += f"<b>🌐 Username:</b> <code>@{diaa.username}</code>\n"
@ -193,7 +173,7 @@ async def inline_menu(_, inline_query: InlineQuery):
_id = inline_query.query.split()[1] _id = inline_query.query.split()[1]
msg = inline_query.query.split(None, 2)[2].strip() msg = inline_query.query.split(None, 2)[2].strip()
if not (msg and msg.endswith(":")): if not msg or not msg.endswith(":"):
inline_query.stop_propagation() inline_query.stop_propagation()
try: try:
@ -210,11 +190,7 @@ async def inline_menu(_, inline_query: InlineQuery):
) )
prvte_msg = InlineKeyboardMarkup( prvte_msg = InlineKeyboardMarkup(
[ [
[ [InlineKeyboardButton("Show Message 🔐", callback_data=f"prvtmsg({inline_query.id})")],
InlineKeyboardButton(
"Show Message 🔐", callback_data=f"prvtmsg({inline_query.id})"
)
],
[ [
InlineKeyboardButton( InlineKeyboardButton(
"Destroy☠ this msg", "Destroy☠ this msg",
@ -223,14 +199,8 @@ async def inline_menu(_, inline_query: InlineQuery):
], ],
] ]
) )
mention = ( mention = f"@{penerima.username}" if penerima.username else f"<a href='tg://user?id={penerima.id}'>{penerima.first_name}</a>"
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>], "
if not penerima.username
else f"@{penerima.username}"
)
msg_c = (
f"🔒 A <b>private message</b> to {mention} [<code>{penerima.id}</code>], "
)
msg_c += "Only he/she can open it." msg_c += "Only he/she can open it."
results = [ results = [
InlineQueryResultArticle( InlineQueryResultArticle(
@ -250,9 +220,7 @@ async def inline_menu(_, inline_query: InlineQuery):
switch_pm_parameter="inline", switch_pm_parameter="inline",
) )
query = inline_query.query.split(None, 1)[1].strip() query = inline_query.query.split(None, 1)[1].strip()
search_results = await http.get( search_results = await http.get(f"https://api.github.com/search/repositories?q={query}")
f"https://api.github.com/search/repositories?q={query}"
)
srch_results = json.loads(search_results.text) srch_results = json.loads(search_results.text)
item = srch_results.get("items") item = srch_results.get("items")
data = [] data = []
@ -275,9 +243,7 @@ async def inline_menu(_, inline_query: InlineQuery):
url=link, url=link,
description=deskripsi, description=deskripsi,
thumb_url="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png", thumb_url="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="Open Github Link", url=link)]]),
[[InlineKeyboardButton(text="Open Github Link", url=link)]]
),
) )
) )
await inline_query.answer( await inline_query.answer(
@ -296,9 +262,7 @@ async def inline_menu(_, inline_query: InlineQuery):
switch_pm_parameter="inline", switch_pm_parameter="inline",
) )
query = inline_query.query.split(None, 1)[1].strip() query = inline_query.query.split(None, 1)[1].strip()
search_results = await http.get( search_results = await http.get(f"https://api.hayo.my.id/api/pypi?package={query}")
f"https://api.hayo.my.id/api/pypi?package={query}"
)
srch_results = json.loads(search_results.text) srch_results = json.loads(search_results.text)
data = [] data = []
for sraeo in srch_results: for sraeo in srch_results:
@ -319,9 +283,7 @@ async def inline_menu(_, inline_query: InlineQuery):
url=link, url=link,
description=deskripsi, description=deskripsi,
thumb_url="https://raw.githubusercontent.com/github/explore/666de02829613e0244e9441b114edb85781e972c/topics/pip/pip.png", thumb_url="https://raw.githubusercontent.com/github/explore/666de02829613e0244e9441b114edb85781e972c/topics/pip/pip.png",
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="Open Link", url=link)]]),
[[InlineKeyboardButton(text="Open Link", url=link)]]
),
) )
) )
await inline_query.answer( await inline_query.answer(
@ -340,9 +302,7 @@ async def inline_menu(_, inline_query: InlineQuery):
switch_pm_parameter="inline", switch_pm_parameter="inline",
) )
judul = inline_query.query.split(None, 1)[1].strip() judul = inline_query.query.split(None, 1)[1].strip()
search_results = await http.get( search_results = await http.get(f"https://api.abir-hasan.tk/youtube?query={judul}")
f"https://api.abir-hasan.tk/youtube?query={judul}"
)
srch_results = json.loads(search_results.text) srch_results = json.loads(search_results.text)
asroe = srch_results.get("results") asroe = srch_results.get("results")
oorse = [] oorse = []
@ -354,9 +314,7 @@ async def inline_menu(_, inline_query: InlineQuery):
durasi = sraeo.get("accessibility").get("duration") durasi = sraeo.get("accessibility").get("duration")
publishTime = sraeo.get("publishedTime") publishTime = sraeo.get("publishedTime")
try: try:
deskripsi = "".join( deskripsi = "".join(f"{i['text']} " for i in sraeo.get("descriptionSnippet"))
f"{i['text']} " for i in sraeo.get("descriptionSnippet")
)
except: except:
deskripsi = "-" deskripsi = "-"
message_text = f"<a href='{link}'>{title}</a>\n" message_text = f"<a href='{link}'>{title}</a>\n"
@ -375,9 +333,7 @@ async def inline_menu(_, inline_query: InlineQuery):
url=link, url=link,
description=deskripsi, description=deskripsi,
thumb_url=thumb, thumb_url=thumb,
reply_markup=InlineKeyboardMarkup( reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="Watch Video 📹", url=link)]]),
[[InlineKeyboardButton(text="Watch Video 📹", url=link)]]
),
) )
) )
await inline_query.answer( await inline_query.answer(
@ -396,9 +352,7 @@ async def inline_menu(_, inline_query: InlineQuery):
switch_pm_parameter="inline", switch_pm_parameter="inline",
) )
movie_name = inline_query.query.split(None, 1)[1].strip() movie_name = inline_query.query.split(None, 1)[1].strip()
search_results = await http.get( search_results = await http.get(f"https://yasirapi.eu.org/imdb-search?q={movie_name}")
f"https://yasirapi.eu.org/imdb-search?q={movie_name}"
)
res = json.loads(search_results.text).get("result") res = json.loads(search_results.text).get("result")
oorse = [] oorse = []
for midb in res: for midb in res:
@ -407,11 +361,7 @@ async def inline_menu(_, inline_query: InlineQuery):
stars = midb.get("s", "") stars = midb.get("s", "")
imdb_url = f"https://imdb.com/title/{midb.get('id')}" imdb_url = f"https://imdb.com/title/{midb.get('id')}"
year = f"({midb.get('y')})" if midb.get("y") else "" year = f"({midb.get('y')})" if midb.get("y") else ""
image_url = ( image_url = midb.get("i").get("imageUrl").replace(".jpg", "._V1_UX360.jpg") if midb.get("i") else "https://te.legra.ph/file/e263d10ff4f4426a7c664.jpg"
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='{image_url}'>🎬</a>"
caption += f"<a href='{imdb_url}'>{title} {year}</a>" caption += f"<a href='{imdb_url}'>{title} {year}</a>"
oorse.append( oorse.append(
@ -486,82 +436,45 @@ async def imdb_inl(_, query):
url = f"https://www.imdb.com/title/{movie}/" url = f"https://www.imdb.com/title/{movie}/"
resp = await get_content(url) resp = await get_content(url)
sop = BeautifulSoup(resp, "lxml") sop = BeautifulSoup(resp, "lxml")
r_json = json.loads( r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0])
sop.find("script", attrs={"type": "application/ld+json"}).contents[0]
)
res_str = "" res_str = ""
type = f"<code>{r_json['@type']}</code>" if r_json.get("@type") else "" type = f"<code>{r_json['@type']}</code>" if r_json.get("@type") else ""
if r_json.get("name"): if r_json.get("name"):
try: try:
tahun = ( tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find(class_="sc-8c396aa2-2 itZqyK").text
sop.select('ul[data-testid="hero-title-block__metadata"]')[0]
.find(class_="sc-8c396aa2-2 itZqyK")
.text
)
except: except:
tahun = "-" tahun = "-"
res_str += f"<b>📹 Judul:</b> <a href='{url}'>{r_json['name']} [{tahun}]</a> (<code>{type}</code>)\n" res_str += f"<b>📹 Judul:</b> <a href='{url}'>{r_json['name']} [{tahun}]</a> (<code>{type}</code>)\n"
if r_json.get("alternateName"): if r_json.get("alternateName"):
res_str += ( res_str += f"<b>📢 AKA:</b> <code>{r_json.get('alternateName')}</code>\n\n"
f"<b>📢 AKA:</b> <code>{r_json.get('alternateName')}</code>\n\n"
)
else: else:
res_str += "\n" res_str += "\n"
if sop.select('li[data-testid="title-techspec_runtime"]'): if sop.select('li[data-testid="title-techspec_runtime"]'):
durasi = ( durasi = sop.select('li[data-testid="title-techspec_runtime"]')[0].find(class_="ipc-metadata-list-item__content-container").text
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" res_str += f"<b>Durasi:</b> <code>{GoogleTranslator('auto', 'id').translate(durasi)}</code>\n"
if r_json.get("contentRating"): if r_json.get("contentRating"):
res_str += f"<b>Kategori:</b> <code>{r_json['contentRating']}</code> \n" res_str += f"<b>Kategori:</b> <code>{r_json['contentRating']}</code> \n"
if r_json.get("aggregateRating"): if r_json.get("aggregateRating"):
res_str += f"<b>Peringkat:</b> <code>{r_json['aggregateRating']['ratingValue']}⭐️ dari {r_json['aggregateRating']['ratingCount']} pengguna</code> \n" 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"]'): if sop.select('li[data-testid="title-details-releasedate"]'):
rilis = ( 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
sop.select('li[data-testid="title-details-releasedate"]')[0] 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"]
.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" res_str += f"<b>Rilis:</b> <a href='https://www.imdb.com{rilis_url}'>{rilis}</a>\n"
if r_json.get("genre"): if r_json.get("genre"):
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"])
for i in r_json["genre"]:
if i in GENRES_EMOJI:
genre += f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, "
else:
genre += f"#{i.replace('-', '_').replace(' ', '_')}, "
genre = genre[:-2] genre = genre[:-2]
res_str += f"<b>Genre:</b> {genre}\n" res_str += f"<b>Genre:</b> {genre}\n"
if sop.select('li[data-testid="title-details-origin"]'): if sop.select('li[data-testid="title-details-origin"]'):
country = "".join( country = "".join(
f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, " f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
for country in sop.select('li[data-testid="title-details-origin"]')[ 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")
0
].findAll(
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
)
) )
country = country[:-2] country = country[:-2]
res_str += f"<b>Negara:</b> {country}\n" res_str += f"<b>Negara:</b> {country}\n"
if sop.select('li[data-testid="title-details-languages"]'): if sop.select('li[data-testid="title-details-languages"]'):
language = "".join( language = "".join(
f"#{lang.text.replace(' ', '_').replace('-', '_')}, " f"#{lang.text.replace(' ', '_').replace('-', '_')}, "
for lang in sop.select('li[data-testid="title-details-languages"]')[ 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")
0
].findAll(
class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link"
)
) )
language = language[:-2] language = language[:-2]
res_str += f"<b>Bahasa:</b> {language}\n" res_str += f"<b>Bahasa:</b> {language}\n"
@ -592,9 +505,7 @@ async def imdb_inl(_, query):
actors = actors[:-2] actors = actors[:-2]
res_str += f"<b>Pemeran:</b> {actors}\n\n" res_str += f"<b>Pemeran:</b> {actors}\n\n"
if r_json.get("description"): if r_json.get("description"):
summary = GoogleTranslator("auto", "id").translate( summary = GoogleTranslator("auto", "id").translate(r_json.get("description"))
r_json.get("description")
)
res_str += f"<b>📜 Plot: </b> <code>{summary}</code>\n\n" res_str += f"<b>📜 Plot: </b> <code>{summary}</code>\n\n"
if r_json.get("keywords"): if r_json.get("keywords"):
keywords = r_json["keywords"].split(",") keywords = r_json["keywords"].split(",")
@ -605,11 +516,7 @@ async def imdb_inl(_, query):
key_ = key_[:-2] key_ = key_[:-2]
res_str += f"<b>🔥 Kata Kunci:</b> {key_} \n" res_str += f"<b>🔥 Kata Kunci:</b> {key_} \n"
if sop.select('li[data-testid="award_information"]'): if sop.select('li[data-testid="award_information"]'):
awards = ( awards = sop.select('li[data-testid="award_information"]')[0].find(class_="ipc-metadata-list-item__list-content-item").text
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" res_str += f"<b>🏆 Penghargaan:</b> <code>{GoogleTranslator('auto', 'id').translate(awards)}</code>\n\n"
else: else:
res_str += "\n" res_str += "\n"

View file

@ -26,9 +26,7 @@ Give reputation to other people in group.
karma_positive_group = 3 karma_positive_group = 3
karma_negative_group = 4 karma_negative_group = 4
regex_upvote = ( regex_upvote = r"^(\+|\+\+|\+1|thx|tnx|ty|thank you|thanx|thanks|pro|cool|good|makasih|👍|\+\+ .+)$"
r"^(\+|\+\+|\+1|thx|tnx|ty|thank you|thanx|thanks|pro|cool|good|makasih|👍|\+\+ .+)$"
)
regex_downvote = r"^(-|--|-1|👎|-- .+)$" regex_downvote = r"^(-|--|-1|👎|-- .+)$"
n = "\n" n = "\n"
@ -49,30 +47,18 @@ def section(
text = (bold_ul(title) + n) if underline else bold(title) + n text = (bold_ul(title) + n) if underline else bold(title) + n
for key, value in body.items(): for key, value in body.items():
text += ( text += indent * w + bold(key) + ((value[0] + n) if isinstance(value, list) else mono(value))
indent * w
+ bold(key)
+ ((value[0] + n) if isinstance(value, list) else mono(value))
)
return text return text
async def get_user_id_and_usernames(client) -> dict: async def get_user_id_and_usernames(client) -> dict:
with client.storage.lock, client.storage.conn: with client.storage.lock, client.storage.conn:
users = client.storage.conn.execute( users = client.storage.conn.execute('SELECT * FROM peers WHERE type in ("user", "bot") AND username NOT null').fetchall()
'SELECT * FROM peers WHERE type in ("user", "bot") AND username NOT null'
).fetchall()
return {user[0]: user[3] for user in users} return {user[0]: user[3] for user in users}
@app.on_message( @app.on_message(
filters.text filters.text & filters.group & filters.incoming & filters.reply & filters.regex(regex_upvote, re.IGNORECASE) & ~filters.via_bot & ~filters.bot,
& filters.group
& filters.incoming
& filters.reply
& filters.regex(regex_upvote, re.IGNORECASE)
& ~filters.via_bot
& ~filters.bot,
group=karma_positive_group, group=karma_positive_group,
) )
@capture_err @capture_err
@ -96,19 +82,11 @@ async def upvote(_, message):
karma = 1 karma = 1
new_karma = {"karma": karma} new_karma = {"karma": karma}
await update_karma(chat_id, await int_to_alpha(user_id), new_karma) await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
await message.reply_text( await message.reply_text(f"Incremented Karma of {user_mention} By 1 \nTotal Points: {karma}")
f"Incremented Karma of {user_mention} By 1 \nTotal Points: {karma}"
)
@app.on_message( @app.on_message(
filters.text filters.text & filters.group & filters.incoming & filters.reply & filters.regex(regex_downvote, re.IGNORECASE) & ~filters.via_bot & ~filters.bot,
& filters.group
& filters.incoming
& filters.reply
& filters.regex(regex_downvote, re.IGNORECASE)
& ~filters.via_bot
& ~filters.bot,
group=karma_negative_group, group=karma_negative_group,
) )
@capture_err @capture_err
@ -133,9 +111,7 @@ async def downvote(_, message):
karma = 1 karma = 1
new_karma = {"karma": karma} new_karma = {"karma": karma}
await update_karma(chat_id, await int_to_alpha(user_id), new_karma) await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
await message.reply_text( await message.reply_text(f"Decremented Karma Of {user_mention} By 1 \nTotal Points: {karma}")
f"Decremented Karma Of {user_mention} By 1 \nTotal Points: {karma}"
)
@app.on_message(filters.command("karma") & filters.group) @app.on_message(filters.command("karma") & filters.group)

View file

@ -25,9 +25,7 @@ from utils import get_file_id
@app.on_message(filters.command(["mediainfo"], COMMAND_HANDLER)) @app.on_message(filters.command(["mediainfo"], COMMAND_HANDLER))
async def mediainfo(client, message): async def mediainfo(client, message):
if message.reply_to_message and message.reply_to_message.media: if message.reply_to_message and message.reply_to_message.media:
process = await message.reply_text( process = await message.reply_text("`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True)
"`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True
)
file_info = get_file_id(message.reply_to_message) file_info = get_file_id(message.reply_to_message)
if file_info is None: if file_info is None:
await process.edit_text("Balas ke format media yang valid") await process.edit_text("Balas ke format media yang valid")
@ -69,13 +67,9 @@ async def mediainfo(client, message):
link = message.text.split(" ", maxsplit=1)[1] link = message.text.split(" ", maxsplit=1)[1]
process = await message.reply_text("`Mohon tunggu sejenak...`") process = await message.reply_text("`Mohon tunggu sejenak...`")
try: try:
output = subprocess.check_output(["mediainfo", f"{link}"]).decode( output = subprocess.check_output(["mediainfo", f"{link}"]).decode("utf-8")
"utf-8"
)
except Exception: except Exception:
return await process.edit( return await process.edit("Sepertinya link yang kamu kirim tidak valid, pastikan direct link dan bisa di download.")
"Sepertinya link yang kamu kirim tidak valid, pastikan direct link dan bisa di download."
)
title = "MissKaty Bot Mediainfo" title = "MissKaty Bot Mediainfo"
body_text = f""" body_text = f"""
<img src='https://telegra.ph/file/72c99bbc89bbe4e178cc9.jpg' /> <img src='https://telegra.ph/file/72c99bbc89bbe4e178cc9.jpg' />
@ -86,9 +80,7 @@ async def mediainfo(client, message):
# response = await http.post(siteurl, data={"content": output, "extension": 'txt'} ) # response = await http.post(siteurl, data={"content": output, "extension": 'txt'} )
# response = response.json() # response = response.json()
# spacebin = "https://spaceb.in/"+response['payload']['id'] # spacebin = "https://spaceb.in/"+response['payload']['id']
markup = InlineKeyboardMarkup( markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="💬 Telegraph", url=tgraph)]])
[[InlineKeyboardButton(text="💬 Telegraph", url=tgraph)]]
)
with io.BytesIO(str.encode(output)) as out_file: with io.BytesIO(str.encode(output)) as out_file:
out_file.name = "MissKaty_Mediainfo.txt" out_file.name = "MissKaty_Mediainfo.txt"
await message.reply_document( await message.reply_document(
@ -98,6 +90,4 @@ async def mediainfo(client, message):
) )
await process.delete() await process.delete()
except IndexError: except IndexError:
return await message.reply_text( return await message.reply_text("Gunakan command /mediainfo [link], atau reply telegram media dengan /mediainfo.")
"Gunakan command /mediainfo [link], atau reply telegram media dengan /mediainfo."
)

View file

@ -135,9 +135,7 @@ async def draw_meme_text(image_path, text):
@app.on_message(filters.command(["mmf"], COMMAND_HANDLER)) @app.on_message(filters.command(["mmf"], COMMAND_HANDLER))
@capture_err @capture_err
async def memify(client, message): async def memify(client, message):
if message.reply_to_message and ( if message.reply_to_message and (message.reply_to_message.sticker or message.reply_to_message.photo):
message.reply_to_message.sticker or message.reply_to_message.photo
):
try: try:
file = await message.reply_to_message.download() file = await message.reply_to_message.download()
res = await draw_meme_text(file, message.text.split(None, 1)[1].strip()) res = await draw_meme_text(file, message.text.split(None, 1)[1].strip())
@ -147,10 +145,6 @@ async def memify(client, message):
except: except:
pass pass
except: except:
await message.reply( await message.reply("Gunakan command <b>/mmf <text></b> dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah.")
"Gunakan command <b>/mmf <text></b> dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah."
)
else: else:
await message.reply( await message.reply("Gunakan command <b>/mmf <text></b> dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah.")
"Gunakan command <b>/mmf <text></b> dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah."
)

View file

@ -53,21 +53,13 @@ def remove_html_tags(text):
async def stackoverflow(client, message): async def stackoverflow(client, message):
if len(message.command) == 1: if len(message.command) == 1:
return await message.reply("Give a query to search in StackOverflow!") return await message.reply("Give a query to search in StackOverflow!")
r = ( 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()
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()
msg = await message.reply("Getting data..") msg = await message.reply("Getting data..")
hasil = "" hasil = ""
for count, data in enumerate(r["items"], start=1): for count, data in enumerate(r["items"], start=1):
question = data["question_id"] question = data["question_id"]
title = data["title"] title = data["title"]
snippet = ( 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(" ", "")
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" hasil += f"{count}. <a href='https://stackoverflow.com/questions/{question}'>{title}</a>\n<code>{snippet}</code>\n"
try: try:
await msg.edit(hasil) await msg.edit(hasil)
@ -86,10 +78,7 @@ async def gsearch(client, message):
query = message.text.split(" ", maxsplit=1)[1] query = message.text.split(" ", maxsplit=1)[1]
msg = await message.reply_text(f"**Googling** for `{query}` ...") msg = await message.reply_text(f"**Googling** for `{query}` ...")
try: try:
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"}
"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( html = await http.get(
f"https://www.google.com/search?q={query}&gl=id&hl=id&num=17", f"https://www.google.com/search?q={query}&gl=id&hl=id&num=17",
headers=headers, headers=headers,
@ -118,9 +107,7 @@ async def gsearch(client, message):
arr = json.dumps(data, indent=2, ensure_ascii=False) arr = json.dumps(data, indent=2, ensure_ascii=False)
parse = json.loads(arr) parse = json.loads(arr)
total = len(parse) total = len(parse)
res = "".join( res = "".join(f"<a href='{i['link']}'>{i['title']}</a>\n{i['snippet']}\n\n" for i in parse)
f"<a href='{i['link']}'>{i['title']}</a>\n{i['snippet']}\n\n" for i in parse
)
except Exception: except Exception:
exc = traceback.format_exc() exc = traceback.format_exc()
return await msg.edit(exc) return await msg.edit(exc)
@ -133,9 +120,7 @@ async def gsearch(client, message):
@app.on_message(filters.command(["tr", "trans", "translate"], COMMAND_HANDLER)) @app.on_message(filters.command(["tr", "trans", "translate"], COMMAND_HANDLER))
@capture_err @capture_err
async def translate(client, message): async def translate(client, message):
if message.reply_to_message and ( if message.reply_to_message and (message.reply_to_message.text or message.reply_to_message.caption):
message.reply_to_message.text or message.reply_to_message.caption
):
target_lang = "id" if len(message.command) == 1 else message.text.split()[1] 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 text = message.reply_to_message.text or message.reply_to_message.caption
else: else:
@ -149,14 +134,10 @@ async def translate(client, message):
try: try:
my_translator = GoogleTranslator(source="auto", target=target_lang) my_translator = GoogleTranslator(source="auto", target=target_lang)
result = my_translator.translate(text=text) result = my_translator.translate(text=text)
await msg.edit( await msg.edit(f"Translation using source = {my_translator.source} and target = {my_translator.target}\n\n-> {result}")
f"Translation using source = {my_translator.source} and target = {my_translator.target}\n\n-> {result}"
)
except MessageTooLong: except MessageTooLong:
url = await rentry(result) url = await rentry(result)
await msg.edit( await msg.edit(f"Your translated text pasted to rentry because has long text:\n{url}")
f"Your translated text pasted to rentry because has long text:\n{url}"
)
except Exception as err: except Exception as err:
await msg.edit(f"Error: <code>{str(err)}</code>") await msg.edit(f"Error: <code>{str(err)}</code>")
@ -164,9 +145,7 @@ async def translate(client, message):
@app.on_message(filters.command(["tts"], COMMAND_HANDLER)) @app.on_message(filters.command(["tts"], COMMAND_HANDLER))
@capture_err @capture_err
async def tts(_, message): async def tts(_, message):
if message.reply_to_message and ( if message.reply_to_message and (message.reply_to_message.text or message.reply_to_message.caption):
message.reply_to_message.text or message.reply_to_message.caption
):
if len(message.text.split()) == 1: if len(message.text.split()) == 1:
target_lang = "id" target_lang = "id"
else: else:
@ -218,16 +197,12 @@ async def topho(client, message):
if not message.reply_to_message or not message.reply_to_message.sticker: 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") return await message.reply_text("Reply ke sticker untuk mengubah ke foto")
if message.reply_to_message.sticker.is_animated: if message.reply_to_message.sticker.is_animated:
return await message.reply_text( return await message.reply_text("Ini sticker animasi, command ini hanya untuk sticker biasa.")
"Ini sticker animasi, command ini hanya untuk sticker biasa."
)
photo = await client.download_media( photo = await client.download_media(
message.reply_to_message.sticker.file_id, message.reply_to_message.sticker.file_id,
f"tostick_{message.from_user.id}.jpg", f"tostick_{message.from_user.id}.jpg",
) )
await message.reply_photo( await message.reply_photo(photo=photo, caption=f"Sticker -> Image\n@{client.me.username}")
photo=photo, caption=f"Sticker -> Image\n@{client.me.username}"
)
os.remove(photo) os.remove(photo)
except Exception as e: except Exception as e:
@ -260,16 +235,10 @@ async def showid(client, message):
) )
file_info = get_file_id(message.reply_to_message) file_info = get_file_id(message.reply_to_message)
else: else:
_id += ( _id += "<b>➲ User ID</b>: " f"<code>{message.from_user.id if message.from_user else 'Anonymous'}</code>\n"
"<b>➲ User ID</b>: "
f"<code>{message.from_user.id if message.from_user else 'Anonymous'}</code>\n"
)
file_info = get_file_id(message) file_info = get_file_id(message)
if file_info: if file_info:
_id += ( _id += f"<b>{file_info.message_type}</b>: " f"<code>{file_info.file_id}</code>\n"
f"<b>{file_info.message_type}</b>: "
f"<code>{file_info.file_id}</code>\n"
)
await message.reply_text(_id, quote=True) await message.reply_text(_id, quote=True)
@ -302,23 +271,13 @@ async def who_is(client, message):
if message.chat.type in (("supergroup", "channel")): if message.chat.type in (("supergroup", "channel")):
try: try:
chat_member_p = await message.chat.get_member(from_user.id) chat_member_p = await message.chat.get_member(from_user.id)
joined_date = datetime.fromtimestamp( joined_date = datetime.fromtimestamp(chat_member_p.joined_date or time.time()).strftime("%Y.%m.%d %H:%M:%S")
chat_member_p.joined_date or time.time() message_out_str += "<b>➲Joined this Chat on:</b> <code>" f"{joined_date}" "</code>\n"
).strftime("%Y.%m.%d %H:%M:%S")
message_out_str += (
"<b>➲Joined this Chat on:</b> <code>" f"{joined_date}" "</code>\n"
)
except UserNotParticipant: except UserNotParticipant:
pass pass
if chat_photo := from_user.photo: if chat_photo := from_user.photo:
local_user_photo = await client.download_media(message=chat_photo.big_file_id) local_user_photo = await client.download_media(message=chat_photo.big_file_id)
buttons = [ buttons = [[InlineKeyboardButton("🔐 Close", callback_data=f"close#{message.from_user.id}")]]
[
InlineKeyboardButton(
"🔐 Close", callback_data=f"close#{message.from_user.id}"
)
]
]
reply_markup = InlineKeyboardMarkup(buttons) reply_markup = InlineKeyboardMarkup(buttons)
await message.reply_photo( await message.reply_photo(
photo=local_user_photo, photo=local_user_photo,
@ -329,13 +288,7 @@ async def who_is(client, message):
) )
os.remove(local_user_photo) os.remove(local_user_photo)
else: else:
buttons = [ buttons = [[InlineKeyboardButton("🔐 Close", callback_data=f"close#{message.from_user.id}")]]
[
InlineKeyboardButton(
"🔐 Close", callback_data=f"close#{message.from_user.id}"
)
]
]
reply_markup = InlineKeyboardMarkup(buttons) reply_markup = InlineKeyboardMarkup(buttons)
await message.reply_text( await message.reply_text(
text=message_out_str, text=message_out_str,
@ -354,9 +307,7 @@ async def close_callback(bot: Client, query: CallbackQuery):
await query.message.delete() await query.message.delete()
headers = { 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"}
"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): async def get_content(url):
@ -409,22 +360,16 @@ async def mdl_callback(bot: Client, query: CallbackQuery):
try: try:
res = (await http.get(f"https://kuryana.vercel.app/id/{slug}")).json() 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>Title:</b> <a href='{res['data']['link']}'>{res['data']['title']}</a>\n"
result += ( result += f"<b>AKA:</b> <code>{res['data']['others']['also_known_as']}</code>\n\n"
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>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>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>Type:</b> <code>{res['data']['details']['type']}</code>\n"
result += ( result += f"<b>Country:</b> <code>{res['data']['details']['country']}</code>\n"
f"<b>Country:</b> <code>{res['data']['details']['country']}</code>\n"
)
if res["data"]["details"]["type"] == "Movie": if res["data"]["details"]["type"] == "Movie":
result += f"<b>Release Date:</b> <code>{res['data']['details']['release_date']}</code>\n" result += f"<b>Release Date:</b> <code>{res['data']['details']['release_date']}</code>\n"
elif res["data"]["details"]["type"] == "Drama": elif res["data"]["details"]["type"] == "Drama":
result += f"<b>Episode:</b> {res['data']['details']['episodes']}\n" result += f"<b>Episode:</b> {res['data']['details']['episodes']}\n"
result += ( result += f"<b>Aired:</b> <code>{res['data']['details']['aired']}</code>\n"
f"<b>Aired:</b> <code>{res['data']['details']['aired']}</code>\n"
)
try: try:
result += f"<b>Aired on:</b> <code>{res['data']['details']['aired_on']}</code>\n" result += f"<b>Aired on:</b> <code>{res['data']['details']['aired_on']}</code>\n"
except: except:
@ -433,17 +378,11 @@ async def mdl_callback(bot: Client, query: CallbackQuery):
result += f"<b>Original Network:</b> <code>{res['data']['details']['original_network']}</code>\n" result += f"<b>Original Network:</b> <code>{res['data']['details']['original_network']}</code>\n"
except: except:
pass pass
result += ( result += f"<b>Duration:</b> <code>{res['data']['details']['duration']}</code>\n"
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>Genre:</b> <code>{res['data']['others']['genres']}</code>\n\n"
)
result += f"<b>Synopsis:</b> <code>{res['data']['synopsis']}</code>\n" result += f"<b>Synopsis:</b> <code>{res['data']['synopsis']}</code>\n"
result += f"<b>Tags:</b> <code>{res['data']['others']['tags']}</code>\n" result += f"<b>Tags:</b> <code>{res['data']['others']['tags']}</code>\n"
btn = InlineKeyboardMarkup( btn = InlineKeyboardMarkup([[InlineKeyboardButton("🎬 Open MyDramaList", url=res["data"]["link"])]])
[[InlineKeyboardButton("🎬 Open MyDramaList", url=res["data"]["link"])]]
)
await query.message.edit_text(result, reply_markup=btn) await query.message.edit_text(result, reply_markup=btn)
except Exception as e: except Exception as e:
await query.message.edit_text(f"<b>ERROR:</b>\n<code>{e}</code>") await query.message.edit_text(f"<b>ERROR:</b>\n<code>{e}</code>")

View file

@ -52,9 +52,7 @@ async def job_close():
tahun = now.strftime("%Y") tahun = now.strftime("%Y")
jam = now.strftime("%H:%M") jam = now.strftime("%H:%M")
try: try:
reply_markup = InlineKeyboardMarkup( reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="❤️", callback_data="nightmd")]])
[[InlineKeyboardButton(text="❤️", callback_data="nightmd")]]
)
await app.set_chat_permissions( await app.set_chat_permissions(
-1001128045651, -1001128045651,
ChatPermissions(can_send_messages=False, can_invite_users=True), ChatPermissions(can_send_messages=False, can_invite_users=True),
@ -91,9 +89,7 @@ async def job_close_ymoviez():
tahun = now.strftime("%Y") tahun = now.strftime("%Y")
jam = now.strftime("%H:%M") jam = now.strftime("%H:%M")
try: try:
reply_markup = InlineKeyboardMarkup( reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="❤️", callback_data="nightmd")]])
[[InlineKeyboardButton(text="❤️", callback_data="nightmd")]]
)
await app.set_chat_permissions( await app.set_chat_permissions(
-1001255283935, -1001255283935,
ChatPermissions(can_send_messages=False, can_invite_users=True), ChatPermissions(can_send_messages=False, can_invite_users=True),
@ -129,9 +125,7 @@ async def job_open():
tahun = now.strftime("%Y") tahun = now.strftime("%Y")
jam = now.strftime("%H:%M") jam = now.strftime("%H:%M")
try: try:
reply_markup = InlineKeyboardMarkup( reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="❤️", callback_data="nightmd")]])
[[InlineKeyboardButton(text="❤️", callback_data="nightmd")]]
)
await app.set_chat_permissions( await app.set_chat_permissions(
-1001128045651, -1001128045651,
ChatPermissions( ChatPermissions(
@ -174,9 +168,7 @@ async def job_open_ymoviez():
tahun = now.strftime("%Y") tahun = now.strftime("%Y")
jam = now.strftime("%H:%M") jam = now.strftime("%H:%M")
try: try:
reply_markup = InlineKeyboardMarkup( reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="❤️", callback_data="nightmd")]])
[[InlineKeyboardButton(text="❤️", callback_data="nightmd")]]
)
await app.set_chat_permissions( await app.set_chat_permissions(
-1001255283935, -1001255283935,
ChatPermissions( ChatPermissions(

View file

@ -60,9 +60,7 @@ async def save_notee(_, message):
_type = "text" if message.reply_to_message.text else "sticker" _type = "text" if message.reply_to_message.text else "sticker"
note = { note = {
"type": _type, "type": _type,
"data": message.reply_to_message.text.markdown "data": message.reply_to_message.text.markdown if _type == "text" else message.reply_to_message.sticker.file_id,
if _type == "text"
else message.reply_to_message.sticker.file_id,
} }
message.text.split()[0][0] message.text.split()[0][0]
chat_id = message.chat.id chat_id = message.chat.id

View file

@ -24,9 +24,7 @@ __HELP__ = "/ocr [reply to photo] - Read Text From Image"
async def ocr(_, message): async def ocr(_, message):
reply = message.reply_to_message reply = message.reply_to_message
if not reply or not reply.photo and not reply.sticker: if not reply or not reply.photo and not reply.sticker:
return await message.reply_text( return await message.reply_text(f"Reply photo with /{message.command[0]} command")
f"Reply photo with /{message.command[0]} command"
)
msg = await message.reply("Reading image...") msg = await message.reply("Reading image...")
try: try:
file_path = await reply.download() file_path = await reply.download()

View file

@ -66,18 +66,14 @@ async def create(_, message):
reply = message.reply_to_message reply = message.reply_to_message
target = str(message.command[0]).split("@", maxsplit=1)[0] target = str(message.command[0]).split("@", maxsplit=1)[0]
if not reply and len(message.command) < 2: if not reply and len(message.command) < 2:
return await message.reply_text( return await message.reply_text(f"**Reply To A Message With /{target} or with command**")
f"**Reply To A Message With /{target} or with command**"
)
msg = await message.reply_text("`Pasting to Rentry...`") msg = await message.reply_text("`Pasting to Rentry...`")
data = "" data = ""
limit = 1024 * 1024 limit = 1024 * 1024
if reply and reply.document: if reply and reply.document:
if reply.document.file_size > limit: if reply.document.file_size > limit:
return await msg.edit( return await msg.edit(f"**You can only paste files smaller than {humanbytes(limit)}.**")
f"**You can only paste files smaller than {humanbytes(limit)}.**"
)
if not pattern.search(reply.document.mime_type): if not pattern.search(reply.document.mime_type):
return await msg.edit("**Only text files can be pasted.**") return await msg.edit("**Only text files can be pasted.**")
file = await reply.download() file = await reply.download()
@ -100,9 +96,7 @@ async def create(_, message):
if message.from_user.username: if message.from_user.username:
uname = f"@{message.from_user.username}" uname = f"@{message.from_user.username}"
else: else:
uname = ( uname = f"[{message.from_user.first_name}](tg://user?id={message.from_user.id})"
f"[{message.from_user.first_name}](tg://user?id={message.from_user.id})"
)
else: else:
uname = message.sender_chat.title uname = message.sender_chat.title
@ -116,11 +110,7 @@ async def create(_, message):
return await msg.edit("Text Too Short Or File Problems") return await msg.edit("Text Too Short Or File Problems")
button = [ button = [
[InlineKeyboardButton("Open Link", url=url)], [InlineKeyboardButton("Open Link", url=url)],
[ [InlineKeyboardButton("Share Link", url=f"https://telegram.me/share/url?url={url}")],
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}**" pasted = f"**Successfully pasted your data to Rentry<a href='{url}'>.</a>\n\nPaste by {uname}**"
@ -132,18 +122,14 @@ async def create(_, message):
reply = message.reply_to_message reply = message.reply_to_message
target = str(message.command[0]).split("@", maxsplit=1)[0] target = str(message.command[0]).split("@", maxsplit=1)[0]
if not reply and len(message.command) < 2: if not reply and len(message.command) < 2:
return await message.reply_text( return await message.reply_text(f"**Reply To A Message With /{target} or with command**")
f"**Reply To A Message With /{target} or with command**"
)
msg = await message.reply_text("`Pasting to TempPaste...`") msg = await message.reply_text("`Pasting to TempPaste...`")
data = "" data = ""
limit = 1024 * 1024 limit = 1024 * 1024
if reply and reply.document: if reply and reply.document:
if reply.document.file_size > limit: if reply.document.file_size > limit:
return await msg.edit( return await msg.edit(f"**You can only paste files smaller than {humanbytes(limit)}.**")
f"**You can only paste files smaller than {humanbytes(limit)}.**"
)
if not pattern.search(reply.document.mime_type): if not pattern.search(reply.document.mime_type):
return await msg.edit("**Only text files can be pasted.**") return await msg.edit("**Only text files can be pasted.**")
file = await reply.download() file = await reply.download()
@ -166,9 +152,7 @@ async def create(_, message):
if message.from_user.username: if message.from_user.username:
uname = f"@{message.from_user.username}" uname = f"@{message.from_user.username}"
else: else:
uname = ( uname = f"[{message.from_user.first_name}](tg://user?id={message.from_user.id})"
f"[{message.from_user.first_name}](tg://user?id={message.from_user.id})"
)
else: else:
uname = message.sender_chat.title uname = message.sender_chat.title
@ -193,11 +177,7 @@ async def create(_, message):
return await msg.edit("Text Too Short Or File Problems") return await msg.edit("Text Too Short Or File Problems")
button = [ button = [
[InlineKeyboardButton("Open Link", url=url)], [InlineKeyboardButton("Open Link", url=url)],
[ [InlineKeyboardButton("Share Link", url=f"https://telegram.me/share/url?url={url}")],
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}**" pasted = f"**Successfully pasted your data to Tempaste<a href='{url}'>.</a>\n\nPaste by {uname}**"

View file

@ -25,9 +25,7 @@ async def ping(_, message):
end_t = time.time() end_t = time.time()
time_taken_s = round(end_t - start_t, 3) time_taken_s = round(end_t - start_t, 3)
try: try:
await rm.edit( 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>")
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: except Exception:
pass pass
@ -53,9 +51,7 @@ async def ping_handler(_, message):
check=True, check=True,
capture_output=True, capture_output=True,
) )
resp_time = findall(r"time=.+m?s", shell.stdout, MULTILINE)[0].replace( resp_time = findall(r"time=.+m?s", shell.stdout, MULTILINE)[0].replace("time=", "")
"time=", ""
)
text += f" **{dc.upper()}:** {resp_time}\n" text += f" **{dc.upper()}:** {resp_time}\n"
except Exception: except Exception:

View file

@ -40,11 +40,7 @@ async def get_message_sender_name(m: Message):
if m.forward_sender_name: if m.forward_sender_name:
return m.forward_sender_name return m.forward_sender_name
elif m.forward_from: elif m.forward_from:
return ( return f"{m.forward_from.first_name} {m.forward_from.last_name}" if m.forward_from.last_name else m.forward_from.first_name
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: elif m.forward_from_chat:
return m.forward_from_chat.title return m.forward_from_chat.title
@ -63,42 +59,22 @@ async def get_message_sender_name(m: Message):
async def get_custom_emoji(m: Message): async def get_custom_emoji(m: Message):
if m.forward_date: if m.forward_date:
return ( 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
""
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 "" return m.from_user.emoji_status.custom_emoji_id if m.from_user else ""
async def get_message_sender_username(m: Message): async def get_message_sender_username(m: Message):
if m.forward_date: if m.forward_date:
if ( if not m.forward_sender_name and not m.forward_from and m.forward_from_chat and m.forward_from_chat.username:
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 return m.forward_from_chat.username
elif ( 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:
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 "" return ""
else: else:
return m.forward_from.username or "" return m.forward_from.username or ""
elif m.from_user and m.from_user.username: elif m.from_user and m.from_user.username:
return m.from_user.username return m.from_user.username
elif ( elif m.from_user or m.sender_chat and not m.sender_chat.username or not m.sender_chat:
m.from_user or m.sender_chat and not m.sender_chat.username or not m.sender_chat
):
return "" return ""
else: else:
return m.sender_chat.username return m.sender_chat.username
@ -106,25 +82,14 @@ async def get_message_sender_username(m: Message):
async def get_message_sender_photo(m: Message): async def get_message_sender_photo(m: Message):
if m.forward_date: if m.forward_date:
if ( if not m.forward_sender_name and not m.forward_from and m.forward_from_chat and m.forward_from_chat.photo:
not m.forward_sender_name
and not m.forward_from
and m.forward_from_chat
and m.forward_from_chat.photo
):
return { return {
"small_file_id": m.forward_from_chat.photo.small_file_id, "small_file_id": m.forward_from_chat.photo.small_file_id,
"small_photo_unique_id": m.forward_from_chat.photo.small_photo_unique_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_file_id": m.forward_from_chat.photo.big_file_id,
"big_photo_unique_id": m.forward_from_chat.photo.big_photo_unique_id, "big_photo_unique_id": m.forward_from_chat.photo.big_photo_unique_id,
} }
elif ( 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:
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 "" return ""
else: else:
return ( return (
@ -202,16 +167,10 @@ async def pyrogram_to_quotly(messages):
the_message_dict_to_append["avatar"] = True the_message_dict_to_append["avatar"] = True
the_message_dict_to_append["from"] = {} 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"]["id"] = await get_message_sender_id(message)
the_message_dict_to_append["from"]["name"] = await get_message_sender_name( the_message_dict_to_append["from"]["name"] = await get_message_sender_name(message)
message the_message_dict_to_append["from"]["username"] = await get_message_sender_username(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"]["type"] = message.chat.type.name.lower()
the_message_dict_to_append["from"]["photo"] = await get_message_sender_photo( the_message_dict_to_append["from"]["photo"] = await get_message_sender_photo(message)
message
)
if message.reply_to_message: if message.reply_to_message:
the_message_dict_to_append["replyMessage"] = { the_message_dict_to_append["replyMessage"] = {
"name": await get_message_sender_name(message.reply_to_message), "name": await get_message_sender_name(message.reply_to_message),
@ -267,9 +226,7 @@ async def msg_quotly_cmd(c: Client, m: Message):
except Exception: except Exception:
return await m.reply_text("🤷🏻‍♂️") return await m.reply_text("🤷🏻‍♂️")
try: try:
messages_one = await c.get_messages( messages_one = await c.get_messages(chat_id=m.chat.id, message_ids=m.reply_to_message.id, replies=-1)
chat_id=m.chat.id, message_ids=m.reply_to_message.id, replies=-1
)
messages = [messages_one] messages = [messages_one]
except Exception: except Exception:
return await m.reply_text("🤷🏻‍♂️") return await m.reply_text("🤷🏻‍♂️")

View file

@ -34,9 +34,7 @@ __HELP__ = """
LOGGER = getLogger(__name__) LOGGER = getLogger(__name__)
headers = { 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"}
"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"
}
@app.on_message(filters.command(["zonafilm"], COMMAND_HANDLER)) @app.on_message(filters.command(["zonafilm"], COMMAND_HANDLER))
@ -53,10 +51,10 @@ async def zonafilm(_, msg):
entry = text.find_all(class_="entry-header") entry = text.find_all(class_="entry-header")
if "Nothing Found" in entry[0].text: if "Nothing Found" in entry[0].text:
await m.delete() await m.delete()
if title != "": if not title:
await msg.reply(f"404 Not FOUND For: {title}", True) await msg.reply("404 Not FOUND!", True)
else: else:
await msg.reply(f"404 Not FOUND!", True) await msg.reply(f"404 Not FOUND For: {title}", True)
return return
data = [] data = []
for i in entry: for i in entry:
@ -65,19 +63,12 @@ async def zonafilm(_, msg):
judul = i.find(class_="entry-title").find("a").text judul = i.find(class_="entry-title").find("a").text
link = i.find(class_="entry-title").find("a").get("href") link = i.find(class_="entry-title").find("a").get("href")
data.append({"judul": judul, "link": link, "genre": genre}) data.append({"judul": judul, "link": link, "genre": genre})
if title != "": head = f"<b>#Zonafilm Results For:</b> <code>{title}</code>\n\n" if title else f"<b>#Zonafilm Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n"
head = f"<b>#Zonafilm Results For:</b> <code>{title}</code>\n\n"
else:
head = f"<b>#Zonafilm Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n"
msgs = "" msgs = ""
await m.delete() await m.delete()
for c, i in enumerate(data, start=1): for c, i in enumerate(data, start=1):
msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Genre:</b> <code>{i['genre']}</code>\n" msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Genre:</b> <code>{i['genre']}</code>\n"
msgs += ( msgs += f"<b>Extract:</b> <code>/{msg.command[0]}_scrap {i['link']}</code>\n\n" if "/tv/" not in i["link"] else "\n"
f"<b>Extract:</b> <code>/{msg.command[0]}_scrap {i['link']}</code>\n\n"
if "/tv/" not in i["link"]
else "\n"
)
if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000: if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000:
await msg.reply( await msg.reply(
head + msgs, head + msgs,
@ -132,10 +123,10 @@ async def nodrakor(_, msg):
entry = text.find_all(class_="entry-header") entry = text.find_all(class_="entry-header")
if "Nothing Found" in entry[0].text: if "Nothing Found" in entry[0].text:
await m.delete() await m.delete()
if title != "": if not title:
await msg.reply(f"404 Not FOUND For: {title}", True) await msg.reply("404 Not FOUND!", True)
else: else:
await msg.reply(f"404 Not FOUND!", True) await msg.reply(f"404 Not FOUND For: {title}", True)
return return
data = [] data = []
for i in entry: for i in entry:
@ -144,10 +135,7 @@ async def nodrakor(_, msg):
judul = i.find(class_="entry-title").find("a").text judul = i.find(class_="entry-title").find("a").text
link = i.find(class_="entry-title").find("a").get("href") link = i.find(class_="entry-title").find("a").get("href")
data.append({"judul": judul, "link": link, "genre": genre}) data.append({"judul": judul, "link": link, "genre": genre})
if title != "": head = f"<b>#Nodrakor Results For:</b> <code>{title}</code>\n\n" if title else f"<b>#Nodrakor Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n"
head = f"<b>#Nodrakor Results For:</b> <code>{title}</code>\n\n"
else:
head = f"<b>#Nodrakor Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n"
msgs = "" msgs = ""
await m.delete() await m.delete()
for c, i in enumerate(data, start=1): for c, i in enumerate(data, start=1):
@ -225,7 +213,7 @@ async def movikucc(_, msg):
data = [] data = []
if len(msg.command) == 1: if len(msg.command) == 1:
try: try:
html = await http.get(f"https://107.152.37.223/") html = await http.get("https://107.152.37.223/")
r = BeautifulSoup(html.text, "lxml") r = BeautifulSoup(html.text, "lxml")
res = r.find_all(class_="bx") res = r.find_all(class_="bx")
for i in res: for i in res:
@ -361,43 +349,6 @@ async def savefilm21(_, msg):
return await msg.reply("404 Result not FOUND!", True) return await msg.reply("404 Result not FOUND!", True)
await m.delete() await m.delete()
head = f"<b>#SaveFilm21 Results For:</b> <code>{title}</code>\n\n" head = f"<b>#SaveFilm21 Results For:</b> <code>{title}</code>\n\n"
msgs = ""
for c, i in enumerate(data, start=1):
msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Extract:</b> <code>/{msg.command[0]}_scrap {i['link']}</code>\n\n"
if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000:
await msg.reply(
head + msgs,
True,
disable_web_page_preview=True,
reply_markup=InlineKeyboardMarkup(
[
[
InlineKeyboardButton(
text="❌ Close",
callback_data=f"close#{msg.from_user.id}",
)
]
]
),
)
await asyncio.sleep(2)
msgs = ""
if msgs != "":
await msg.reply(
head + msgs,
True,
disable_web_page_preview=True,
reply_markup=InlineKeyboardMarkup(
[
[
InlineKeyboardButton(
text="❌ Close",
callback_data=f"close#{msg.from_user.id}",
)
]
]
),
)
else: else:
html = await http.get(SITE, headers=headers) html = await http.get(SITE, headers=headers)
bs4 = BeautifulSoup(html.text, "lxml") bs4 = BeautifulSoup(html.text, "lxml")
@ -409,28 +360,10 @@ async def savefilm21(_, msg):
data.append({"judul": judul, "link": link}) data.append({"judul": judul, "link": link})
await m.delete() await m.delete()
head = f"<b>#SaveFilm21 Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n" head = f"<b>#SaveFilm21 Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n"
msgs = "" msgs = ""
for c, i in enumerate(data, start=1): for c, i in enumerate(data, start=1):
msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Extract:</b> <code>/{msg.command[0]}_scrap {i['link']}</code>\n\n" msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Extract:</b> <code>/{msg.command[0]}_scrap {i['link']}</code>\n\n"
if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000: if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000:
await msg.reply(
head + msgs,
True,
disable_web_page_preview=True,
reply_markup=InlineKeyboardMarkup(
[
[
InlineKeyboardButton(
text="❌ Close",
callback_data=f"close#{msg.from_user.id}",
)
]
]
),
)
await asyncio.sleep(2)
msgs = ""
if msgs != "":
await msg.reply( await msg.reply(
head + msgs, head + msgs,
True, True,
@ -446,6 +379,24 @@ async def savefilm21(_, msg):
] ]
), ),
) )
await asyncio.sleep(2)
msgs = ""
if msgs != "":
await msg.reply(
head + msgs,
True,
disable_web_page_preview=True,
reply_markup=InlineKeyboardMarkup(
[
[
InlineKeyboardButton(
text="❌ Close",
callback_data=f"close#{msg.from_user.id}",
)
]
]
),
)
except Exception as e: except Exception as e:
await m.delete() await m.delete()
LOGGER.error(e) LOGGER.error(e)
@ -593,11 +544,7 @@ async def pahe_scrap(_, msg):
if not res["result"]: if not res["result"]:
await m.delete() await m.delete()
return await msg.reply("404 Result not FOUND!", True) return await msg.reply("404 Result not FOUND!", True)
head = ( head = f"<b>#Pahe Results For:</b> <code>{title}</code>\n\n" if title else f"<b>#Pahe Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n"
f"<b>#Pahe Results For:</b> <code>{title}</code>\n\n"
if title
else f"<b>#Pahe Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n"
)
await m.delete() await m.delete()
msgs = "" msgs = ""
for c, i in enumerate(res["result"], start=1): for c, i in enumerate(res["result"], start=1):
@ -658,11 +605,7 @@ async def terbit21_scrap(_, msg):
msgs = "" msgs = ""
for c, i in enumerate(res["result"], start=1): for c, i in enumerate(res["result"], start=1):
msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n" msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n"
msgs += ( msgs += "\n" if re.search(r"Complete|Ongoing", i["kategori"]) else f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
if not re.search(r"Complete|Ongoing", i["kategori"])
else "\n"
)
if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000: if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000:
await msg.reply( await msg.reply(
head + msgs, head + msgs,
@ -714,11 +657,7 @@ async def terbit21_scrap(_, msg):
msgs = "" msgs = ""
for c, i in enumerate(res["result"], start=1): for c, i in enumerate(res["result"], start=1):
msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n" msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n"
msgs += ( msgs += "\n" if re.search(r"Complete|Ongoing", i["kategori"]) else f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
if not re.search(r"Complete|Ongoing", i["kategori"])
else "\n"
)
if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000: if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000:
await msg.reply( await msg.reply(
head + msgs, head + msgs,
@ -778,11 +717,7 @@ async def lk21_scrap(_, msg):
msgs = "" msgs = ""
for c, i in enumerate(res["result"], start=1): for c, i in enumerate(res["result"], start=1):
msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n" msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n"
msgs += ( msgs += "\n" if re.search(r"Complete|Ongoing", i["kategori"]) else f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
if not re.search(r"Complete|Ongoing", i["kategori"])
else "\n"
)
if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000: if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000:
await msg.reply( await msg.reply(
head + msgs, head + msgs,
@ -837,11 +772,7 @@ async def lk21_scrap(_, msg):
msgs = "" msgs = ""
for c, i in enumerate(res["result"], start=1): for c, i in enumerate(res["result"], start=1):
msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n" msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Category:</b> <code>{i['kategori']}</code>\n"
msgs += ( msgs += "\n" if re.search(r"Complete|Ongoing", i["kategori"]) else f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
f"💠 <b><a href='{i['dl']}'>Download</a></b>\n\n"
if not re.search(r"Complete|Ongoing", i["kategori"])
else "\n"
)
if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000: if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000:
await msg.reply( await msg.reply(
head + msgs, head + msgs,
@ -896,10 +827,10 @@ async def gomov_scrap(_, msg):
entry = text.find_all(class_="entry-header") entry = text.find_all(class_="entry-header")
if "Nothing Found" in entry[0].text: if "Nothing Found" in entry[0].text:
await m.delete() await m.delete()
if title != "": if not title:
await msg.reply(f"404 Not FOUND For: {title}", True) await msg.reply("404 Not FOUND!", True)
else: else:
await msg.reply(f"404 Not FOUND!", True) await msg.reply(f"404 Not FOUND For: {title}", True)
return return
data = [] data = []
for i in entry: for i in entry:
@ -908,19 +839,12 @@ async def gomov_scrap(_, msg):
judul = i.find(class_="entry-title").find("a").text judul = i.find(class_="entry-title").find("a").text
link = i.find(class_="entry-title").find("a").get("href") link = i.find(class_="entry-title").find("a").get("href")
data.append({"judul": judul, "link": link, "genre": genre}) data.append({"judul": judul, "link": link, "genre": genre})
if title != "": head = f"<b>#Gomov Results For:</b> <code>{title}</code>\n\n" if title else f"<b>#Gomov Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n"
head = f"<b>#Gomov Results For:</b> <code>{title}</code>\n\n"
else:
head = f"<b>#Gomov Latest:</b>\n🌀 Use /{msg.command[0]} [title] to start search with title.\n\n"
msgs = "" msgs = ""
await m.delete() await m.delete()
for c, i in enumerate(data, start=1): for c, i in enumerate(data, start=1):
msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Genre:</b> <code>{i['genre']}</code>\n" msgs += f"<b>{c}. <a href='{i['link']}'>{i['judul']}</a></b>\n<b>Genre:</b> <code>{i['genre']}</code>\n"
msgs += ( msgs += "\n" if re.search(r"Series", i["genre"]) else f"<b>Extract:</b> <code>/{msg.command[0]}_scrap {i['link']}</code>\n\n"
f"<b>Extract:</b> <code>/{msg.command[0]}_scrap {i['link']}</code>\n\n"
if not re.search(r"Series", i["genre"])
else "\n"
)
if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000: if len(head.encode("utf-8") + msgs.encode("utf-8")) >= 4000:
await msg.reply( await msg.reply(
head + msgs, head + msgs,
@ -966,9 +890,7 @@ async def gomov_scrap(_, msg):
async def savefilm21_scrap(_, message): async def savefilm21_scrap(_, message):
try: try:
link = message.text.split(" ", maxsplit=1)[1] link = message.text.split(" ", maxsplit=1)[1]
headers = { 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"}
"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) html = await http.get(link, headers=headers)
soup = BeautifulSoup(html.text, "lxml") soup = BeautifulSoup(html.text, "lxml")
@ -989,9 +911,7 @@ async def savefilm21_scrap(_, message):
), ),
) )
except IndexError: except IndexError:
return await message.reply( return await message.reply(f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download")
f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download"
)
except Exception as e: except Exception as e:
await message.reply(f"ERROR: {str(e)}") await message.reply(f"ERROR: {str(e)}")
@ -1001,18 +921,14 @@ async def savefilm21_scrap(_, message):
async def nodrakor_scrap(_, message): async def nodrakor_scrap(_, message):
try: try:
link = message.text.split(" ", maxsplit=1)[1] link = message.text.split(" ", maxsplit=1)[1]
headers = { 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"}
"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) html = await http.get(link, headers=headers)
soup = BeautifulSoup(html.text, "lxml") soup = BeautifulSoup(html.text, "lxml")
hasil = soup.find_all(class_="gmr-download-wrap clearfix")[0] hasil = soup.find_all(class_="gmr-download-wrap clearfix")[0]
await message.reply(f"<b>Hasil Scrap dari {link}</b>:\n{hasil}") await message.reply(f"<b>Hasil Scrap dari {link}</b>:\n{hasil}")
except IndexError: except IndexError:
return await message.reply( return await message.reply(f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download")
f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download"
)
except Exception as e: except Exception as e:
await message.reply(f"ERROR: {str(e)}") await message.reply(f"ERROR: {str(e)}")
@ -1023,9 +939,7 @@ async def nodrakor_scrap(_, message):
async def muviku_scrap(_, message): async def muviku_scrap(_, message):
try: try:
link = message.text.split(" ", maxsplit=1)[1] link = message.text.split(" ", maxsplit=1)[1]
headers = { 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"}
"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) html = await http.get(link, headers=headers)
soup = BeautifulSoup(html.text, "lxml") soup = BeautifulSoup(html.text, "lxml")
@ -1042,9 +956,7 @@ async def muviku_scrap(_, message):
res = "".join(f"<b>Host: {i['kualitas']}</b>\n{i['link']}\n\n" for i in data) res = "".join(f"<b>Host: {i['kualitas']}</b>\n{i['link']}\n\n" for i in data)
await message.reply(res) await message.reply(res)
except IndexError: except IndexError:
return await message.reply( return await message.reply(f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download")
f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download"
)
except Exception as e: except Exception as e:
await message.reply(f"ERROR: {str(e)}") await message.reply(f"ERROR: {str(e)}")
@ -1054,9 +966,7 @@ async def muviku_scrap(_, message):
async def melong_scrap(_, message): async def melong_scrap(_, message):
try: try:
link = message.text.split(" ", maxsplit=1)[1] link = message.text.split(" ", maxsplit=1)[1]
headers = { 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"}
"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) html = await http.get(link, headers=headers)
soup = BeautifulSoup(html.text, "lxml") soup = BeautifulSoup(html.text, "lxml")
@ -1066,9 +976,7 @@ async def melong_scrap(_, message):
rep = f"{hardsub}\n{softsub}" rep = f"{hardsub}\n{softsub}"
await message.reply(rep) await message.reply(rep)
except IndexError: except IndexError:
await message.reply( await message.reply(f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download")
f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download"
)
@app.on_message(filters.command(["gomov_scrap", "zonafilm_scrap"], COMMAND_HANDLER)) @app.on_message(filters.command(["gomov_scrap", "zonafilm_scrap"], COMMAND_HANDLER))
@ -1076,9 +984,7 @@ async def melong_scrap(_, message):
async def gomov_zonafilm_dl(_, message): async def gomov_zonafilm_dl(_, message):
try: try:
link = message.text.split(" ", maxsplit=1)[1] link = message.text.split(" ", maxsplit=1)[1]
headers = { 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"}
"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) html = await http.get(link, headers=headers)
soup = BeautifulSoup(html.text, "lxml") soup = BeautifulSoup(html.text, "lxml")
@ -1102,6 +1008,4 @@ async def gomov_zonafilm_dl(_, message):
), ),
) )
except IndexError: except IndexError:
await message.reply( await message.reply(f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download")
f"Gunakan command /{message.command[0]} <b>[link]</b> untuk scrap link download"
)

View file

@ -34,9 +34,7 @@ async def sed(c: app, m: Message):
return return
try: try:
res = regex.sub( res = regex.sub(pattern, replace_with, text, count=count, flags=rflags, timeout=1)
pattern, replace_with, text, count=count, flags=rflags, timeout=1
)
except TimeoutError: except TimeoutError:
return await m.reply_text("Oops, your regex pattern has run for too long.") return await m.reply_text("Oops, your regex pattern has run for too long.")
except regex.error as e: except regex.error as e:

View file

@ -37,11 +37,7 @@ __HELP__ = """
def get_emoji_regex(): def get_emoji_regex():
e_list = [ e_list = [getattr(emoji, e).encode("unicode-escape").decode("ASCII") for e in dir(emoji) if not e.startswith("_")]
getattr(emoji, e).encode("unicode-escape").decode("ASCII")
for e in dir(emoji)
if not e.startswith("_")
]
# to avoid re.error excluding char that start with '*' # to avoid re.error excluding char that start with '*'
e_sort = sorted([x for x in e_list if not x.startswith("*")], reverse=True) e_sort = sorted([x for x in e_list if not x.startswith("*")], reverse=True)
# Sort emojis by length to make sure multi-character emojis are # Sort emojis by length to make sure multi-character emojis are
@ -56,12 +52,10 @@ SUPPORTED_TYPES = ["jpeg", "png", "webp"]
@app.on_message(filters.command(["getsticker"], COMMAND_HANDLER)) @app.on_message(filters.command(["getsticker"], COMMAND_HANDLER))
async def getsticker_(c, m): async def getsticker_(c, m):
sticker = m.reply_to_message.sticker if sticker := m.reply_to_message.sticker:
if sticker:
if sticker.is_animated: if sticker.is_animated:
await m.reply_text("Animated sticker is not supported!") await m.reply_text("Animated sticker is not supported!")
elif not sticker.is_animated: else:
with tempfile.TemporaryDirectory() as tempdir: with tempfile.TemporaryDirectory() as tempdir:
path = os.path.join(tempdir, "getsticker") path = os.path.join(tempdir, "getsticker")
sticker_file = await c.download_media( sticker_file = await c.download_media(
@ -70,11 +64,7 @@ async def getsticker_(c, m):
) )
await m.reply_to_message.reply_document( await m.reply_to_message.reply_document(
document=sticker_file, document=sticker_file,
caption=( caption=(f"<b>Emoji:</b> {sticker.emoji}\n" f"<b>Sticker ID:</b> <code>{sticker.file_id}</code>\n\n" f"<b>Send by:</b> @{BOT_USERNAME}"),
f"<b>Emoji:</b> {sticker.emoji}\n"
f"<b>Sticker ID:</b> <code>{sticker.file_id}</code>\n\n"
f"<b>Send by:</b> @{BOT_USERNAME}"
),
) )
shutil.rmtree(tempdir, ignore_errors=True) shutil.rmtree(tempdir, ignore_errors=True)
else: else:
@ -84,11 +74,7 @@ async def getsticker_(c, m):
@app.on_message(filters.command("stickerid", COMMAND_HANDLER) & filters.reply) @app.on_message(filters.command("stickerid", COMMAND_HANDLER) & filters.reply)
async def getstickerid(c, m): async def getstickerid(c, m):
if m.reply_to_message.sticker: if m.reply_to_message.sticker:
await m.reply_text( await m.reply_text("The ID of this sticker is: <code>{stickerid}</code>".format(stickerid=m.reply_to_message.sticker.file_id))
"The ID of this sticker is: <code>{stickerid}</code>".format(
stickerid=m.reply_to_message.sticker.file_id
)
)
@app.on_message(filters.command("unkang", COMMAND_HANDLER) & filters.reply) @app.on_message(filters.command("unkang", COMMAND_HANDLER) & filters.reply)
@ -107,9 +93,7 @@ async def getstickerid(c, m):
except Exception as e: except Exception as e:
await pp.edit(f"Failed remove sticker from your pack.\n\nERR: {e}") await pp.edit(f"Failed remove sticker from your pack.\n\nERR: {e}")
else: else:
await m.reply_text( await m.reply_text(f"Please reply sticker that created by {c.me.username} to remove sticker from your pack.")
f"Please reply sticker that created by {c.me.username} to remove sticker from your pack."
)
@app.on_message(filters.command(["curi", "kang"], COMMAND_HANDLER)) @app.on_message(filters.command(["curi", "kang"], COMMAND_HANDLER))
@ -173,10 +157,7 @@ async def kang_sticker(c, m):
packname = f"{pack_prefix}{packnum}_{m.from_user.id}_by_{c.me.username}" packname = f"{pack_prefix}{packnum}_{m.from_user.id}_by_{c.me.username}"
if len(m.command) > 1: if len(m.command) > 1:
# matches all valid emojis in input # matches all valid emojis in input
sticker_emoji = ( sticker_emoji = "".join(set(EMOJI_PATTERN.findall("".join(m.command[1:])))) or sticker_emoji
"".join(set(EMOJI_PATTERN.findall("".join(m.command[1:]))))
or sticker_emoji
)
filename = await c.download_media(m.reply_to_message) filename = await c.download_media(m.reply_to_message)
if not filename: if not filename:
# Failed to download # Failed to download
@ -187,11 +168,7 @@ async def kang_sticker(c, m):
filename = "sticker.png" filename = "sticker.png"
packname = f"c{m.from_user.id}_by_{c.me.username}" packname = f"c{m.from_user.id}_by_{c.me.username}"
img_url = next( img_url = next(
( (m.text[y.offset : (y.offset + y.length)] for y in m.entities if y.type == "url"),
m.text[y.offset : (y.offset + y.length)]
for y in m.entities
if y.type == "url"
),
None, None,
) )
@ -211,15 +188,10 @@ async def kang_sticker(c, m):
packnum = m.command.pop(2) packnum = m.command.pop(2)
packname = f"a{packnum}_{m.from_user.id}_by_{c.me.username}" packname = f"a{packnum}_{m.from_user.id}_by_{c.me.username}"
if len(m.command) > 2: if len(m.command) > 2:
sticker_emoji = ( sticker_emoji = "".join(set(EMOJI_PATTERN.findall("".join(m.command[2:])))) or sticker_emoji
"".join(set(EMOJI_PATTERN.findall("".join(m.command[2:]))))
or sticker_emoji
)
resize = True resize = True
else: else:
return await prog_msg.edit_text( return await prog_msg.edit_text("Want me to guess the sticker? Please tag a sticker.")
"Want me to guess the sticker? Please tag a sticker."
)
try: try:
if resize: if resize:
filename = resize_image(filename) filename = resize_image(filename)
@ -238,9 +210,7 @@ async def kang_sticker(c, m):
) )
if stickerset.set.count >= max_stickers: if stickerset.set.count >= max_stickers:
packnum += 1 packnum += 1
packname = ( packname = f"{pack_prefix}_{packnum}_{m.from_user.id}_by_{c.me.username}"
f"{pack_prefix}_{packnum}_{m.from_user.id}_by_{c.me.username}"
)
else: else:
packname_found = True packname_found = True
except StickersetInvalid: except StickersetInvalid:
@ -320,9 +290,7 @@ async def kang_sticker(c, m):
) )
except BadRequest: except BadRequest:
return await prog_msg.edit_text( return await prog_msg.edit_text("Your Sticker Pack is full if your pack is not in v1 Type /kang 1, if it is not in v2 Type /kang 2 and so on.")
"Your Sticker Pack is full if your pack is not in v1 Type /kang 1, if it is not in v2 Type /kang 2 and so on."
)
except Exception as all_e: except Exception as all_e:
await prog_msg.edit_text(f"{all_e.__class__.__name__} : {all_e}") await prog_msg.edit_text(f"{all_e.__class__.__name__} : {all_e}")
else: else:

View file

@ -64,18 +64,12 @@ def get_subname(lang, url, format):
async def ceksub(_, m): async def ceksub(_, m):
cmd = m.text.split(" ", 1) cmd = m.text.split(" ", 1)
if len(cmd) == 1: if len(cmd) == 1:
return await m.reply( return await m.reply(f"Gunakan command /{m.command[0]} [link] untuk mengecek subtitle dan audio didalam video.")
f"Gunakan command /{m.command[0]} [link] untuk mengecek subtitle dan audio didalam video."
)
link = cmd[1] link = cmd[1]
start_time = perf_counter() start_time = perf_counter()
pesan = await m.reply("Sedang memproses perintah..", quote=True) pesan = await m.reply("Sedang memproses perintah..", quote=True)
try: try:
res = ( res = (await shell_exec(f"ffprobe -loglevel 0 -print_format json -show_format -show_streams {link}"))[0]
await shell_exec(
f"ffprobe -loglevel 0 -print_format json -show_format -show_streams {link}"
)
)[0]
details = json.loads(res) details = json.loads(res)
buttons = [] buttons = []
for stream in details["streams"]: for stream in details["streams"]:
@ -108,32 +102,19 @@ async def ceksub(_, m):
) )
except Exception: except Exception:
traceback.format_exc() traceback.format_exc()
await pesan.edit( await pesan.edit("Failed extract media, make sure your link is not protected by WAF or maybe inaccessible for bot.")
f"Failed extract media, make sure your link is not protected by WAF or maybe inaccessible for bot."
)
@app.on_message(filters.command(["converttosrt"], COMMAND_HANDLER)) @app.on_message(filters.command(["converttosrt"], COMMAND_HANDLER))
@capture_err @capture_err
async def convertsrt(c, m): async def convertsrt(c, m):
reply = m.reply_to_message reply = m.reply_to_message
if ( if not reply and reply.document and (reply.document.file_name.endswith(".vtt") or reply.document.file_name.endswith(".ass")):
not reply return await m.reply(f"Use command /{m.command[0]} by reply to .ass or .vtt file, to convert subtitle from .ass or .vtt to srt.")
and reply.document
and (
reply.document.file_name.endswith(".vtt")
or reply.document.file_name.endswith(".ass")
)
):
return await m.reply(
f"Use command /{m.command[0]} by reply to .ass or .vtt file, to convert subtitle from .ass or .vtt to srt."
)
msg = await m.reply("⏳ Converting...") msg = await m.reply("⏳ Converting...")
dl = await reply.download() dl = await reply.download()
filename = dl.split("/", 3)[3] filename = dl.split("/", 3)[3]
LOGGER.info( LOGGER.info(f"ConvertSub: {filename} by {m.from_user.first_name} [{m.from_user.id}]")
f"ConvertSub: {filename} by {m.from_user.first_name} [{m.from_user.id}]"
)
(await shell_exec(f"mediaextract -i '{dl}' '{filename}.srt'"))[0] (await shell_exec(f"mediaextract -i '{dl}' '{filename}.srt'"))[0]
c_time = time() c_time = time()
await m.reply_document( await m.reply_document(
@ -173,12 +154,8 @@ async def stream_extract(bot, update):
format = "srt" format = "srt"
start_time = perf_counter() start_time = perf_counter()
namafile = get_subname(lang, link, format) namafile = get_subname(lang, link, format)
LOGGER.info( LOGGER.info(f"ExtractSub: {namafile} by {update.from_user.first_name} [{update.from_user.id}]")
f"ExtractSub: {namafile} by {update.from_user.first_name} [{update.from_user.id}]" extract = (await shell_exec(f"mediaextract -i {link} -map {map} '{namafile}'"))[0]
)
extract = (await shell_exec(f"mediaextract -i {link} -map {map} '{namafile}'"))[
0
]
end_time = perf_counter() end_time = perf_counter()
timelog = "{:.2f}".format(end_time - start_time) + " second" timelog = "{:.2f}".format(end_time - start_time) + " second"
c_time = time() c_time = time()
@ -195,6 +172,4 @@ async def stream_extract(bot, update):
except: except:
pass pass
except Exception as e: except Exception as e:
await update.message.edit( await update.message.edit(f"Failed extract sub, Maybe unsupported format..\n\nLink: {link}\nERR: {e}")
f"Failed extract sub, Maybe unsupported format..\n\nLink: {link}\nERR: {e}"
)

View file

@ -41,22 +41,12 @@ async def add_keep(_, message: Message):
# @user.on_deleted_messages(filters.chat([-1001455886928, -1001255283935])) # @user.on_deleted_messages(filters.chat([-1001455886928, -1001255283935]))
async def del_msg(client, message): async def del_msg(client, message):
async for a in user.get_chat_event_log( async for a in user.get_chat_event_log(message[0].chat.id, limit=1, filters=ChatEventFilter(deleted_messages=True)):
message[0].chat.id, limit=1, filters=ChatEventFilter(deleted_messages=True)
):
try: try:
ustat = ( ustat = (await user.get_chat_member(message[0].chat.id, a.deleted_message.from_user.id)).status
await user.get_chat_member(
message[0].chat.id, a.deleted_message.from_user.id
)
).status
except: except:
ustat = enums.ChatMemberStatus.MEMBER ustat = enums.ChatMemberStatus.MEMBER
if ( if ustat in [enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER] or a.deleted_message.from_user.is_bot:
ustat
in [enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER]
or a.deleted_message.from_user.is_bot
):
return return
if a.user.id == a.deleted_message.from_user.id: if a.user.id == a.deleted_message.from_user.id:
if a.deleted_message.text: if a.deleted_message.text:
@ -74,9 +64,7 @@ async def del_msg(client, message):
# @user.on_edited_message(filters.text & filters.chat(-1001455886928)) # @user.on_edited_message(filters.text & filters.chat(-1001455886928))
async def edit_msg(client, message): async def edit_msg(client, message):
try: try:
ustat = ( ustat = (await user.get_chat_member(message.chat.id, message.from_user.id)).status
await user.get_chat_member(message.chat.id, message.from_user.id)
).status
except: except:
ustat = enums.ChatMemberStatus.MEMBER ustat = enums.ChatMemberStatus.MEMBER
if message.from_user.is_bot or ustat in [ if message.from_user.is_bot or ustat in [
@ -84,12 +72,8 @@ async def edit_msg(client, message):
enums.ChatMemberStatus.OWNER, enums.ChatMemberStatus.OWNER,
]: ]:
return return
async for a in user.get_chat_event_log( async for a in user.get_chat_event_log(message.chat.id, limit=1, filters=ChatEventFilter(edited_messages=True)):
message.chat.id, limit=1, filters=ChatEventFilter(edited_messages=True) if a.old_message.text.startswith(("/mirror", "/leech", "/unzipmirror", "/unzipleech")):
):
if a.old_message.text.startswith(
("/mirror", "/leech", "/unzipmirror", "/unzipleech")
):
await app.send_message( await app.send_message(
message.chat.id, 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}", 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}",
@ -141,10 +125,7 @@ async def join_date(app, message: Message):
with open("joined_date.txt", "w", encoding="utf8") as f: with open("joined_date.txt", "w", encoding="utf8") as f:
f.write("Join Date First Name\n") f.write("Join Date First Name\n")
for member in members: for member in members:
f.write( f.write(str(datetime.fromtimestamp(member[1]).strftime("%y-%m-%d %H:%M")) + f" {member[0]}\n")
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") await user.send_document(message.chat.id, "joined_date.txt")
os.remove("joined_date.txt") os.remove("joined_date.txt")
@ -171,9 +152,7 @@ async def recent_act(client, message):
limit=0, limit=0,
) )
) )
with open( with open(f"recent_actions_{message.chat.id}.txt", "w", encoding="utf8") as log_file:
f"recent_actions_{message.chat.id}.txt", "w", encoding="utf8"
) as log_file:
log_file.write(str(full_log)) log_file.write(str(full_log))
await message.reply_document(f"recent_actions_{message.chat.id}.txt") await message.reply_document(f"recent_actions_{message.chat.id}.txt")

View file

@ -22,11 +22,7 @@ __HELP__ = """
async def take_ss(_, message): async def take_ss(_, message):
if len(message.command) == 1: if len(message.command) == 1:
return await message.reply("Give A Url To Fetch Screenshot.") return await message.reply("Give A Url To Fetch Screenshot.")
url = ( url = message.command[1] if message.command[1].startswith("http") else f"https://{message.command[1]}"
message.command[1]
if message.command[1].startswith("http")
else f"https://{message.command[1]}"
)
filename = f"imageToSave_{message.from_user.id}.png" filename = f"imageToSave_{message.from_user.id}.png"
m = await message.reply("Capturing screenshot...") m = await message.reply("Capturing screenshot...")
try: try:

View file

@ -17,9 +17,7 @@ from misskaty.helper.http import http
from misskaty.vars import COMMAND_HANDLER, LOG_CHANNEL from misskaty.vars import COMMAND_HANDLER, LOG_CHANNEL
LOGGER = getLogger(__name__) LOGGER = getLogger(__name__)
regex = recompile( regex = recompile(r"(https?://)?(www\.)?(youtube|youtu|youtube-nocookie)\.(com|be)/(watch\?v=|embed/|v/|.+\?v=)?(?P<id>[A-Za-z0-9\-=_]{11})")
r"(https?://)?(www\.)?(youtube|youtu|youtube-nocookie)\.(com|be)/(watch\?v=|embed/|v/|.+\?v=)?(?P<id>[A-Za-z0-9\-=_]{11})"
)
YT_DB = {} YT_DB = {}
@ -67,9 +65,7 @@ async def ytdownv2(_, message):
if len(message.command) == 1: if len(message.command) == 1:
return await message.reply("Please input a valid YT-DLP Supported URL") return await message.reply("Please input a valid YT-DLP Supported URL")
url = message.text.split(" ", maxsplit=1)[1] url = message.text.split(" ", maxsplit=1)[1]
async with iYTDL( async with iYTDL(log_group_id=0, cache_path="cache", ffmpeg_location="/usr/bin/mediaextract") as ytdl:
log_group_id=0, cache_path="cache", ffmpeg_location="/usr/bin/mediaextract"
) as ytdl:
x = await ytdl.parse(url) x = await ytdl.parse(url)
if x is None: if x is None:
return await message.reply("Failed parse URL, check logs..") return await message.reply("Failed parse URL, check logs..")
@ -84,13 +80,9 @@ async def ytdl_listall_callback(_, cq: CallbackQuery):
if cq.from_user.id != cq.message.reply_to_message.from_user.id: if cq.from_user.id != cq.message.reply_to_message.from_user.id:
return await cq.answer("Not your task", True) return await cq.answer("Not your task", True)
callback = cq.data.split("|") callback = cq.data.split("|")
async with iYTDL( async with iYTDL(log_group_id=0, cache_path="cache", ffmpeg_location="/usr/bin/mediaextract") as ytdl:
log_group_id=0, cache_path="cache", ffmpeg_location="/usr/bin/mediaextract"
) as ytdl:
media, buttons = await ytdl.listview(callback[1]) media, buttons = await ytdl.listview(callback[1])
await cq.edit_message_media( await cq.edit_message_media(media=media, reply_markup=buttons.add(cq.from_user.id))
media=media, reply_markup=buttons.add(cq.from_user.id)
)
@app.on_callback_query(filters.regex(r"^yt_extract_info")) @app.on_callback_query(filters.regex(r"^yt_extract_info"))
@ -99,9 +91,7 @@ async def ytdl_extractinfo_callback(_, cq: CallbackQuery):
return await cq.answer("Not your task", True) return await cq.answer("Not your task", True)
await cq.answer("Please Wait...") await cq.answer("Please Wait...")
callback = cq.data.split("|") callback = cq.data.split("|")
async with iYTDL( async with iYTDL(log_group_id=0, cache_path="cache", ffmpeg_location="/usr/bin/mediaextract") as ytdl:
log_group_id=0, cache_path="cache", ffmpeg_location="/usr/bin/mediaextract"
) as ytdl:
if data := await ytdl.extract_info_from_key(callback[1]): if data := await ytdl.extract_info_from_key(callback[1]):
if len(key) == 11: if len(key) == 11:
await cq.edit_message_text( await cq.edit_message_text(
@ -127,36 +117,25 @@ async def ytdl_gendl_callback(_, cq: CallbackQuery):
callback = cq.data.split("|") callback = cq.data.split("|")
key = callback[1] key = callback[1]
if callback[0] == "yt_gen": if callback[0] == "yt_gen":
if ( if match := regex.match(cq.message.reply_to_message.command[1]) or len(callback) == 2:
match := regex.match(cq.message.reply_to_message.command[1])
or len(callback) == 2
):
x = await main.Extractor().get_download_button(key) x = await main.Extractor().get_download_button(key)
await cq.edit_message_caption(caption=x.caption, reply_markup=x.buttons) await cq.edit_message_caption(caption=x.caption, reply_markup=x.buttons)
else: else:
uid = callback[2] uid = callback[2]
type_ = callback[3] type_ = callback[3]
if type_ == "a": format_ = "audio" if type_ == "a" else "video"
format_ = "audio"
else:
format_ = "video"
async with iYTDL( async with iYTDL(
log_group_id=LOG_CHANNEL, log_group_id=LOG_CHANNEL,
cache_path="cache", cache_path="cache",
ffmpeg_location="/usr/bin/mediaextract", ffmpeg_location="/usr/bin/mediaextract",
delete_media=True, delete_media=True,
) as ytdl: ) as ytdl:
upload_key = await ytdl.download( upload_key = await ytdl.download(cq.message.reply_to_message.command[1], uid, format_, cq, True, 3)
cq.message.reply_to_message.command[1], uid, format_, cq, True, 3
)
await ytdl.upload(app, upload_key, format_, cq, True) await ytdl.upload(app, upload_key, format_, cq, True)
else: else:
uid = callback[2] uid = callback[2]
type_ = callback[3] type_ = callback[3]
if type_ == "a": format_ = "audio" if type_ == "a" else "video"
format_ = "audio"
else:
format_ = "video"
async with iYTDL( async with iYTDL(
log_group_id=LOG_CHANNEL, log_group_id=LOG_CHANNEL,
cache_path="cache", cache_path="cache",
@ -164,7 +143,12 @@ async def ytdl_gendl_callback(_, cq: CallbackQuery):
delete_media=True, delete_media=True,
) as ytdl: ) as ytdl:
upload_key = await ytdl.download( upload_key = await ytdl.download(
"https://www.youtube.com/watch?v=" + key, uid, format_, cq, True, 3 f"https://www.youtube.com/watch?v={key}",
uid,
format_,
cq,
True,
3,
) )
await ytdl.upload(app, upload_key, format_, cq, True) await ytdl.upload(app, upload_key, format_, cq, True)
@ -186,9 +170,7 @@ async def ytdl_scroll_callback(_, cq: CallbackQuery):
out += f"\n<b> Uploader:</b> <a href={i['channel']['link']}>{i['channel']['name']}</a>\n\n" out += f"\n<b> Uploader:</b> <a href={i['channel']['link']}>{i['channel']['name']}</a>\n\n"
scroll_btn = [ scroll_btn = [
[ [
InlineKeyboardButton( InlineKeyboardButton("Back", callback_data=f"ytdl_scroll|{search_key}|{page-1}"),
f"Back", callback_data=f"ytdl_scroll|{search_key}|{page-1}"
),
InlineKeyboardButton( InlineKeyboardButton(
f"{page+1}/{len(search['result'])}", f"{page+1}/{len(search['result'])}",
callback_data=f"ytdl_scroll|{search_key}|{page+1}", callback_data=f"ytdl_scroll|{search_key}|{page+1}",
@ -203,9 +185,7 @@ async def ytdl_scroll_callback(_, cq: CallbackQuery):
scroll_btn = [[scroll_btn.pop().pop(0)]] scroll_btn = [[scroll_btn.pop().pop(0)]]
btn = [[InlineKeyboardButton("Download", callback_data=f"yt_gen|{i['id']}")]] btn = [[InlineKeyboardButton("Download", callback_data=f"yt_gen|{i['id']}")]]
btn = InlineKeyboardMarkup(scroll_btn + btn) btn = InlineKeyboardMarkup(scroll_btn + btn)
await cq.edit_message_media( await cq.edit_message_media(InputMediaPhoto(await get_ytthumb(i["id"]), caption=out), reply_markup=btn)
InputMediaPhoto(await get_ytthumb(i["id"]), caption=out), reply_markup=btn
)
async def get_ytthumb(videoid: str): async def get_ytthumb(videoid: str):

View file

@ -54,13 +54,9 @@ FORWARD_FROM_CHAT_ID = list(
} }
) )
# Forward To Chat ID # Forward To Chat ID
FORWARD_TO_CHAT_ID = list( FORWARD_TO_CHAT_ID = list({int(x) for x in environ.get("FORWARD_TO_CHAT_ID", "-1001210537567").split()})
{int(x) for x in environ.get("FORWARD_TO_CHAT_ID", "-1001210537567").split()}
)
FORWARD_FILTERS = list(set(environ.get("FORWARD_FILTERS", "video document").split())) FORWARD_FILTERS = list(set(environ.get("FORWARD_FILTERS", "video document").split()))
BLOCK_FILES_WITHOUT_EXTENSIONS = bool( BLOCK_FILES_WITHOUT_EXTENSIONS = bool(environ.get("BLOCK_FILES_WITHOUT_EXTENSIONS", True))
environ.get("BLOCK_FILES_WITHOUT_EXTENSIONS", True)
)
BLOCKED_EXTENSIONS = list( BLOCKED_EXTENSIONS = list(
set( set(
environ.get( environ.get(