mirror of
https://github.com/yasirarism/MissKatyPyro.git
synced 2026-01-04 19:24:51 +00:00
Temp fix
This commit is contained in:
parent
97dab5dc4a
commit
12b7eb0d43
7 changed files with 214 additions and 86 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
0
misskaty/core/message_utils.py
Normal file
0
misskaty/core/message_utils.py
Normal 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
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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>")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue