iamgojoof6eyes
Help inline fix may be
9da6fea
raw
history blame
10.4 kB
from asyncio import sleep
from pyrogram.errors import ChatAdminRequired, ChatNotModified, RPCError
from pyrogram.types import ChatPermissions, Message
from Powers import LOGGER
from Powers.bot_class import Gojo
from Powers.database.approve_db import Approve
from Powers.utils.custom_filters import command, restrict_filter
@Gojo.on_message(command("locktypes"))
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
@Gojo.on_message(command("lock") & restrict_filter)
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
@Gojo.on_message(command("locks") & restrict_filter)
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
@Gojo.on_message(command("unlock") & restrict_filter)
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__ = """ 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."""