Spaces:
Sleeping
Sleeping
from Powers import LOGGER | |
from asyncio import sleep | |
from Powers.bot_class import Gojo | |
from Powers.database.approve_db import Approve | |
from pyrogram.types import Message, ChatPermissions | |
from Powers.utils.custom_filters import command, restrict_filter | |
from pyrogram.errors import RPCError, ChatNotModified, ChatAdminRequired | |
async def lock_types(_, m: Message): | |
await m.reply_text( | |
( | |
"**Lock Types:**\n" | |
" - `all` = Everything\n" | |
" - `msg` = Messages\n" | |
" - `media` = Media, such as Photo and Video.\n" | |
" - `polls` = Polls\n" | |
" - `invite` = Add users to Group\n" | |
" - `pin` = Pin Messages\n" | |
" - `info` = Change Group Info\n" | |
" - `webprev` = Web Page Previews\n" | |
" - `inlinebots`, `inline` = Inline bots\n" | |
" - `animations` = Animations\n" | |
" - `games` = Game Bots\n" | |
" - `stickers` = Stickers" | |
), | |
) | |
return | |
async def lock_perm(c: Gojo, m: Message): | |
if len(m.text.split()) < 2: | |
await m.reply_text("Please enter a permission to lock!") | |
return | |
lock_type = m.text.split(None, 1)[1] | |
chat_id = m.chat.id | |
if not lock_type: | |
await m.reply_text(text="Specify a permission to lock!") | |
return | |
get_perm = m.chat.permissions | |
msg = get_perm.can_send_messages | |
media = get_perm.can_send_media_messages | |
webprev = get_perm.can_add_web_page_previews | |
polls = get_perm.can_send_polls | |
info = get_perm.can_change_info | |
invite = get_perm.can_invite_users | |
pin = get_perm.can_pin_messages | |
stickers = animations = games = inlinebots = None | |
if lock_type == "all": | |
try: | |
await c.set_chat_permissions(chat_id, ChatPermissions()) | |
LOGGER.info( | |
f"{m.from_user.id} locked all permissions in {m.chat.id}") | |
except ChatNotModified: | |
pass | |
except ChatAdminRequired: | |
await m.reply_text(text="I don't have permission to do that") | |
await m.reply_text("π " + "Locked <b>all</b> permission from this Chat!") | |
await prevent_approved(m) | |
return | |
if lock_type == "msg": | |
msg = False | |
perm = "messages" | |
elif lock_type == "media": | |
media = False | |
perm = "audios, documents, photos, videos, video notes, voice notes" | |
elif lock_type == "stickers": | |
stickers = False | |
perm = "stickers" | |
elif lock_type == "animations": | |
animations = False | |
perm = "animations" | |
elif lock_type == "games": | |
games = False | |
perm = "games" | |
elif lock_type in ("inlinebots", "inline"): | |
inlinebots = False | |
perm = "inline bots" | |
elif lock_type == "webprev": | |
webprev = False | |
perm = "web page previews" | |
elif lock_type == "polls": | |
polls = False | |
perm = "polls" | |
elif lock_type == "info": | |
info = False | |
perm = "info" | |
elif lock_type == "invite": | |
invite = False | |
perm = "invite" | |
elif lock_type == "pin": | |
pin = False | |
perm = "pin" | |
else: | |
await m.reply_text( | |
text=""" Invalid Lock Type! | |
Use /locktypes to get the lock types""" | |
) | |
return | |
try: | |
await c.set_chat_permissions( | |
chat_id, | |
ChatPermissions( | |
can_send_messages=msg, | |
can_send_media_messages=media, | |
can_send_other_messages=any( | |
[stickers, animations, games, inlinebots]), | |
can_add_web_page_previews=webprev, | |
can_send_polls=polls, | |
can_change_info=info, | |
can_invite_users=invite, | |
can_pin_messages=pin, | |
), | |
) | |
LOGGER.info( | |
f"{m.from_user.id} locked selected permissions in {m.chat.id}") | |
except ChatNotModified: | |
pass | |
except ChatAdminRequired: | |
await m.reply_text(text="I don't have permission to do that") | |
await m.reply_text( | |
"π " + f"Locked <b>{perm}</b> for this Chat.", | |
) | |
await prevent_approved(m) | |
return | |
async def view_locks(_, m: Message): | |
chkmsg = await m.reply_text(text="Checking Chat permissions...") | |
v_perm = m.chat.permissions | |
async def convert_to_emoji(val: bool): | |
if val: | |
return "β " | |
return "β" | |
vmsg = await convert_to_emoji(v_perm.can_send_messages) | |
vmedia = await convert_to_emoji(v_perm.can_send_media_messages) | |
vother = await convert_to_emoji(v_perm.can_send_other_messages) | |
vwebprev = await convert_to_emoji(v_perm.can_add_web_page_previews) | |
vpolls = await convert_to_emoji(v_perm.can_send_polls) | |
vinfo = await convert_to_emoji(v_perm.can_change_info) | |
vinvite = await convert_to_emoji(v_perm.can_invite_users) | |
vpin = await convert_to_emoji(v_perm.can_pin_messages) | |
if v_perm is not None: | |
try: | |
permission_view_str = f"""<b>Chat Permissions:</b> | |
<b>Send Messages:</b> {vmsg} | |
<b>Send Media:</b> {vmedia} | |
<b>Send Stickers:</b> {vother} | |
<b>Send Animations:</b> {vother} | |
<b>Can Play Games:</b> {vother} | |
<b>Can Use Inline Bots:</b> {vother} | |
<b>Webpage Preview:</b> {vwebprev} | |
<b>Send Polls:</b> {vpolls} | |
<b>Change Info:</b> {vinfo} | |
<b>Invite Users:</b> {vinvite} | |
<b>Pin Messages:</b> {vpin}""" | |
LOGGER.info(f"{m.from_user.id} used locks cmd in {m.chat.id}") | |
await chkmsg.edit_text(permission_view_str) | |
except RPCError as e_f: | |
await chkmsg.edit_text(text="Something went wrong!") | |
await m.reply_text(e_f) | |
return | |
async def unlock_perm(c: Gojo, m: Message): | |
if len(m.text.split()) < 2: | |
await m.reply_text("Please enter a permission to unlock!") | |
return | |
unlock_type = m.text.split(None, 1)[1] | |
chat_id = m.chat.id | |
if not unlock_type: | |
await m.reply_text(text="Specify a permission to unlock!") | |
return | |
if unlock_type == "all": | |
try: | |
await c.set_chat_permissions( | |
chat_id, | |
ChatPermissions( | |
can_send_messages=True, | |
can_send_media_messages=True, | |
can_send_other_messages=True, | |
can_add_web_page_previews=True, | |
can_send_polls=True, | |
can_change_info=True, | |
can_invite_users=True, | |
can_pin_messages=True, | |
), | |
) | |
LOGGER.info( | |
f"{m.from_user.id} unlocked all permissions in {m.chat.id}") | |
except ChatNotModified: | |
pass | |
except ChatAdminRequired: | |
await m.reply_text(text="I don't have permission to do that") | |
await m.reply_text("π " + "Unlocked <b>all</b> permission from this Chat!") | |
await prevent_approved(m) | |
return | |
get_uperm = m.chat.permissions | |
umsg = get_uperm.can_send_messages | |
umedia = get_uperm.can_send_media_messages | |
uwebprev = get_uperm.can_add_web_page_previews | |
upolls = get_uperm.can_send_polls | |
uinfo = get_uperm.can_change_info | |
uinvite = get_uperm.can_invite_users | |
upin = get_uperm.can_pin_messages | |
ustickers = uanimations = ugames = uinlinebots = None | |
if unlock_type == "msg": | |
umsg = True | |
uperm = "messages" | |
elif unlock_type == "media": | |
umedia = True | |
uperm = "audios, documents, photos, videos, video notes, voice notes" | |
elif unlock_type == "stickers": | |
ustickers = True | |
uperm = "stickers" | |
elif unlock_type == "animations": | |
uanimations = True | |
uperm = "animations" | |
elif unlock_type == "games": | |
ugames = True | |
uperm = "games" | |
elif unlock_type in ("inlinebots", "inline"): | |
uinlinebots = True | |
uperm = "inline bots" | |
elif unlock_type == "webprev": | |
uwebprev = True | |
uperm = "web page previews" | |
elif unlock_type == "polls": | |
upolls = True | |
uperm = "polls" | |
elif unlock_type == "info": | |
uinfo = True | |
uperm = "info" | |
elif unlock_type == "invite": | |
uinvite = True | |
uperm = "invite" | |
elif unlock_type == "pin": | |
upin = True | |
uperm = "pin" | |
else: | |
await m.reply_text( | |
text="""Invalid Lock Type! | |
Use /locktypes to get the lock types""" | |
) | |
return | |
try: | |
LOGGER.info( | |
f"{m.from_user.id} unlocked selected permissions in {m.chat.id}") | |
await c.set_chat_permissions( | |
chat_id, | |
ChatPermissions( | |
can_send_messages=umsg, | |
can_send_media_messages=umedia, | |
can_send_other_messages=any( | |
[ustickers, uanimations, ugames, uinlinebots], | |
), | |
can_add_web_page_previews=uwebprev, | |
can_send_polls=upolls, | |
can_change_info=uinfo, | |
can_invite_users=uinvite, | |
can_pin_messages=upin, | |
), | |
) | |
except ChatNotModified: | |
pass | |
except ChatAdminRequired: | |
await m.reply_text(text="I don't have permission to do that") | |
await m.reply_text( | |
"π " + f"Unlocked <b>{uperm}</b> for this Chat.", | |
) | |
await prevent_approved(m) | |
return | |
async def prevent_approved(m: Message): | |
approved_users = Approve(m.chat.id).list_approved() | |
ul = [user[0] for user in approved_users] | |
for i in ul: | |
try: | |
await m.chat.unban_member(user_id=i) | |
except (ChatAdminRequired, ChatNotModified, RPCError): | |
continue | |
LOGGER.info(f"Approved {i} in {m.chat.id}") | |
await sleep(0.1) | |
return | |
__PLUGIN__ = "locks" | |
__alt_name__ = ["grouplock", "lock", "grouplocks"] | |
__HELP__ = """ | |
***Locks*** | |
Use this to lock group permissions. | |
Allows you to lock and unlock permission types in the chat. | |
**Usage:** | |
* /lock `<type>`: Lock Chat permission. | |
* /unlock `<type>`: Unlock Chat permission. | |
* /locks: View Chat permission. | |
* /locktypes: Check available lock types! | |
**Example:** | |
`/lock media`: this locks all the media messages in the chat.""" | |