This commit is contained in:
yasir 2023-01-01 20:57:47 +07:00
parent 97dab5dc4a
commit 12b7eb0d43
7 changed files with 214 additions and 86 deletions

View file

@ -1,6 +1,7 @@
import traceback, asyncio import traceback, asyncio
from functools import wraps from functools import wraps
from pyrogram.errors.exceptions.forbidden_403 import ChatWriteForbidden from pyrogram.errors.exceptions.forbidden_403 import ChatWriteForbidden
from pyrogram.errors.exceptions.flood_420 import FloodWait
from misskaty.vars import LOG_CHANNEL from misskaty.vars import LOG_CHANNEL
from misskaty import app from misskaty import app
@ -52,8 +53,11 @@ def capture_err(func):
) )
for x in error_feedback: for x in error_feedback:
await app.send_message(LOG_CHANNEL, x) try:
await message.reply(x) await app.send_message(LOG_CHANNEL, x)
await message.reply(x)
except FloodWait as e:
await asyncio.sleep(x.value)
raise err raise err
return capture return capture

View file

View file

@ -57,36 +57,44 @@ __HELP__ = """
@app.on_chat_member_updated() @app.on_chat_member_updated()
async def admin_cache_func(_, cmu): async def admin_cache_func(_, cmu):
if cmu.old_chat_member and cmu.old_chat_member.promoted_by: if cmu.old_chat_member and cmu.old_chat_member.promoted_by:
admins_in_chat[cmu.chat.id] = { try:
"last_updated_at": time(), admins_in_chat[cmu.chat.id] = {
"data": [member.user.id async for member in app.get_chat_members(cmu.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS)], "last_updated_at": time(),
} "data": [
LOGGER.info(f"Updated admin cache for {cmu.chat.id} [{cmu.chat.title}]") 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}]")
except:
pass
# Purge CMD # Purge CMD
@app.on_message(filters.command("purge", COMMAND_HANDLER) & ~filters.private) @app.on_message(filters.command("purge", COMMAND_HANDLER) & ~filters.private)
@adminsOnly("can_delete_messages") @adminsOnly("can_delete_messages")
async def purge(_, message): async def purge(_, message):
repliedmsg = message.reply_to_message
await message.delete()
if not repliedmsg:
return await message.reply_text("Reply to a message to purge from.")
cmd = message.command
if len(cmd) > 1 and cmd[1].isdigit():
purge_to = repliedmsg.id + int(cmd[1])
if purge_to > message.id:
purge_to = message.id
else:
purge_to = message.id
chat_id = message.chat.id
message_ids = []
del_total = 0
try: try:
repliedmsg = message.reply_to_message
await message.delete()
if not repliedmsg:
return await message.reply_text("Reply to a message to purge from.")
cmd = message.command
if len(cmd) > 1 and cmd[1].isdigit():
purge_to = repliedmsg.id + int(cmd[1])
if purge_to > message.id:
purge_to = message.id
else:
purge_to = message.id
chat_id = message.chat.id
message_ids = []
del_total = 0
for message_id in range( for message_id in range(
repliedmsg.id, repliedmsg.id,
purge_to, purge_to,
@ -120,11 +128,11 @@ async def purge(_, message):
# Kick members # Kick members
@app.on_message(filters.command(["kick", "dkick"], COMMAND_HANDLER) & ~filters.private) @app.on_message(filters.command(["kick", "dkick"], COMMAND_HANDLER) & ~filters.private)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def kickFunc(_, message): async def kickFunc(client, message):
user_id, reason = await extract_user_and_reason(message) user_id, reason = await extract_user_and_reason(message)
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")
if user_id == 1507530289: if user_id == client.me.id:
return await message.reply_text("I can't kick myself, i can leave if you want.") return await message.reply_text("I can't kick myself, i can leave if you want.")
if user_id in SUDO: if user_id in SUDO:
return await message.reply_text("Wow, you wanna kick my owner?") return await message.reply_text("Wow, you wanna kick my owner?")
@ -147,26 +155,37 @@ async def kickFunc(_, message):
# Ban/DBan/TBan User # Ban/DBan/TBan User
@app.on_message(filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & ~filters.private) @app.on_message(
filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & ~filters.private
)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def banFunc(_, 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)
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")
if user_id == 1507530289: if user_id == client.me.id:
return await message.reply_text("I can't ban myself, i can leave if you want.") return await message.reply_text("I can't ban myself, i can leave if you want.")
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("I can't ban an admin, You know the rules, so do i.") return await message.reply_text(
"I can't ban an admin, You know the rules, so do i."
)
try: try:
mention = (await app.get_users(user_id)).mention mention = (await app.get_users(user_id)).mention
except IndexError: except IndexError:
mention = message.reply_to_message.sender_chat.title if message.reply_to_message else "Anon" mention = (
message.reply_to_message.sender_chat.title
if message.reply_to_message
else "Anon"
)
msg = f"**Banned User:** {mention}\n" f"**Banned By:** {message.from_user.mention if message.from_user else 'Anon'}\n" msg = (
f"**Banned User:** {mention}\n"
f"**Banned By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
)
if message.command[0][0] == "d": 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":
@ -189,8 +208,11 @@ async def banFunc(_, message):
if reason: if reason:
msg += f"**Reason:** {reason}" msg += f"**Reason:** {reason}"
keyboard = ikb({"🚨 Unban 🚨": f"unban_{user_id}"}) keyboard = ikb({"🚨 Unban 🚨": f"unban_{user_id}"})
await message.chat.ban_member(user_id) try:
await message.reply_text(msg, reply_markup=keyboard) await message.chat.ban_member(user_id)
await message.reply_text(msg, reply_markup=keyboard)
except Exception as err:
await message.reply(f"ERROR: {err}")
# Unban members # Unban members
@ -211,34 +233,44 @@ 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("Provide a username or reply to a user's message to unban.") return await message.reply_text(
"Provide a username or reply to a user's message to unban."
)
await message.chat.unban_member(user) 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(filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & ~filters.private) @app.on_message(
filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & ~filters.private
)
async def list_ban_(c, message): 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("Provide a userid/username along with message link and reason to list-ban") return await message.reply_text(
"Provide a userid/username along with message link and reason to list-ban"
)
if len(msglink_reason.split(" ")) == 1: # message link included with the reason 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(r"(https?://)?t(elegram)?\.me/\w+/\d+", messagelink): # validate link if not re.search(
r"(https?://)?t(elegram)?\.me/\w+/\d+", messagelink
): # validate link
return await message.reply_text("Invalid message link provided") return await message.reply_text("Invalid message link provided")
if userid == 1507530289: if userid == c.me.id:
return await message.reply_text("I can't ban myself.") return await message.reply_text("I can't ban myself.")
if userid in SUDO: if userid 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!")
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("`Banning User from multiple groups. This may take some time`") m = await message.reply_text(
"`Banning User from multiple groups. This may take some time`"
)
try: try:
msgtext = (await app.get_messages(uname, mid)).text msgtext = (await app.get_messages(uname, mid)).text
gusernames = re.findall("@\w+", msgtext) gusernames = re.findall("@\w+", msgtext)
@ -267,11 +299,17 @@ async def list_ban_(c, message):
# Unban users listed in a message # Unban users listed in a message
@app.on_message(filters.user(SUDO) & filters.command("listunban", COMMAND_HANDLER) & ~filters.private) @app.on_message(
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("Provide a userid/username along with message link to list-unban") return await message.reply_text(
"Provide a userid/username along with message link to list-unban"
)
if not re.search(r"(https?://)?t(elegram)?\.me/\w+/\d+", msglink): # validate link 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")
@ -313,22 +351,27 @@ async def list_unban_(c, message):
async def deleteFunc(_, message): async def deleteFunc(_, message):
if not message.reply_to_message: if not message.reply_to_message:
return await message.reply_text("Reply To A Message To Delete It") return await message.reply_text("Reply To A Message To Delete It")
await message.reply_to_message.delete() try:
await message.delete() await message.reply_to_message.delete()
await message.delete()
except:
await message.reply("Please give me delete message permission.")
# Promote Members # Promote Members
@app.on_message(filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & ~filters.private) @app.on_message(
filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & ~filters.private
)
@adminsOnly("can_promote_members") @adminsOnly("can_promote_members")
async def promoteFunc(_, message): async def promoteFunc(_, message):
user_id = await extract_user(message) user_id = await extract_user(message)
umention = (await app.get_users(user_id)).mention umention = (await app.get_users(user_id)).mention
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")
bot = await app.get_chat_member(message.chat.id, 1507530289) bot = await app.get_chat_member(message.chat.id, client.me.id)
if user_id == 1507530289: if user_id == client.me.id:
return await message.reply_text("I can't promote myself.") return await message.reply_text("I can't promote myself.")
if not bot.can_promote_members: if not bot.privileges.can_promote_members:
return await message.reply_text("I don't have enough permissions") return await message.reply_text("I don't have enough permissions")
if message.command[0][0] == "f": if message.command[0][0] == "f":
await message.chat.promote_member( await message.chat.promote_member(
@ -361,11 +404,11 @@ async def promoteFunc(_, message):
# Demote Member # Demote Member
@app.on_message(filters.command("demote", COMMAND_HANDLER) & ~filters.private) @app.on_message(filters.command("demote", COMMAND_HANDLER) & ~filters.private)
@adminsOnly("can_promote_members") @adminsOnly("can_promote_members")
async def demote(_, message): async def demote(client, message):
user_id = await extract_user(message) user_id = await extract_user(message)
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")
if user_id == 1507530289: if user_id == client.me.id:
return await message.reply_text("I can't demote myself.") return await message.reply_text("I can't demote myself.")
if user_id in SUDO: if user_id in SUDO:
return await message.reply_text("You wanna demote the elevated one?") return await message.reply_text("You wanna demote the elevated one?")
@ -413,19 +456,27 @@ async def pin(_, message):
# Mute members # Mute members
@app.on_message(filters.command(["mute", "tmute"], COMMAND_HANDLER) & ~filters.private) @app.on_message(filters.command(["mute", "tmute"], COMMAND_HANDLER) & ~filters.private)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def mute(_, message): async def mute(client, message):
user_id, reason = await extract_user_and_reason(message) try:
user_id, reason = await extract_user_and_reason(message)
except Exception as err:
return await message.reply(f"ERROR: {err}")
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")
if user_id == 1507530289: if user_id == client.me.id:
return await message.reply_text("I can't mute myself.") return await message.reply_text("I can't mute myself.")
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("I can't mute an admin, You know the rules, so do i.") return await message.reply_text(
"I can't mute an admin, You know the rules, so do i."
)
mention = (await app.get_users(user_id)).mention mention = (await app.get_users(user_id)).mention
keyboard = ikb({"🚨 Unmute 🚨": f"unmute_{user_id}"}) keyboard = ikb({"🚨 Unmute 🚨": f"unmute_{user_id}"})
msg = f"**Muted User:** {mention}\n" f"**Muted By:** {message.from_user.mention if message.from_user else 'Anon'}\n" msg = (
f"**Muted User:** {mention}\n"
f"**Muted By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
)
if message.command[0] == "tmute": if message.command[0] == "tmute":
split = reason.split(None, 1) split = reason.split(None, 1)
time_value = split[0] time_value = split[0]
@ -491,17 +542,19 @@ async def ban_deleted_accounts(_, message):
@app.on_message(filters.command(["warn", "dwarn"], COMMAND_HANDLER) & ~filters.private) @app.on_message(filters.command(["warn", "dwarn"], COMMAND_HANDLER) & ~filters.private)
@adminsOnly("can_restrict_members") @adminsOnly("can_restrict_members")
async def warn_user(_, message): async def warn_user(client, message):
user_id, reason = await extract_user_and_reason(message) user_id, reason = await extract_user_and_reason(message)
chat_id = message.chat.id chat_id = message.chat.id
if not user_id: if not user_id:
return await message.reply_text("I can't find that user.") return await message.reply_text("I can't find that user.")
if user_id == 1507530289: if user_id == client.me.id:
return await message.reply_text("I can't warn myself, i can leave if you want.") return await message.reply_text("I can't warn myself, i can leave if you want.")
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("I can't warn an admin, You know the rules, so do i.") return await message.reply_text(
"I can't warn an admin, You know the rules, so do i."
)
user, warns = await asyncio.gather( 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)),
@ -534,7 +587,8 @@ 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" + f"Permission needed: {permission}", "You don't have enough permissions to perform this action.\n"
+ f"Permission needed: {permission}",
show_alert=True, show_alert=True,
) )
user_id = cq.data.split("_")[1] user_id = cq.data.split("_")[1]
@ -559,7 +613,8 @@ 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" + f"Permission needed: {permission}", "You don't have enough permissions to perform this action.\n"
+ f"Permission needed: {permission}",
show_alert=True, show_alert=True,
) )
user_id = cq.data.split("_")[1] user_id = cq.data.split("_")[1]
@ -578,7 +633,8 @@ 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" + f"Permission needed: {permission}", "You don't have enough permissions to perform this action.\n"
+ f"Permission needed: {permission}",
show_alert=True, show_alert=True,
) )
user_id = cq.data.split("_")[1] user_id = cq.data.split("_")[1]
@ -595,7 +651,9 @@ 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("Reply to a message to remove a user's warnings.") return await message.reply_text(
"Reply to a message to remove a user's warnings."
)
user_id = message.reply_to_message.from_user.id user_id = message.reply_to_message.from_user.id
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
@ -626,7 +684,13 @@ async def check_warns(_, message):
# Report User in Group # Report User in Group
@app.on_message((filters.command("report", COMMAND_HANDLER) | filters.command(["admins", "admin"], prefixes="@")) & ~filters.private) @app.on_message(
(
filters.command("report", COMMAND_HANDLER)
| filters.command(["admins", "admin"], prefixes="@")
)
& ~filters.private
)
@capture_err @capture_err
async def report_user(_, message): async def report_user(_, message):
if not message.reply_to_message: if not message.reply_to_message:
@ -641,13 +705,28 @@ 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("Do you know that the user you are replying is an admin ?") return await message.reply_text(
"Do you know that the user you are replying is an admin ?"
)
elif reply_id in list_of_admins or reply_id == message.chat.id or reply_id == linked_chat.id: elif (
return await message.reply_text("Do you know that the user you are replying is an admin ?") reply_id in list_of_admins
user_mention = reply.from_user.mention if reply.from_user else reply.sender_chat.title or reply_id == message.chat.id
or reply_id == linked_chat.id
):
return await message.reply_text(
"Do you know that the user you are replying is an admin ?"
)
user_mention = (
reply.from_user.mention if reply.from_user else reply.sender_chat.title
)
text = f"Reported {user_mention} to admins!" text = f"Reported {user_mention} to admins!"
admin_data = [m async for m in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS)] admin_data = [
m
async for m in app.get_chat_members(
message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS
)
]
for admin in admin_data: 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

@ -30,7 +30,19 @@ __HELP__ = """"
@app.on_message(filters.command(["genss"], COMMAND_HANDLER)) @app.on_message(filters.command(["genss"], COMMAND_HANDLER))
@capture_err @capture_err
async def genss(client, message): async def genss(client, message):
if message.reply_to_message is not None: replied = message.reply_to_message
if replied is not None:
media = None
if replied is not None:
vid = [replied.video, replied.document]
for v in vid:
if v is not None:
media = v
break
if media is None:
return await message.reply(
"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(
@ -52,12 +64,16 @@ 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(chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO) await client.send_chat_action(
chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO
)
try: try:
await gather( await gather(
*[ *[
message.reply_document(images, reply_to_message_id=message.id), message.reply_document(
images, reply_to_message_id=message.id
),
message.reply_photo(images, reply_to_message_id=message.id), message.reply_photo(images, reply_to_message_id=message.id),
] ]
) )
@ -65,7 +81,9 @@ async def genss(client, message):
await sleep(e.value) await sleep(e.value)
await gather( await gather(
*[ *[
message.reply_document(images, reply_to_message_id=message.id), message.reply_document(
images, reply_to_message_id=message.id
),
message.reply_photo(images, reply_to_message_id=message.id), message.reply_photo(images, reply_to_message_id=message.id),
] ]
) )
@ -88,7 +106,7 @@ async def genss(client, message):
except: except:
pass pass
else: else:
await message.reply("Reply to a Telegram media to get screenshots..") await message.reply("Reply to a Telegram media to get screenshots from media..")
@app.on_message(filters.command(["genss_link"], COMMAND_HANDLER)) @app.on_message(filters.command(["genss_link"], COMMAND_HANDLER))
@ -97,9 +115,13 @@ 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("https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev") link = link.replace(
"https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev"
)
if link.startswith("https://link.yasirweb.my.id"): if link.startswith("https://link.yasirweb.my.id"):
link = link.replace("https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com") link = link.replace(
"https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com"
)
process = await message.reply_text("`Processing, please wait..`") 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):
@ -111,7 +133,9 @@ 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(chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO) await client.send_chat_action(
chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO
)
try: 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

@ -234,7 +234,7 @@ async def save_group(bot, message):
photo=welcomeimg, photo=welcomeimg,
caption=f"Hai {u.mention}, Selamat datang digrup {message.chat.title}.", caption=f"Hai {u.mention}, Selamat datang digrup {message.chat.title}.",
) )
except (ChatSendMediaForbidden, SlowmodeWait, TopicClosed): except (ChatSendMediaForbidden, SlowmodeWait):
await app.leave_chat(message.chat.id) await app.leave_chat(message.chat.id)
try: try:
os.remove(f"downloads/welcome#{u.id}.png") os.remove(f"downloads/welcome#{u.id}.png")

View file

@ -8,9 +8,11 @@
import io import io
from os import remove as osremove from os import remove as osremove
import time import time
import asyncio
import subprocess import subprocess
from pyrogram import filters from pyrogram import filters
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from pyrogram.errors import FloodWait
from misskaty.vars import COMMAND_HANDLER from misskaty.vars import COMMAND_HANDLER
from utils import get_file_id from utils import get_file_id
from misskaty import app from misskaty import app
@ -51,7 +53,10 @@ async def mediainfo(client, message):
text_ = file_info.message_type text_ = file_info.message_type
link = post_to_telegraph(title, body_text) link = post_to_telegraph(title, body_text)
markup = InlineKeyboardMarkup([[InlineKeyboardButton(text=text_, url=link)]]) markup = InlineKeyboardMarkup([[InlineKeyboardButton(text=text_, url=link)]])
await message.reply(" **MEDIA INFO**", reply_markup=markup, quote=True) try:
await message.reply(" **MEDIA INFO**", reply_markup=markup, quote=True)
except FloodWait as f:
await asyncio.sleep(f.value)
await process.delete() await process.delete()
try: try:
osremove(file_path) osremove(file_path)
@ -60,10 +65,6 @@ async def mediainfo(client, message):
else: else:
try: try:
link = message.text.split(" ", maxsplit=1)[1] link = message.text.split(" ", maxsplit=1)[1]
if link.startswith("https://file.yasirweb.my.id"):
link = link.replace("https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev")
if link.startswith("https://link.yasirweb.my.id"):
link = link.replace("https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com")
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("utf-8") output = subprocess.check_output(["mediainfo", f"{link}"]).decode("utf-8")

