|
from pyrogram import * |
|
from pyrogram.types import * |
|
from akn.utils.database import db |
|
|
|
unmute_permissions = ChatPermissions( |
|
can_send_messages=True, |
|
can_send_media_messages=True, |
|
can_send_polls=True, |
|
can_change_info=False, |
|
can_invite_users=True, |
|
can_pin_messages=False, |
|
) |
|
|
|
async def extract_userid(message, text: str): |
|
def is_int(text: str): |
|
try: |
|
int(text) |
|
except ValueError: |
|
return False |
|
return True |
|
|
|
text = text.strip() |
|
|
|
if is_int(text): |
|
return int(text) |
|
|
|
entities = message.entities |
|
app = message._client |
|
if len(entities) < 2: |
|
return (await app.get_users(text)).id |
|
entity = entities[1] |
|
if entity.type == "mention": |
|
return (await app.get_users(text)).id |
|
if entity.type == "text_mention": |
|
return entity.user.id |
|
return None |
|
|
|
|
|
async def extract_user_and_reason(message, sender_chat=False): |
|
args = message.text.strip().split() |
|
text = message.text |
|
user = None |
|
reason = None |
|
if message.reply_to_message: |
|
reply = message.reply_to_message |
|
if not reply.from_user: |
|
if ( |
|
reply.sender_chat |
|
and reply.sender_chat != message.chat.id |
|
and sender_chat |
|
): |
|
id_ = reply.sender_chat.id |
|
else: |
|
return None, None |
|
else: |
|
id_ = reply.from_user.id |
|
|
|
if len(args) < 2: |
|
reason = None |
|
else: |
|
reason = text.split(None, 1)[1] |
|
return id_, reason |
|
|
|
if len(args) == 2: |
|
user = text.split(None, 1)[1] |
|
return await extract_userid(message, user), None |
|
|
|
if len(args) > 2: |
|
user, reason = text.split(None, 2)[1:] |
|
return await extract_userid(message, user), reason |
|
|
|
return user, reason |
|
|
|
|
|
async def extract_user(message): |
|
return (await extract_user_and_reason(message))[0] |
|
|
|
|
|
@Client.on_message( |
|
~filters.scheduled |
|
& filters.command(["ban", "dban"]) |
|
& ~filters.forwarded |
|
) |
|
async def arz_ban_user(client: Client, message: Message): |
|
user_id, reason = await extract_user_and_reason(message, sender_chat=True) |
|
bot = (await client.get_chat_member(message.chat.id, client.me.id)).privileges |
|
if not bot.can_restrict_members: |
|
return await message.edit_text("I don't have enough permissions") |
|
if not user_id: |
|
return await message.edit_text("I can't find that user.") |
|
if user_id == client.me.id: |
|
return await message.edit_text("I can't ban myself.") |
|
if user_id == 1191668125: |
|
return await message.edit_text("I can't ban my developer!") |
|
try: |
|
mention = (await client.get_users(user_id)).mention |
|
except IndexError: |
|
mention = ( |
|
message.reply_to_message.sender_chat.title |
|
if message.reply_to_message |
|
else "Anon" |
|
) |
|
msg = ( |
|
f"**Banned User:** <a href='tg://user?id={user_id}'>{mention}</a>\n" |
|
f"**Banned By:** [{message.from_user.mention}](tg://user?id={message.from_user.id if message.from_user else 0})\n" |
|
) |
|
if message.command[0][0] == "d": |
|
await message.reply_to_message.delete() |
|
if reason: |
|
msg += f"**Reason:** {reason}" |
|
await message.chat.ban_member(user_id) |
|
await message.reply_text( |
|
msg, |
|
reply_markup=InlineKeyboardMarkup( |
|
[ |
|
[ |
|
InlineKeyboardButton( |
|
"Unban", callback_data=f"arzunban_{user_id}" |
|
) |
|
] |
|
] |
|
) |
|
) |
|
|
|
@Client.on_message( |
|
~filters.scheduled |
|
& filters.command(["unban"]) |
|
& ~filters.forwarded |
|
) |
|
async def arz_unban_user(client: Client, message: Message): |
|
user_id, reason = await extract_user_and_reason(message, sender_chat=True) |
|
if not user_id: |
|
return await message.edit_text("I can't find that user.") |
|
if user_id == client.me.id: |
|
return await message.edit_text("I can't unban myself.") |
|
if user_id == 1191668125: |
|
return await message.edit_text("I can't unban my developer!") |
|
try: |
|
mention = (await client.get_users(user_id)).mention |
|
except IndexError: |
|
mention = ( |
|
message.reply_to_message.sender_chat.title |
|
if message.reply_to_message |
|
else "Anon" |
|
) |
|
msg = ( |
|
f"**Unbanned User:** <a href='tg://user?id={user_id}'>{mention}</a>\n" |
|
f"**Unbanned By:** [{message.from_user.mention}](tg://user?id={message.from_user.id if message.from_user else 0})\n" |
|
) |
|
if reason: |
|
msg += f"**Reason:** {reason}" |
|
await message.chat.unban_member(user_id) |
|
await message.reply_text(msg) |
|
|
|
@Client.on_message( |
|
~filters.scheduled |
|
& filters.command(["banme"]) |
|
& ~filters.forwarded |
|
) |
|
async def arz_ban_me(client: Client, message: Message): |
|
user_id = message.from_user.id |
|
reason = None |
|
if not user_id: |
|
return await message.edit_text("I can't find that user.") |
|
if user_id == client.me.id: |
|
return await message.edit_text("I can't ban myself.") |
|
if user_id == 1191668125: |
|
return await message.edit_text("I can't ban my developer!") |
|
try: |
|
mention = (await client.get_users(user_id)).mention |
|
except IndexError: |
|
mention = ( |
|
message.reply_to_message.sender_chat.title |
|
if message.reply_to_message |
|
else "Anon" |
|
) |
|
msg = ( |
|
f"**Banned User:** <a href='tg://user?id={user_id}'>{mention}</a>\n" |
|
f"**Banned By:** [{message.from_user.mention}](tg://user?id={message.from_user.id if message.from_user else 0})\n" |
|
) |
|
if reason: |
|
msg += f"**Reason:** {reason}" |
|
await message.chat.ban_member(user_id) |
|
await message.reply_text( |
|
msg, |
|
reply_markup=InlineKeyboardMarkup( |
|
[ |
|
[ |
|
InlineKeyboardButton( |
|
"Unban", callback_data=f"arzunban_{user_id}" |
|
) |
|
] |
|
] |
|
) |
|
) |
|
|
|
@Client.on_message( |
|
~filters.scheduled |
|
& filters.command(["mute", "dmute"]) |
|
& ~filters.forwarded |
|
) |
|
async def arz_mute(client: Client, message: Message): |
|
user_id, reason = await extract_user_and_reason(message, sender_chat=True) |
|
bot = (await client.get_chat_member(message.chat.id, client.me.id)).privileges |
|
if not bot.can_restrict_members: |
|
return await message.edit_text("I don't have enough permissions") |
|
if not user_id: |
|
return await message.edit_text("I can't find that user.") |
|
if user_id == client.me.id: |
|
return await message.edit_text("I can't mute myself.") |
|
if user_id == 1191668125: |
|
return await message.edit_text("I can't mute my developer!") |
|
try: |
|
mention = (await client.get_users(user_id)).mention |
|
except IndexError: |
|
mention = ( |
|
message.reply_to_message.sender_chat.title |
|
if message.reply_to_message |
|
else "Anon" |
|
) |
|
msg = ( |
|
f"**Muted User:** <a href='tg://user?id={user_id}'>{mention}</a>\n" |
|
f"**Muted By:** [{message.from_user.mention}](tg://user?id={message.from_user.id if message.from_user else 0})\n" |
|
) |
|
if message.command[0][0] == "d": |
|
await message.reply_to_message.delete() |
|
if reason: |
|
msg += f"**Reason:** {reason}" |
|
await message.chat.restrict_member(user_id, ChatPermissions()) |
|
await message.reply_text( |
|
msg, |
|
reply_markup=InlineKeyboardMarkup( |
|
[ |
|
[ |
|
InlineKeyboardButton( |
|
"Unmute", callback_data=f"arzunmute_{user_id}" |
|
) |
|
] |
|
] |
|
) |
|
) |