Spaces:
Running
Running
| 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.tr_engine import tlang | |
| from Powers.utils.custom_filters import command, restrict_filter | |
| 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(tlang(m, "locks.locks_perm_sp")) | |
| 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(tlang(m, "general.no_perm_admin")) | |
| await m.reply_text("π " + (tlang(m, "locks.lock_all"))) | |
| 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(tlang(m, "locks.invalid_lock")) | |
| 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(tlang(m, "general.no_perm_admin")) | |
| await m.reply_text( | |
| "π " + (tlang(m, "locks.locked_perm").format(perm=perm)), | |
| ) | |
| await prevent_approved(m) | |
| return | |
| async def view_locks(_, m: Message): | |
| chkmsg = await m.reply_text(tlang(m, "locks.check_perm_msg")) | |
| 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 = (tlang(m, "locks.view_perm")).format( | |
| vmsg=vmsg, | |
| vmedia=vmedia, | |
| vother=vother, | |
| vwebprev=vwebprev, | |
| vpolls=vpolls, | |
| vinfo=vinfo, | |
| vinvite=vinvite, | |
| vpin=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(tlang(m, "general.something_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(tlang(m, "locks.unlocks_perm_sp")) | |
| 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(tlang(m, "general.no_perm_admin")) | |
| await m.reply_text("π " + (tlang(m, "locks.unlock_all"))) | |
| 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(tlang(m, "locks.invalid_lock")) | |
| 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(tlang(m, "general.no_perm_admin")) | |
| await m.reply_text( | |
| "π " + (tlang(m, "locks.unlocked_perm").format(uperm=uperm)), | |
| ) | |
| 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"] | |