View file

@ -188,7 +188,7 @@ async def tts(_, message):
else: else:
if len(message.text.split()) <= 2: if len(message.text.split()) <= 2:
await message.reply_text( await message.reply_text(
"Berikan Kode bahasa yang valid.\n[Available options](https://telegra.ph/Lang-Codes-11-08).\n<b>Usage:</b> <code>/tts en <text></code>", "Berikan Kode bahasa yang valid.\n[Available options](https://telegra.ph/Lang-Codes-11-08).\n*Usage:* /tts en [text]",
) )
return return
target_lang = message.text.split(None, 2)[1] target_lang = message.text.split(None, 2)[1]
@ -515,7 +515,18 @@ async def imdb1_search(client, message):
@app.on_callback_query(filters.regex("^imdbid")) @app.on_callback_query(filters.regex("^imdbid"))
async def imdbcb_backup(bot: Client, query: CallbackQuery): async def imdbcb_backup(bot: Client, query: CallbackQuery):
i, userid, movie = query.data.split("#") # ValueError: not enough values to unpack (expected 3, got 2)
# Idk how to reproduce it, so wait people report to me
try:
i, userid, movie = query.data.split("#")
except:
LOGGER.error(
f"ERROR IMDB Callback: {query.data} - {query.from_user.first_name} [{query.from_user.id}]"
)
return await query.answer(
"⚠️ Invalid callback query, silahkan laporkan ke pemilik bot atau buka issue baru di repository MissKaty dengan alasan yang jelas.",
True,
)
if query.from_user.id != int(userid): if query.from_user.id != int(userid):
return await query.answer("⚠️ Akses Ditolak!", True) return await query.answer("⚠️ Akses Ditolak!", True)
try: try:
@ -749,7 +760,16 @@ async def imdb_en_search(client, message):
@app.on_callback_query(filters.regex("^imdben")) @app.on_callback_query(filters.regex("^imdben"))
@capture_err @capture_err
async def imdb_en_callback(bot: Client, query: CallbackQuery): async def imdb_en_callback(bot: Client, query: CallbackQuery):
i, userid, movie = query.data.split("#") try:
i, userid, movie = query.data.split("#")
except:
LOGGER.error(
f"ERROR IMDB Callback: {query.data} - {query.from_user.first_name} [{query.from_user.id}]"
)
return await query.answer(
"⚠️ Invalid callback query, please report to bot owner or open issue in MissKaty repository with relevant details.",
True,
)
if query.from_user.id != int(userid): if query.from_user.id != int(userid):
return await query.answer("⚠️ Access Denied!", True) return await query.answer("⚠️ Access Denied!", True)
await query.message.edit_caption("<i>⏳ Processing your request..</i>") await query.message.edit_caption("<i>⏳ Processing your request..</i>")