Spaces:
Runtime error
Runtime error
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): | |
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): | |
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): | |
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): | |
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): | |
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): | |
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): | |
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): | |
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): | |
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): | |
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): | |
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 | |