| |
|
| | from functools import wraps |
| |
|
| | from pyrogram import Client |
| | from pyrogram.types import Message |
| | from pyrogram.enums import ChatMemberStatus, ChatType |
| |
|
| | from Devine import app |
| |
|
| | from config import OWNER_ID, BOT_USERNAME |
| | from Devine.misc import SUDOERS |
| |
|
| | COMMANDERS = [ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER] |
| |
|
| | from typing import Tuple |
| |
|
| | async def user_has_permission(chat_title : str, chat_id: int, user_id: int, permission: str,bot=True) -> tuple[bool, str]: |
| | try: |
| | if user_id in SUDORES: |
| | have_permission = True |
| | else: |
| | chat_member = await app.get_chat_member(chat_id, user_id) |
| | chat_permissions = chat_member.privileges |
| | if permission == "can_delete_messages": |
| | have_permission = chat_permissions.can_delete_messages |
| | elif permission == "can_manage_chat": |
| | have_permission = chat_permissions.can_manage_chat |
| | elif permission == "can_manage_video_chats": |
| | have_permission = chat_permissions.can_manage_video_chats |
| | elif permission == "can_restrict_members": |
| | have_permission = chat_permissions.can_restrict_members |
| | elif permission == "can_promote_members": |
| | have_permission = chat_permissions.can_promote_members |
| | elif permission == "can_change_info": |
| | have_permission = chat_permissions.can_change_info |
| | elif permission == "can_post_messages": |
| | have_permission = chat_permissions.can_post_messages |
| | elif permission == "can_edit_messages": |
| | have_permission = chat_permissions.can_edit_messages |
| | elif permission == "can_invite_users": |
| | have_permission = chat_permissions.can_invite_users |
| | elif permission == "can_pin_messages": |
| | have_permission = chat_permissions.can_pin_messages |
| | else: |
| | have_permission = False |
| |
|
| | except Exception as e: |
| | print(e) |
| | have_permission = False |
| |
|
| | if not have_permission: |
| | if bot: |
| | txt = f"I Don't Have The Following Right:\n**[{permission}]**\nIn **{chat_title}**." |
| | else: |
| | txt = f"You Don't Have The Following Right:\n{permission}\nIn {chat_title}. So You Cant Perform This Action" |
| | return have_permission, txt |
| | else: |
| | return have_permission, None |
| |
|
| |
|
| | def bot_admin(func): |
| | @wraps(func) |
| | async def is_bot_admin(app : Client, message : Message,*args,**kwargs): |
| | chat_type = message.chat.type |
| | if chat_type == ChatType.PRIVATE: |
| | return await message.reply("Use This Command In Groups") |
| | BOT = await app.get_chat_member(message.chat.id,BOT_USERNAME) |
| | if BOT.status != ChatMemberStatus.ADMINISTRATOR: |
| | await message.reply_text(f"I Am Not Admin In **{message.chat.title}**") |
| | return |
| | return await func(app,message,*args,**kwargs) |
| | return is_bot_admin |
| |
|
| | def bot_can_ban(func): |
| | @wraps(func) |
| | async def can_restrict(app : Client, message : Message,*args,**kwargs): |
| | BOT = await app.get_chat_member(message.chat.id,BOT_USERNAME) |
| | |
| | if not BOT.privileges.can_restrict_members: |
| | await message.reply_text(f"I Don't Have Rights To Restrict The User In **{message.chat.title}**.") |
| | return |
| | return await func(app,message,*args,**kwargs) |
| | return can_restrict |
| |
|
| | def bot_can_change_info(func): |
| | @wraps(func) |
| | async def can_change_info(app : Client, message : Message,*args,**kwargs): |
| | BOT = await app.get_chat_member(message.chat.id,BOT_USERNAME) |
| |
|
| | if not BOT.privileges.can_change_info: |
| | await message.reply_text(f"I Don't Have Rights To Change Info In **{message.chat.title}**.") |
| | return |
| | return await func(app,message,*args,**kwargs) |
| | return can_change_info |
| |
|
| |
|
| | def bot_can_promote(func): |
| | @wraps(func) |
| | async def can_promote(app : Client, message : Message,*args,**kwargs): |
| | BOT = await app.get_chat_member(message.chat.id,BOT_USERNAME) |
| |
|
| | if not BOT.privileges.can_promote_members: |
| | await message.reply_text(f"I Don't Have Rights To Promote Users In **{message.chat.title}**.") |
| | return |
| | return await func(app,message,*args,**kwargs) |
| | return can_promote |
| |
|
| |
|
| | def bot_can_pin(func): |
| | @wraps(func) |
| | async def can_pin(app : Client, message : Message,*args,**kwargs): |
| | BOT = await app.get_chat_member(message.chat.id,BOT_USERNAME) |
| |
|
| | if not BOT.privileges.can_pin_messages: |
| | await message.reply_text(f"I Don't Have Rights To Pin Messages In **{message.chat.title}**.") |
| | return |
| | return await func(app,message,*args,**kwargs) |
| | return can_pin |
| |
|
| | def bot_can_del(func): |
| | @wraps(func) |
| | async def can_delete(app : Client, message : Message,*args,**kwargs): |
| | BOT = await app.get_chat_member(message.chat.id,BOT_USERNAME) |
| |
|
| | if not BOT.privileges.can_delete_messages: |
| | await message.reply_text(f"I Don't Have Rights To Delete Messages In **{message.chat.title}**.") |
| | return |
| | return await func(app,message,*args,**kwargs) |
| | return can_delete |
| |
|
| | def user_admin(mystic): |
| | @wraps(mystic) |
| | async def wrapper(app : Client, message : Message,*args,**kwargs): |
| | chat_type = message.chat.type |
| | if chat_type == ChatType.PRIVATE: |
| | return await message.reply("Use This Command In Groups Only") |
| | if message.sender_chat: |
| | if message.sender_chat.id == message.chat.id: |
| | return await message.reply("You Are Anonymous Admin Please Use User ID") |
| | else: |
| | return await message.reply_text("You Are Not Admin") |
| | |
| | else: |
| | user_id = message.from_user.id |
| | chat_id = message.chat.id |
| | user = await app.get_chat_member(chat_id,user_id) |
| | |
| | if (user.status not in COMMANDERS) and user_id not in SUDORES: |
| | return await message.reply_text("You Are Not Admin") |
| | |
| | return await mystic(app,message,*args,**kwargs) |
| |
|
| | return wrapper |
| |
|
| | def user_can_ban(mystic): |
| | @wraps(mystic) |
| | async def wrapper(app : Client, message : Message,*args,**kwargs): |
| | user_id = message.from_user.id |
| | chat_id = message.chat.id |
| | user = await app.get_chat_member(chat_id,user_id) |
| | |
| | if (user.privileges and not user.privileges.can_restrict_members) and user_id not in SUDORES: |
| |
|
| | return await message.reply_text("You Dont Have Right To Restrict Users.") |
| | |
| | return await mystic(app,message,*args,**kwargs) |
| | return wrapper |
| |
|
| | def user_can_del(mystic): |
| | @wraps(mystic) |
| | async def wrapper(app : Client, message : Message,*args,**kwargs): |
| | user_id = message.from_user.id |
| | chat_id = message.chat.id |
| | user = await app.get_chat_member(chat_id,user_id) |
| | |
| | if (user.status in COMMANDERS and not user.privileges.can_delete_messages) and user_id not in SUDORES: |
| | return await message.reply_text("You Dont Have Right To Delete Messages") |
| | |
| | return await mystic(app,message,*args,**kwargs) |
| | return wrapper |
| | |
| |
|
| | def user_can_change_info(mystic): |
| | @wraps(mystic) |
| | async def wrapper(app : Client, message : Message,*args,**kwargs): |
| | user_id = message.from_user.id |
| | chat_id = message.chat.id |
| | user = await app.get_chat_member(chat_id,user_id) |
| | |
| | if (user.status in COMMANDERS and not user.privileges.can_change_info) and user_id not in SUDORES: |
| | return await message.reply_text("You Dont Have Right To Change Info Of This Group.") |
| | |
| | return await mystic(app,message,*args,**kwargs) |
| | return wrapper |
| | |
| | def user_can_promote(mystic): |
| | @wraps(mystic) |
| | async def wrapper(app : Client, message : Message,*args,**kwargs): |
| | user_id = message.from_user.id |
| | chat_id = message.chat.id |
| | user = await app.get_chat_member(chat_id,user_id) |
| | |
| | if (user.status in COMMANDERS and not user.privileges.can_promote_members) and user_id not in SUDORES: |
| | return await message.reply_text("You Dont Have Right To Promote Users Of This Group.") |
| | |
| | return await mystic(app,message,*args,**kwargs) |
| | return wrapper |
| | |
| |
|